Antes de intentar optimizar su código, vale la pena preguntar si hay algo para optimizar para comenzar. Las bibliotecas que optimizan los productos de matriz de vectores lo hacen al solucionar dos problemas: limitaciones en el tamaño de la memoria caché y la latencia para cargar datos desde la memoria. El primero se realiza mediante el uso de los datos que están actualmente en la memoria caché en toda su extensión para todo lo que necesita ser utilizado antes de reemplazarlo por otros datos, el segundo se realiza mediante la captación previa de datos en la memoria caché antes de usarla realmente.
En su caso, tiene una intensidad aritmética relativamente pequeña de sus datos: carga los datos de la memoria, los usa exactamente una vez y luego pasa a la siguiente matriz. Esto deja solo la segunda vía para optimizar: buscar datos antes de usarlos.
Pero, como dije, antes de intentar optimizar las cosas, puede valer la pena averiguar lo que ya tiene: cronometra cuántos productos de matriz de vectores está haciendo por segundo, calcule cuántos bytes requiere cargar esto desde la memoria en su procesador, y luego compare esto con el ancho de banda del procesador que tiene en su máquina. Puede descubrir que no hay nada que pueda hacer para acelerar las cosas.