Matrixmultip0likation mittels loop blocking
-
...
-
schonmal einen Debugger benutzt? Das wär die Gelegenheit, wenn nicht.
-
kann man hier noch mehr optimieren?
-
Lass dir mal den den optimierten Assemblercode deiner "normalen" Variante anzeigen (am besten mit Visual C++). Ich hab das Gefühl, dass der Compiler da mehr weis als du
Sonst schau dir mal das hier an: http://en.wikipedia.org/wiki/Strassen_algorithm (nur für zwei n x n matritzen)
-
Alle weiteren Antworter möchte ich darum bitten, nach "loop blocking" zu recherchieren, wo zum Beispiel was wie http://software.intel.com/en-us/articles/how-to-use-loop-blocking-to-optimize-memory-use-on-32-bit-intel-architecture/ herauskommt, oder schon zu wissen, was es ist.
Wenn wir so weiter machen, wird er sonst sehr traurig. Und das wollen wir doch alle nicht.
-
Ich denke, es ist nicht zielführend, wenn man hier mit
double**
arbeitet. Ich würde soweit gehen zu behaupten, dass angenommen wird, die Elemente der Matrix lägen linear im Speicher, also eherdouble*
mitptr[zeile*f1+spalte*f2]
für bestimmte Faktoren f1 und f2 -- je nach Layout. Mitdouble**
springt man bei einem Matrixprodukt ggf hin und her im Speicher -- egal, wie man seine Blockgrößen wählt oder die Schleifen schachtelt.