Skip to content

Paralelización del código

CPU de OilFlow2D

El código de OilFlow2D 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 de memoria compartida y multiplataforma en C/C++ y Fortran sobre arquitecturas que incluyen plataformas MAC OS, Unix y Windows (OpenMP, 2009). OpenMP proporciona instrucciones para paralelizar códigos serie existentes y ejecutarlos en plataformas de memoria compartida, desde computadoras asequibles y ampliamente disponibles con varios núcleos hasta supercomputadoras. Mediante este enfoque de paralelización, OilFlow2D distribuye dinámicamente la carga de trabajo computacional entre tantos procesadores o núcleos como estén disponibles. De esta forma, el modelo optimiza sus cálculos para la arquitectura particular de cada computadora.

La figura muestra la aceleración del modelo con respecto al número de procesadores o núcleos en una computadora DELL Precision 7400 con 2 CPU Intel Xeon X5472 \@3.00GHz y 16 GB 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 utilizando el modelo paralelizado en esta plataforma informática particular.

Aceleración obtenida con el código paralelizado de OilFlow2D en función del número de núcleos del procesador.

GPU de OilFlow2D

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

Aceleración obtenida con el código paralelizado de OilFlow2D en función del número de núcleos del procesador.