Bevor Sie versuchen, Ihren Code zu optimieren, sollten Sie sich zunächst fragen, ob Sie etwas optimieren müssen. Bibliotheken, die Matrix-Vektor-Produkte optimieren, umgehen dabei zwei Probleme: Einschränkungen bei der Größe des Caches und die Latenz beim Laden von Daten aus dem Speicher. Zum einen werden die Daten, die sich derzeit im Cache befinden, in vollem Umfang für alles verwendet, wofür sie verwendet werden müssen, bevor sie durch andere Daten ersetzt werden. Zum anderen werden Daten vorab in den Cache abgerufen, bevor sie tatsächlich verwendet werden.
In Ihrem Fall haben Sie eine relativ geringe arithmetische Intensität Ihrer Daten - Sie laden Daten aus dem Speicher, verwenden sie genau einmal und fahren dann mit der nächsten Matrix fort. Damit bleibt nur der zweite Weg zur Optimierung: Vorabruf von Daten, bevor Sie sie verwenden.
Aber wie gesagt, bevor Sie versuchen, die Dinge zu optimieren, kann es sich lohnen, herauszufinden, was Sie bereits haben: Zeit, wie viele Matrixvektorprodukte Sie pro Sekunde ausführen, berechnen Sie, wie viele Bytes erforderlich sind, um aus dem Speicher auf Ihren Prozessor zu laden. und vergleichen Sie dies dann mit der Bandbreite des Prozessors, den Sie zufällig in Ihrem Computer haben. Möglicherweise stellen Sie fest, dass Sie nichts tun können, um die Dinge schneller zu machen.