Python se ha convertido en un lenguaje de programación muy popular,
pero también es uno de los menos eficientes en términos de
prestaciones y consumo energético. Este artículo describe el proceso
que hemos seguido para acelerar una aplicación Python de tratamiento
masivo de datos orientada a las Time-Series sismográficas, de manera
que al usuario final se le sigue ofreciendo la productiva interfaz
Python que tanta aceptación tiene. Este proceso se ha desplegado
siguiendo una estrategia en tres fases. En la primera fase se ha
aplicado un cambio algorítmico cuyo objetivo ha sido reducir la
complejidad computacional del principal kernel (hot-spot) del
código: las correlaciones cruzadas. Para ello se ha optado por
implementar dichas correlaciones aplicando el Teorema de la
Convolución. En la segunda fase se ha aplicado un cambio de modelo
de programación que ha consisitido en la implementación en C++ del
kernel, lo que nos ha permitido la utilización de la muy optimizada
biblioteca FFTW. En la tercera fase, gracias al cambio del modelo de
programación, aplicamos optimizaciones conscientes de la
arquitectura, entre ellas OpenMP, para aprovechar los nodos
multicore de nuestro sistema, o ArrayFire que nos permite hacer uso
de aceleradores gráficos (con soporte en CUDA y OpenCL).
Tras este proceso de optimización hemos obtenido una aceleración de
6121x sobre la aplicación original de partida.