Estructurando código paralelo para clusters heterogéneos de CPUs/GPUs - Pousa, Adrián (2016)
Los clusters de CPUs/GPUs se han vuelto habituales en HPC. Para aprovechar al máximo su potencia de cómputo, las aplicaciones deben desarrollarse combinando distintas herramientas de programación paralela, por esto el código se torna complejo y difícil de estructurar. En este trabajo describimos un esquema para estructurar código paralelo a ser ejecutado sobre un cluster de CPUs/GPUs y explotar toda su potencia de cómputo (CPUs y GPUs disponibles). En particular, nos centramos en aplicaciones desarrolladas con MPI+OpenMP+CUDA. Asimismo, explicamos los pasos a seguir para compilar estas aplicaciones híbridas. Resolvemos el problema de suma por reducción utilizando el esquema propuesto sobre un cluster de CPUs/GPUs heterogéneo, por esto la distribución de carga tiene en cuenta las capacidades de los recursos de cómputo disponibles. Comprobamos que es posible incrementar el rendimiento de la aplicación considerando todos los recursos de cómputo del cluster (CPUs y GPUs) respecto a utilizar solo las GPUs.