PETSc es una buena biblioteca si desea mejorar el rendimiento de SpMV en serie o en paralelo sin ajustar manualmente su propio código o usar instrucciones SSE o una serie de bibliotecas sintonizadas más pequeñas. PETSc se optimiza para SpMV directamente desde la carga de la matriz en un formato binario (leer el archivo .mtx es una gran sobrecarga) para ofrecer una variedad de estructuras de datos de matriz apropiadas (en serie y en paralelo) para proporcionar varias configuraciones de tiempo de ejecución para ajustar el rendimiento , como el tamaño del bloque.
PETSc implementa diferentes algoritmos de SpMV para diferentes tipos de matriz, a saber, casos simétricos y no simétricos. El diseño de datos y los accesos vectoriales se planifican cuidadosamente para maximizar la reutilización de datos durante el cálculo, particularmente para los tamaños de bloque 1-7 u 8. Desde mi experiencia, la asignación previa para la matriz (dependiendo de la estructura de dispersión de la matriz) y la elección de la estructura de datos + bloque apropiado El tamaño de su matriz dispersa son perillas críticas que desea ajustar para mejorar el rendimiento de su SpMV.