
Los bucles iterativos de plantilla (ISL) o cálculos de plantilla son una clase de solución de procesamiento numérico de datos [ 1 ] que actualizan los elementos de una matriz según un patrón fijo, llamado plantilla. [ 2 ] Se encuentran con mayor frecuencia en simulaciones por computadora , por ejemplo, para dinámica de fluidos computacional en el contexto de aplicaciones científicas y de ingeniería. Otros ejemplos notables incluyen la resolución de ecuaciones diferenciales parciales , [ 1 ] el núcleo de Jacobi , el método de Gauss-Seidel , [ 2 ] el procesamiento de imágenes [ 1 ] y los autómatas celulares . [ 3 ] La estructura regular de las matrices distingue a las técnicas de plantilla de otros métodos de modelado como el método de elementos finitos . La mayoría de los códigos de diferencias finitas que operan en cuadrículas regulares pueden formularse como ISL.
Definición
Los ISL realizan una secuencia de barridos (llamados pasos de tiempo) a través de una matriz dada. [ 2 ] Generalmente, se trata de una cuadrícula regular bidimensional o tridimensional. [ 3 ] Los elementos de las matrices suelen denominarse celdas. En cada paso de tiempo, todos los elementos de la matriz se actualizan. [ 2 ] Utilizando elementos vecinos de la matriz en un patrón fijo (la plantilla), se calcula el nuevo valor de cada celda. En la mayoría de los casos, los valores límite permanecen sin cambios, pero en algunos casos (por ejemplo, códigos LBM ) también es necesario ajustarlos durante el cálculo. Dado que la plantilla es la misma para cada elemento, el patrón de accesos a los datos se repite. [ 4 ]
De manera más formal, podemos definir los ISL como una 5-tupla.con el siguiente significado: [ 3 ]
- es el conjunto de índices. Define la topología del arreglo.
- es el conjunto (no necesariamente finito) de estados, uno de los cuales cada célula puede adoptar en cualquier paso de tiempo dado.
- define el estado inicial del sistema en el tiempo 0.
- es la plantilla en sí y describe la forma real del vecindario. Hayelementos en la plantilla.
- es la función de transición que se utiliza para determinar el nuevo estado de una célula, dependiendo de sus vecinas.
Dado que I es un intervalo entero k -dimensional, la matriz siempre tendrá la topología de una cuadrícula regular finita. La matriz también se denomina espacio de simulación y las celdas individuales se identifican por su índice.. La plantilla es un conjunto ordenado decoordenadas relativas. Ahora podemos obtener para cada celdala tupla de los índices de sus vecinos
Sus estados se dan mediante el mapeo de la tupla.a la tupla de estados correspondiente, dóndese define de la siguiente manera:
Esto es todo lo que necesitamos para definir el estado del sistema para los siguientes pasos de tiempo.con:
Tenga en cuenta quese define eny no solo enya que también es necesario establecer las condiciones de contorno. A veces, los elementos depuede definirse mediante una suma vectorial módulo la dimensión del espacio de simulación para realizar topologías toroidales:
Esto puede resultar útil para implementar condiciones de contorno periódicas , lo que simplifica ciertos modelos físicos.
Ejemplo: Iteración de Jacobi en 2D

Para ilustrar la definición formal, veremos cómo se define una iteración de Jacobi bidimensional . La función de actualización calcula la media aritmética de los cuatro vecinos de una celda. En este caso, partimos de una solución inicial de 0. Los límites izquierdo y derecho se fijan en 1, mientras que los límites superior e inferior se establecen en 0. Tras un número suficiente de iteraciones, el sistema converge hacia una forma de silla de montar.






Plantillas
La forma del vecindario utilizado durante las actualizaciones depende de la propia aplicación. Las plantillas más comunes son las versiones 2D o 3D del vecindario de von Neumann y del vecindario de Moore . El ejemplo anterior utiliza una plantilla de von Neumann 2D, mientras que los códigos LBM generalmente utilizan su variante 3D. El Juego de la Vida de Conway utiliza el vecindario de Moore 2D. Dicho esto, también se pueden encontrar otras plantillas, como una plantilla de 25 puntos para la propagación de ondas sísmicas [ 5 ] .
Problemas de implementación
Muchos códigos de simulación pueden formularse naturalmente como ISL. Dado que el tiempo de computación y el consumo de memoria crecen linealmente con el número de elementos de la matriz, las implementaciones paralelas de ISL son de suma importancia para la investigación. [ 6 ] Esto es un desafío ya que los cálculos están estrechamente acoplados (debido a que las actualizaciones de las celdas dependen de las celdas vecinas) y la mayoría de los ISL están limitados por la memoria (es decir, la relación entre los accesos a la memoria y los cálculos es alta). [ 7 ] Prácticamente todas las arquitecturas paralelas actuales se han explorado para ejecutar ISL de manera eficiente; [ 8 ] en este momento las GPGPU han demostrado ser las más eficientes. [ 9 ]
Bibliotecas
Debido a la importancia de los lenguajes de simulación intersistemas (ISL) para las simulaciones por computadora y a sus elevados requisitos computacionales, existen numerosos esfuerzos para crear bibliotecas reutilizables que ayuden a los científicos a realizar cálculos basados en plantillas. Estas bibliotecas se centran principalmente en la paralelización, pero también pueden abordar otros desafíos, como la entrada/salida, la gestión de recursos y los puntos de control . Se pueden clasificar según sus API.
Bibliotecas basadas en parches
Este es un diseño tradicional. La biblioteca gestiona un conjunto de matrices escalares n -dimensionales, a las que el programa de usuario puede acceder para realizar actualizaciones. La biblioteca maneja la sincronización de los límites (denominados zona fantasma o halo). La ventaja de esta interfaz es que el programa de usuario puede iterar sobre las matrices, lo que facilita la integración de código heredado [ 10 ] . La desventaja es que la biblioteca no puede manejar el bloqueo de caché (ya que esto debe hacerse dentro de los bucles [ 11 ] ) ni el encapsulamiento de las llamadas a la API para aceleradores (por ejemplo, a través de CUDA u OpenCL ). Las implementaciones incluyen Cactus , un entorno de resolución de problemas de física, y waLBerla .
Bibliotecas basadas en células
Estas bibliotecas trasladan la interfaz a la actualización de celdas de simulación individuales: solo se exponen la celda actual y sus vecinas, por ejemplo, mediante métodos getter/setter. La ventaja de este enfoque es que la biblioteca puede controlar con precisión qué celdas se actualizan y en qué orden, lo cual es útil no solo para implementar el bloqueo de caché, [ 9 ] sino también para ejecutar el mismo código en sistemas multinúcleo y GPU. [ 12 ] Este enfoque requiere que el usuario vuelva a compilar el código fuente junto con la biblioteca. De lo contrario, se requeriría una llamada a función para cada actualización de celda, lo que perjudicaría seriamente el rendimiento. Esto solo es factible con técnicas como plantillas de clase o metaprogramación , razón por la cual este diseño solo se encuentra en bibliotecas más recientes. Ejemplos de ello son Physis y LibGeoDecomp .
Referencias
- 1 2 3 Roth, Gerald et al. (1997) Actas de SC'97: Redes y computación de alto rendimiento. Compilación de plantillas en Fortran de alto rendimiento.
- 1 2 3 4 Sloot, Peter MA et al. (28 de mayo de 2002) Ciencia Computacional – ICCS 2002: Conferencia Internacional, Ámsterdam, Países Bajos, 21-24 de abril de 2002. Actas, Parte I. Página 843. Editorial: Springer. ISBN 3-540-43591-3.
- ^ Fey , Dietmar y col . (2010) Computación en red: una tecnología básica para la ciencia computacional . Página 439. Editorial: Springer. ISBN 3-540-79746-7
- ↑ Yang, Laurence T.; Guo, Minyi. (12 de agosto de 2005) Computación de alto rendimiento : paradigma e infraestructura. Página 221. Editorial: Wiley-Interscience. ISBN 0-471-65471-X
- ↑ Micikevicius, Paulius et al. (2009) Cálculo de diferencias finitas 3D en GPU usando CUDA Actas del 2.º Taller sobre Procesamiento de Propósito General en Unidades de Procesamiento Gráfico ISBN 978-1-60558-517-8
- ↑ Datta, Kaushik (2009) Auto-tuning Stencil Codes for Cache-Based Multicore Platforms Archived 2012-10-08 at the Wayback Machine , Ph.D. Tesis
- ↑ Wellein, G et al. (2009) Bloqueo temporal eficiente para cálculos de plantillas mediante paralelización de frentes de onda con reconocimiento de multinúcleo , 33.ª Conferencia Anual Internacional IEEE sobre Software y Aplicaciones Informáticas, COMPSAC 2009
- ↑ Datta, Kaushik et al. (2008) Optimización y autoajuste del cálculo de plantillas en arquitecturas multinúcleo de última generación , Actas de la conferencia ACM/IEEE de 2008 sobre supercomputación (SC '08)
- 1 2 Schäfer, Andreas y Fey, Dietmar (2011) Algoritmos de código de plantilla de alto rendimiento para GPGPU , Actas de la Conferencia Internacional sobre Ciencias Computacionales, ICCS 2011
- ↑ S. Donath, J. Götz, C. Feichtinger, K. Iglberger y U. Rüde (2010) waLBerla: Optimización para sistemas basados en Itanium con miles de procesadores , Computación de alto rendimiento en ciencia e ingeniería, Garching/Múnich 2009
- ↑ Nguyen, Anthony et al. (2010) Optimización de bloqueo 3.5-D para cálculos de plantillas en CPU y GPU modernas , Actas de SC '10 de la Conferencia Internacional ACM/IEEE de 2010 sobre Computación de Alto Rendimiento, Redes, Almacenamiento y Análisis
- ↑ Naoya Maruyama, Tatsuo Nomura, Kento Sato y Satoshi Matsuoka (2011) Physis: Un modelo de programación paralela implícita para cálculos de plantillas en supercomputadoras aceleradas por GPU a gran escala , Actas de SC '11 de la Conferencia Internacional ACM/IEEE de 2011 sobre Computación de Alto Rendimiento, Redes, Almacenamiento y Análisis
Enlaces externos
- Física
- LibGeoDecomp archivado el 25/06/2022 en Wayback Machine .
- waLBerla
- Dinámica de fluidos computacional
- Software de simulación