Investigación sobre Optimización de Rendimiento

A partir de 2023, me uní a un estudio de investigación sobre el análisis y la optimización del rendimiento de algoritmos.

He tenido la suerte de unirme a un profesor de la Universidad de Santa Clara en un campo de investigación relacionado con Sketching Denso y Disperso Aleatorio, una rama del Álgebra Lineal. Este es un enfoque para reducir matrices y vectores, lo que teóricamente resulta en un cálculo más rápido de la multiplicación de matrices. Para mi investigación específicamente, me centré en el RandBLAS' Sketching Denso y Disperso (BLAS significa Subprogramas Básicos de Álgebra Lineal), y las subrutinas que contenían.

Mi enfoque para analizar estas subrutinas fue utilizar un software de contador de rendimiento llamado PAPI (Perfil de Actividad de la Vía). Esta herramienta, cuando se utiliza, es capaz de devolver información del sistema registrada durante el tiempo de los sketches. Esto incluye, pero no se limita a, Ciclos, Instrucciones y Tiempo de Ejecución. Notablemente de estos tres, las Instrucciones me proporcionarían información esencial sobre si la subrutina medida estaba paralelizada, un tema que abordaré más adelante.

Comencé instalando primero una gran cantidad de bibliotecas, todas utilizadas para ejecutar RandBLAS o sus dependencias. También tuve que crear funciones adaptables para PAPI que pudieran integrarse fácilmente en varios archivos que deseaba medir. Esto tomó bastante tiempo (por algunas razones fuera de mi control a veces), pero una vez configurado, pude comenzar mi análisis. Este proceso consistió en conectarse al WaveHPC de SCU, un clúster de servidores de computación de alto rendimiento con múltiples núcleos. En esta plataforma ejecutaría mis simulaciones en un Nodo de CPU, que es un nodo adaptable en el que puedo asignar el número de hilos y núcleos que deseo utilizar.

Un script automatizado de Shell alteraría entonces el número de hilos (un parámetro común que cambié), así como los tamaños de las matrices. Estas simulaciones se ejecutarían y almacenarían en un archivo .csv. Elegí este formato en lugar de una base de datos como MySQL, ya que más tarde usaría .csv como entrada para un software de interpretación de Aprendizaje Automático, que visualizaría mis datos.

Para el análisis de los datos, elegí usar Dashing, que tenía la capacidad de leer e interpretar cuáles eran los eventos más influyentes (este es el nombre dado a los datos obtenidos de la simulación) que afectarían el tiempo de ejecución. Luego mostraría estos resultados en formatos fáciles de analizar, como mapas de calor o gráficos de barras.

Los datos obtenidos de estas simulaciones fueron generalmente inconclusos. Sin embargo, algunos eventos tendieron a tener un efecto recurrente en el tiempo de ejecución y el rendimiento general, y por lo tanto se tendrán en cuenta para futuros esfuerzos de optimización. Si estás interesado en aprender más sobre esos eventos específicamente, u otros detalles de mi trabajo, puedes ver mi informe formal del último trimestre durante el cual trabajé en esta investigación.

En el momento de escribir esto, todavía me queda un trimestre más, por lo que mi trabajo está incompleto.


Si deseas ver mi investigación tú mismo, he subido mis scripts a un repositorio de GitHub vinculado aquí.