API Dokumentation mit javadoc.
Versuche den gesamten Hauptspeicher für Matritzen zu verwenden.
MatMult hat 5 Matrizen, ein double hat 8 Byte
Wähle n mit 5 * 8 * n2 < MEMsize:
n < sqrt( MEMsize / (5*8) )
bei MEMsize = 1 GB folgt n < 5100
bei MEMsize = 800 MB folgt n < 4500
bei MEMsize = 512 MB folgt n < 3500
bei MEMsize = 400 MB folgt n < 3200
bei MEMsize = 256 MB folgt n < 2500
Versuche den Block der Matrix B in den L2 Cache zu bringen.
Der B Block hat blocksize*n Einträge
plus eine Zeile von A und C, also 2 * n Einträge.
Wähle blocksize mit (blocksize + 2) * 8 * n < L2size:
blocksize < L2size / (8*n) - 2
bei L2size = 1024 KB und n = 4000 folgt blocksize < 30
bei L2size = 1024 KB und n = 1000 folgt blocksize < 125
bei L2size = 512 KB und n = 4000 folgt blocksize < 14
bei L2size = 512 KB und n = 2500 folgt blocksize < 24
bei L2size = 512 KB und n = 1000 folgt blocksize < 63
bei L2size = 512 KB und n = 800 folgt blocksize < 78
bei L2size = 512 KB und n = 250 folgt blocksize < 260
bei L2size = 256 KB und n = 4000 folgt blocksize < 5
bei L2size = 256 KB und n = 1000 folgt blocksize < 30
bei L2size = 256 KB und n = 800 folgt blocksize < 38
bei L2size = 256 KB und n = 400 folgt blocksize < 78
Rechner (CPUs) | MEMsize | n | L2size | block size | GHz | Zeit (sec) | Algorithmus (Threads) | JDK |
---|---|---|---|---|---|---|---|---|
BAcluster (2) | 900MB | 4000 | 512KB | 20 | 2,4 | 380,6 | SeqBlockTrans | 1.4.2 |
BAcluster (2) | 900MB | 4000 | 512KB | 10 | 2,4 | 191,3 | ParProcBlockTrans(4) | 1.4.2 |
BAcluster (2) | 900MB | 4000 | 512KB | 15 | 2,4 | 146,9 | ParProcBlockTrans(4) | 1.4.2 |
BAcluster (2) | 900MB | 4000 | 512KB | 15 | 2,4 | 180,2 | ParProcBlockTrans(2) | 1.4.2 |
BAcluster (2) | 900MB | 4000 | 512KB | 15 | 2,4 | 135,9 | ParProcBlockTrans(6) | 1.4.2 |
LaptopA (1) | 800MB | 4000 | 1MB | 20 | 1,4 | 312,0 | ParProcBlockTrans(4) | 1.5 |
LaptopA (1) | 800MB | 4000 | 1MB | 25 | 1,4 | 384,0 | ParProcBlockTrans(4) | 1.5 |
LaptopA (1) | 800MB | 4000 | 1MB | 20 | 1,4 | 500,0 | SeqBlockTrans | 1.5 |
LaptopA (1) | 800MB | 4000 | 1MB | 25 | 1,4 | 500,0 | SeqBlockTrans | 1.5 |
LaptopB (1) | 1000MB | 1100 | 512KB | 20 | 1,17 | 18,4 | ParProcBlockTrans(4) | 1.5 |
LaptopC (1) | 400MB | 1100 | 256KB | 20 | 1,67 | 16,6 | ParProcBlockTrans(4) | 1.4.2 |
LaptopC (1) | 400MB | 1100 | 256KB | 10 | 1,67 | 15,7 | ParProcBlockTrans(4) | 1.4.2 |
PcD (2ht) | 800MB | 4000 | 1MB | 26 | 3,0 | 333 | SeqBlockTrans | 1.5 |
PcD (2ht) | 800MB | 4000 | 1MB | 26 | 3,0 | 353 | ParProcBlockTrans | 1.5 |
PcD (2ht) | 800MB | 1100 | 1MB | 25 | 3,0 | 6,3 | SeqBlockTrans | 1.5 |
PcD (2ht) | 800MB | 1100 | 1MB | 25 | 3,0 | 4,0 | ParProcBlockTrans | 1.5 |
Ergebnisse:
Umfang der Implementierungen:
lines (factor) | bytes (factor) | Implementierung |
188 (1.0) | 4464 (1.0) | SeqByteTSP.java |
379 (2.0) | 9398 (2.1) | ParByteLocalTSP.java |
992 (5.3) | 26178 (5.9) | DistTSP.java |