Ich konnte z. T. die Geschwindigkeit durch einfaches Umformulieren erheblich beschleunigen (siehe Anhang). Klar, wir reden von Millisekunden oder Mikrosekunden. Wenn aber eine Durchlauf nachher 3 Minuten anstelle von 5 Minuten braucht, und es sind 100 Durchläufe durchzuführen, dann reden wir von 200 Minuten Einsparung. Diese zentralen Funktionen werden halt teilweise mehrere Milliarden(!) mal aufgerufen.
Zu diesem Thema hätte ich noch ein Video, dort wird zwar C++ benutzt, aber die Schlussfolgerungen, wie man seine Daten anordnen soll, damit sie gut in den Cache passen, gelten ganz allgemein:
http://channel9.msdn.com/Events/Build/2013/4-329