¿Hay algún problema / algoritmo famoso en la informática científica que no pueda acelerarse mediante paralelización?


27

¿Existen problemas / algoritmos famosos en la informática científica que no puedan acelerarse mediante paralelización? Al leer libros sobre CUDA me parece que la mayoría de las cosas pueden ser.


La búsqueda binaria no se puede acelerar (significativamente, es decir, por un factor), incluso cuando se considera la jerarquía de memoria.


3
@Anycorn No, el Gram-Schmidt clásico de izquierda y el Gram-Schmidt modificado de derecha funcionan bien en paralelo. Hay muchos otros algoritmos QR paralelos, incluido el TSQR recientemente popularizado.
Jed Brown

@Raphael: Creo que es posible acelerar la búsqueda binaria por el factor log (n), n = # procesadores. En lugar de dividir el intervalo de búsqueda en partes y verificar dónde continuar, divida el intervalo en n partes. Quizás haya formas más eficientes, no lo sé.
milagro173

Respuestas:


32

CTCTCTTNClogT

Ejemplos

  • C=T
  • m×mT=N=O(m2)C=m=T
  • T=NC=logT
  • τ(0,1)dk=τ/ΔtτN1/dC=kT=kN=τN(d+1)/dP=T/C=NN1/d

Complejidad formal

NC=P


13

NCO(logcn)O(nk)P=NCPPPPNCPNCP=NC

PP


9

Comience por descifrar la Ley de Amdahl . Básicamente, cualquier cosa con una gran cantidad de pasos en serie se beneficiará insignificantemente del paralelismo. Algunos ejemplos incluyen análisis, expresiones regulares y la mayoría de las compresiones de alta relación.

Aparte de eso, el problema clave es a menudo un cuello de botella en el ancho de banda de la memoria. En particular, con la mayoría de las GPU, sus fracasos teóricos superan ampliamente la cantidad de números de coma flotante que puede obtener con sus ALU, ya que los algoritmos con baja intensidad aritmética (flops / caché-miss) pasarán una gran mayoría de tiempo esperando en la RAM.

Por último, cada vez que un fragmento de código requiere ramificación, es poco probable que obtenga un buen rendimiento, ya que la lógica de ALU generalmente es mayor que la lógica.

En conclusión, un ejemplo realmente simple de algo que sería difícil obtener una ganancia de velocidad de una GPU es simplemente contar el número de ceros en una matriz de enteros, ya que es posible que tenga que bifurcar a menudo, como máximo realice 1 operación (incremente en uno) en el caso de que encuentre un cero y realice al menos una recuperación de memoria por operación.

Un ejemplo libre del problema de ramificación es calcular un vector que es la suma acumulativa de otro vector. ([1,2,1] -> [1,3,4])

No sé si estos cuentan como "famosos", pero ciertamente hay una gran cantidad de problemas con los que la computación paralela no lo ayudará.


3
El "ejemplo gratuito de ramificación" que dio es la suma de prefijos, que en realidad tiene un buen algoritmo paralelo: http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html Calcular el número de ceros debería ser eficiente por razones similares. Sin embargo, no hay forma de evitar la intensidad aritmética ...
Max Hutchinson

Guay. Estoy corregido en eso.
meawoppl

8

El método de marcha rápida (famoso) para resolver la ecuación de Eikonal no se puede acelerar mediante la paralelización. Existen otros métodos (por ejemplo, métodos de barrido rápido) para resolver la ecuación de Eikonal que son más susceptibles a la paralelización, pero incluso aquí el potencial de aceleración (paralela) es limitado.

El problema con la ecuación de Eikonal es que el flujo de información depende de la solución misma. Hablando en términos generales, la información fluye a lo largo de las características (es decir, los rayos de luz en la óptica), pero las características dependen de la solución misma. Y el flujo de información para la ecuación Eikonal discretizada es aún peor, ya que requiere aproximaciones adicionales (como las que están implícitamente presentes en los métodos de barrido rápido) si se desea una aceleración paralela.

Para ver las dificultades para la paralelización, imagine un bonito laberinto como en algunos de los ejemplos en la página web de Sethian . El número de celdas en el camino más corto a través del laberinto (probablemente) es un límite inferior para el número mínimo de pasos / iteraciones de cualquier algoritmo (paralelo) que resuelva el problema correspondiente.

(Escribo "(probablemente) es", porque los límites inferiores son notoriamente difíciles de probar, y a menudo requieren algunas suposiciones razonables sobre las operaciones utilizadas por un algoritmo).


Buen ejemplo, pero no creo que haya reclamado el límite inferior. En particular, se pueden usar métodos de cuadrícula múltiple para resolver la ecuación eikonal. Al igual que con la cuadrícula múltiple para Helmholtz de alta frecuencia, los desafíos están principalmente en el diseño de espacios gruesos adecuados. En el caso de un laberinto, una estrategia de agregación gráfica debe ser efectiva, con la representación aproximada determinada resolviendo problemas locales (por lo tanto independientes) para segmentos del laberinto.
Jed Brown

En general, cuando los métodos de cuadrícula funcionan bien, significa que la granularidad del problema es menor que la descritización, y una "cantidad de respuesta correcta" desproporcionada proviene del paso de resolución del curso. Solo una observación, ¡pero el límite inferior de ese tipo de cosas es complicado!
meawoppl

@JedBrown Desde una perspectiva práctica, la cuadrícula múltiple para Helmholtz de alta frecuencia es bastante desafiante, al contrario de lo que parece implicar su comentario. Y usar multigrid para la ecuación eikonal es "poco común", por decir lo menos. Pero veo su objeción "teórica" ​​contra el límite inferior sugerido: las compensaciones de tiempo desde varios puntos dentro del laberinto pueden calcularse antes de que se conozca el tiempo para llegar a estos puntos, y agregarse en paralelo después de que la información faltante esté disponible. Pero en la práctica, los solucionadores eikonales paralelos de propósito general son felices si realmente se acercan al límite.
Thomas Klimpel

No quise decir que fuera fácil, los espacios gruesos de los rayos de onda son realmente muy técnicos. Pero, creo que estamos de acuerdo en que ya existe la posibilidad de paralelismo en las regiones abiertas, mientras que en "laberintos" estrechos (que exponen muy poco paralelismo con los métodos estándar), el problema del aumento de escala es más manejable.
Jed Brown

@JedBrown La diapositiva 39 de www2.ts.ctw.utwente.nl/venner/PRESENTATIONS/MSc_Verburg.pdf (desde 2010) dice cosas como "Extienda el solucionador de 2D a 3D" y "Adapte el método a problemas con números de onda muy variables". Por lo tanto, la cuadrícula de rayos de onda puede ser prometedora, pero "aún no maduro" parece ser más apropiado que "muy técnico" para describir sus problemas actuales. Y no es realmente un solucionador de Helmholtz de alta frecuencia (porque es un solucionador de "onda completa"). Hay otros solucionadores de Helmholtz multirredes "suficientemente maduros" (solucionadores de "onda completa"), pero incluso estos todavía son "investigación activa".
Thomas Klimpel

1

Otra clase de problemas que son difíciles de paralelizar en la práctica son los problemas sensibles a los errores de redondeo, donde la estabilidad numérica se logra mediante la serialización.

Considere, por ejemplo, el proceso de Gram-Schmidt y su modificación en serie. El algoritmo funciona con vectores, por lo que puede usar operaciones de vectores paralelos, pero eso no escala bien. Si el número de vectores es grande y el tamaño del vector es pequeño, el uso de Gram-Schmidt clásico paralelo y la reortogonalización pueden ser estables y más rápidos que el Gram-Schmidt modificado simple, aunque implica hacer varias veces más trabajo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.