Comparativa del rendimiento de una GPU usando OpenMP, OpenACC CUDA mediante un ejemplo de dinámica molecular

La idea central de este TFG es comparar el uso y rendimiento de una GPU y una CPU cuando se programa con diferentes técnicas (OpenACC, OpenMP o CUDA) para acelerar aplicaciones computacionalmente costosas. La programación de GPU y CPU se puede hacer con el uso de directivas tales como son OpenMP y OpenACC, que permiten mantener el código original hasta cierto punto, en cambio, el lenguaje CUDA, el cual requiere un mayor trabajo a la hora de modificar el código para adaptarlo a la forma en que este lenguaje funciona, solo permite la programación en GPU. En este TFG no solo se realizarán análisis en las diferencias de rendimiento de cada versión, sino que también se medirá el tiempo necesario para desarrollar y depurar cada una de ellas. Para ello, se usarán dos ejemplos sencillos, fáciles y conocidos, aunque computacionalmente costosos, los cuales serán el algoritmo de cálculo del número pi y, un simulador simple de dinámica molecular.
ABSTRACT
The main idea of this TFG is to compare the use and performance of a GPU and a CPU when programming with different techniques (OpenACC, OpenMP or CUDA) to accelerate computationally expensive applications. GPU and CPU programming can be done both with the use of directives such as OpenMP and OpenACC, which allow to keep the original code to some extent, while CUDA language, which requires more work to modify the code to adapt it to the way this language works, only allows GPU programming. In this dissertation we will not only analyze the performance differences of each version, but we will also measure the time required to develop and debug each of them. For this, two simple, easy and known examples will be used, although computationally expensive, which will be the algorithm for calculating the number pi and a simple molecular dynamics simulator.

​La idea central de este TFG es comparar el uso y rendimiento de una GPU y una CPU cuando se programa con diferentes técnicas (OpenACC, OpenMP o CUDA) para acelerar aplicaciones computacionalmente costosas. La programación de GPU y CPU se puede hacer con el uso de directivas tales como son OpenMP y OpenACC, que permiten mantener el código original hasta cierto punto, en cambio, el lenguaje CUDA, el cual requiere un mayor trabajo a la hora de modificar el código para adaptarlo a la forma en que este lenguaje funciona, solo permite la programación en GPU. En este TFG no solo se realizarán análisis en las diferencias de rendimiento de cada versión, sino que también se medirá el tiempo necesario para desarrollar y depurar cada una de ellas. Para ello, se usarán dos ejemplos sencillos, fáciles y conocidos, aunque computacionalmente costosos, los cuales serán el algoritmo de cálculo del número pi y, un simulador simple de dinámica molecular.
ABSTRACT
The main idea of this TFG is to compare the use and performance of a GPU and a CPU when programming with different techniques (OpenACC, OpenMP or CUDA) to accelerate computationally expensive applications. GPU and CPU programming can be done both with the use of directives such as OpenMP and OpenACC, which allow to keep the original code to some extent, while CUDA language, which requires more work to modify the code to adapt it to the way this language works, only allows GPU programming. In this dissertation we will not only analyze the performance differences of each version, but we will also measure the time required to develop and debug each of them. For this, two simple, easy and known examples will be used, although computationally expensive, which will be the algorithm for calculating the number pi and a simple molecular dynamics simulator. Read More