[en] This project presents the study and optimization of the algorithm seismological H-MSSG proposed by Otilio Rojas. This algorithm is based on the use of mimetic operators who try to adapt the methods of calculations finite properties of continuous operators. The optimization work on the parallelization of the code using a specific hardware called GPGPU focused on graphic processing for personal computers. This item consists of multiple cores in a parallelism-focused structured architecture. Although these elements were originally created to calculate and render graphical objects and textures a new technological trend has led to the creation of a programming interface created by NVIDIA called CUDA which facilitates its use outside the field of graphic tools GPU hardware. In the first part of the project the algorithm and the field of seismology are analysed in order to know their parallel character. An analysis of the work explores the use of character parallelizable identified within the loop update matrix algorithm to adapt it to the CUDA programming with the ultimate goal of reducing the runtime. The second part of the project compares the results obtained by CUDA optimization with optimization tools available in regular hardware. These optimizations are based on the use of SIMD type instructions. Finally the results were compared with OpenACC programming tool that presents a compilation directives by which it is possible to parallelize code automatically in the GPU hardware. Once the results obtained with these tools is a comparison between the methods of optimization.

[es] Este proyecto presenta la optimización y el estudio del algoritmo sismológico H-MSSG propuesto por Otilio Rojas. Este algoritmo se basa en el uso de los operadores miméticos que tratan de adaptar a los métodos de cálculos finitos las propiedades de los operadores continuos. La optimización trabaja sobre los aspectos paralelizables del código mediante el uso de un hardware específico llamado GPGPU enfocado al cálculo de procesado gráfico por los ordenadores personales. Este elemento se compone de múltiples núcleos estructurados en una arquitectura enfocada al paralelismo. Aunque estos elementos fueron creados originalmente para calcular y renderizar objetos gráficos y texturas una nueva tendencia tecnológica ha llevado a la creación de una interfaz de programación creada por nVidia llamada CUDA que facilita el uso fuera del campo gráfico de las herramientas del hardware de la GPU. En una primera parte del trabajo se analiza el algoritmo y el campo de la sismología para conocer profundamente el carácter paralelo. Una vez analizado el trabajo profundiza en el uso del carácter paralelizable que se identifica dentro de los bucles de actualización de matrices del algoritmo para adaptarlo a la programación en CUDA con el objetivo final de reducir el tiempo de ejecución. En una segunda parte del trabajo se comparan los resultados de optimización obtenidos en CUDA con las optimizaciones al alcance en las herramientas hardware de trabajo habitual y en concreto las CPU comerciales. Estas optimizaciones se basan en el uso de instrucciones de tipo SIMD. Finalmente se han comparado los resultados con la herramienta de programación OpenACC que presenta unas directivas de compilación mediante las cuales es posible paralelizar el código de forma automática. Una vez obtenidos los resultados con estas herramientas se realiza una comparación entre todos los métodos de optimización.