Skip to content

Paralelización del código

RiverFlow2D CPU

El código de RiverFlow2D se ha paralelizado mediante directivas OpenMP disponibles en el compilador Intel C++. La interfaz de programación de aplicaciones (API) de OpenMP admite programación paralela multiplataforma de memoria compartida en C/C++ y Fortran sobre arquitecturas que incluyen MAC OS, Unix y Windows (OpenMP, 2009). OpenMP proporciona instrucciones para paralelizar código secuencial existente y ejecutarlo en plataformas de memoria compartida, desde computadoras asequibles y ampliamente disponibles con varios núcleos hasta supercomputadoras. Mediante este enfoque de paralelización, RiverFlow2D distribuye dinámicamente la carga de trabajo computacional entre tantos procesadores o núcleos como estén disponibles. De este modo, el modelo optimiza sus cálculos para la arquitectura particular de cada computadora.

La figura muestra la aceleración del modelo en función del número de procesadores/núcleos en una computadora DELL Precision 7400 con 2 Intel Xeon CPU X5472 \@3.00GHz y 16GB de RAM. Con 8 núcleos, el modelo se ejecuta más de 4 veces más rápido que el modelo no paralelizado. Una simulación de una hora tarda aproximadamente 6 minutos cuando se utiliza el modelo paralelizado en esta plataforma informática particular.

Aceleración al utilizar el código paralelizado de RiverFlow2D en función del número de núcleos del procesador.

RiverFlow2D GPU

La versión GPU del modelo RiverFlow2D ofrece aceleraciones notables que reducen considerablemente los tiempos de ejecución. RiverFlow2D GPU implementa dos estrategias: paralelización OpenMP y técnicas GPU. Dado que, al tratar flujos transitorios de inundación, el número de llamadas a celdas mojadas cambia durante la simulación, la implementación de OpenMP incluye una asignación dinámica de tareas a los procesadores que garantiza una carga de trabajo equilibrada. El método estricto de RiverFlow2D para controlar la conservación del volumen (errores del orden de \(10^{-14} \%\)) en la modelación numérica de los frentes de mojado/secado implica un paso de corrección que no es completamente local, lo cual requiere un tratamiento especial para evitar degradar el rendimiento del modelo. La versión GPU reduce el tiempo de cálculo hasta en un factor de 700X en comparación con ejecuciones de CPU no paralelizadas (1 núcleo). La figura muestra pruebas de rendimiento realizadas con tecnología reciente de hardware GPU, que demuestran que las técnicas de paralelización implementadas en RiverFlow2D GPU pueden reducir significativamente el costo computacional.

Aceleración al utilizar el código paralelizado de RiverFlow2D en función del número de núcleos del procesador.