Als Compileroptionen wurden gewählt -O3 zur Performanceoptimierung und -lrt zum Linken der real-time library:
g++ -O3 -o MatMult.out ParMultProcBlockTrans.cc ... MatMult.cc -lrt
Compilierung der JAVA Quellen erfolgt mit dem Aufruf
javac MatMult.java
Ausführung des Programms erfolgt mit
java -Xms6000M -Xmx9000M MatMultHierbei gibt -Xms die anfängliche Größe des auf dem Heap reservierten Arbeitsspeichers wieder und -Xmx dessen maximale Größe.
Die Rechnung erfolgt auf einem Knoten des bwGRID Clusters Mannheim mit 8 CPUs (2.83GHz), 16 GB Hauptspeicher und 12 MB L2-Cache. Als Matrixgröße ist n = 800 und n=2000 gewählt und eine Blockgröße von 20.
Zeit (msec) Java | Zeit (msec) C++ | Algorithmus (Threads) | ||
---|---|---|---|---|
n=800 | n=2000 | n=800 | n=2000 | |
5239 | 124328 | 3144 | 78393 | Seq |
4725 | 101996 | 805 | 12755 | SeqBlock |
899 | 19121 | 780 | 12134 | SeqTrans |
810 | 12637 | 781 | 12102 | SeqBlockTrans |
1296 | 22853 | 247 | 7801 | Par n threads |
1364 | 36937 | 236 | 9427 | Par 4 threads |
1230 | 25605 | 205 | 3247 | ParBlock 4 threads |
269 | 9378 | 205 | 3058 | ParTrans 4 threads |
230 | 3296 | 199 | 3047 | ParBlockTrans 4 threads |
794 | 19340 | 134 | 5429 | Par 8 threads |
714 | 13776 | 118 | 1710 | ParBlock 8 threads |
180 | 6500 | 120 | 1554 | ParTrans 8 threads |
240 | 1781 | 104 | 1605 | ParBlockTrans 8 threads |
Zum Vergleich: Intel MKL Bibliothek mit DGEMM Unterprogramm benötigt unter 600 msec bei n = 2000.