¿Qué problemas científicos son los más adecuados para la computación paralela?

Aquellos en los que puede encontrar un método estable y explícito para resolver una ecuación diferencial parcial (como diferencia finita / elemento / volumen, espectral, multirrejilla, etc.).

Trataré de explicar usando el ejemplo de Wiki para la ecuación de calor 1D.

Tiene [matemática] U_t = U_ {xx} [/ matemática] (los subíndices denotan diferenciación parcial) con condición de límite [matemática] U (0, t) = U (1, t) = 0 [/ matemática] y condición inicial [ matemáticas] U (x, 0) = U_0 (x) [/ matemáticas].

Imagina que tomas tu cuadrícula espacial y la cortas en pedazos, [matemáticas] x_0, …, x_J [/ matemáticas], y lo mismo con tu tiempo, [matemáticas] t_0, …, t_N [/ matemáticas], y la diferencia es [ matemática] h [/ matemática] para la diferencia de espacio y [matemática] k [/ matemática] para la diferencia de tiempo. Para abreviar, usemos [math] u (x_j, t_n) = u ^ n_j [/ math].

El concepto básico es que puedes reformular la primera ecuación con las piezas cortadas que acabas de hacer, para que se vea así:

[matemáticas] \ frac {u ^ {n + 1} _j – u ^ n_j} {k} = \ frac {u ^ n_ {j + 1} – 2u ^ n_j + u ^ n_ {j-1}} {h ^ 2}. [/ Matemáticas]

Y luego, para cada paso siguiente [matemáticas] n + 1 [/ matemáticas], puede usar esta ecuación:

[matemáticas] u ^ {n + 1} _j = (1 – 2 \ frac {k} {h ^ 2}) u ^ n_j + \ frac {k} {h ^ 2} u ^ n_ {j-1} + \ frac {k} {h ^ 2} u ^ n_ {j + 1} [/ math]

Entonces, ahora toma todos sus puntos de espacio y los divide entre la cantidad de procesadores que tiene, y asigna ese número a cada procesador. Todo lo que tiene que hacer es asegurarse de que cada procesador se comunicará con su “vecino” los valores de borde de su mini-grid, ya que esas serán las condiciones de borde para el otro tipo.

Ahora el problema con esto es que no siempre podrá encontrar un método explícito para resolver sus ecuaciones, al menos no uno que sea estable y convergente. Siempre podría intentar ayudarlo haciendo que su cuadrícula y espacio de tiempo sean más finos, pero en algún momento será ridículo y sería mejor usar otro tipo de método (como uno implícito o un operador dividido). Hay varias formas de hacer esos cálculos en paralelo que implican hacer cosas divertidas con los cálculos matriciales, pero son bastante complicados y es mejor dejar que las personas que desarrollan las bibliotecas lo hagan (ver ScaLAPACK, por ejemplo, o cuBLAS para CUDA- GPU habilitadas).

——————————————————

Craig Heile en los comentarios me preguntó cómo estas cosas son beneficiosas. Es una pregunta muy interesante y amplia, y creo que la mayoría de la gente se sorprendería de lo esencial que son estos métodos para hacer ciencia e ingeniería computacional. De todos modos, aquí estaba mi respuesta:

Los PDE son realmente increíblemente útiles en una gran cantidad de áreas. Como mencionó, el CFD se usa en muchas cosas: diseño de motores, aerodinámica, energía eólica, generadores de captación de corrientes oceánicas / fluviales, ingeniería naval y muchos más.

Pero CFD no es lo único que usa PDE en gran medida. Investigué en astrofísica y gases cuánticos, y en astrofísica se parecía mucho a CFD, donde tienes que modelar colapso estelar, nubes de gas impactantes entre sí, dinámica galáctica (incluidas colisiones), simulaciones de materia oscura y simulación de galaxias y cúmulos para modelar el universo.

En gases cuánticos, trabajé en condensados ​​de Bose-Einstein, que es un tipo de materia que se compone de un montón de partículas que están todas en el mismo estado cuántico y, por lo tanto, comparten una función de onda común. Entonces, la función de onda se puede modelar mediante métodos que son extremadamente similares a la ecuación de calor anterior que mostré. Los BEC de especies múltiples también son posibles utilizando estos métodos, y los fermiones a veces se pueden modelar de manera similar. Hay muchos modelos cuánticos que se pueden hacer de esta manera. También hay dinámica molecular también.

También existe el campo del modelado estructural que a veces toma prestado un poco de los modelos de partículas en CFD, pero también utiliza el modelado de malla para modelar las tensiones en un edificio, avión o tubería. La mayoría de las cosas en las que puede pensar que trabajan los ingenieros estructurales deben modelarse de esa manera.

Los ingenieros de acústica y vibraciones (relacionados con la estructura, en cierto sentido) también deben preocuparse por estas cosas. Pueden modelar un ala de avión, avión, nave espacial, motor o altavoz utilizando los métodos anteriores.

En cierto modo, es una respuesta muy barata a una pregunta muy amplia. Es casi equivalente a preguntar, ¿cómo son útiles las PDE en física? La respuesta a eso es prácticamente todo. Cualquier cosa caótica. Demonios, cualquier cosa no caótica. La primera ley de Newton es una ecuación diferencial, aunque separable y que no necesariamente requiere métodos numéricos sofisticados para resolver.

Y acabo de pasar por la física. Hay mucho más que encontrar en la dinámica de la población, el control del tráfico, la investigación de logística / operaciones, el comportamiento de la mafia, la economía, el modelado financiero (algo importante en wall st.), El modelado del cerebro, el modelado de sangre y venas, la mayoría de las partes del cuerpo se pueden modelar manera (esto se está arrastrando un poco a la física), y mucho más. El mundo se describe mediante ecuaciones diferenciales.

Hadayat Seddiqi ya hizo una hermosa exposición de un caso clásico de ecuación diferencial parcial (por diferencias finitas, para el calor, hay más enfoques). No hay argumento en contra de este tipo de problema que domina el mundo de la computación científica paralela, pero es un punto adicional y menor que el más adecuado puede significar varias cosas. Los solucionadores de PDE son, sin duda, los códigos científicos paralelos más comunes, y eso los hace los mejores en el sentido de que tienen una gran cantidad de métodos desarrollados que los científicos pueden aprovechar y en los que pueden confiar.

En un sentido técnico de qué tipo de problema puede brindarle el mayor beneficio del paralelismo, las cargas de trabajo vergonzosamente paralelas son quizás aún mejores. Estos son problemas que no requieren comunicación (relacionada con el problema) entre los procesos participantes y, por lo tanto, se pueden ejecutar de forma independiente, ya sea en secuencia o utilizando tantas unidades paralelas que tenga disponibles. No son un caso puramente teórico, los ejemplos incluyen ejecuciones de conjuntos (conjuntos de copias de entrada con perturbaciones aleatorias diferentes), derivando alguna propiedad para cada punto de muestra en un conjunto grande de un experimento, barridos de parámetros (simulando todas las posibilidades de un rango de variables iniciales), y la lista continúa.

Solo una nota al pie, de verdad.