Speicherbank-Konflikte

Bei vielen Programmen ist die Geschwindigkeit, mit der auf den Speicher zugegriffen werden kann, ein limitierender Faktor. Ein wichtiges Problem dabei sind die sogenannten ''Bank-Konflikte'': Die Speicherzellen sind in Gruppen eingeteilt, ''Bänke'' genannt, wobei schnell aufeinanderfolgende Zugriffe auf Speicherzellen innerhalb einer Bank wesentlich langsamer sind als zwischen verschiedenen Bänken. Ein Ziel muß es also sein, solche Zugriffe zu vermeiden. Ohne hier auf weitere Einzelheiten einzugehen (s. Abschnitt 4.3.4), kann man als Faustregel festhalten, daß man bei der Deklaration von Arrays ungerade Dimensionen verwenden sollte. Damit verschenkt man zwar etwas Speicherplatz, gewinnt aber bei manchen Problemen einiges an Geschwindigkeit.
Im Programm linalg, Version 2.2, wurde der Parameter NMAX in main.f, gaussj.f und ludcmp.f von 100 auf 101 gesetzt und damit die Speicher-Struktur der verwendeten Arrays geändert. Mit den Profiling-Methoden aus Abschnitt 2.8 und Optimierungsstufe O2 ergeben sich folgende Ergebnisse:

Routine CPU-Zeit CPU-Zeit .Zeitersparnis . 
  NMAX=100 NMAX=101 .[%] . 
    . 
setmat 0 .889m 0 .880m 1 .0
ernorm 1 .388m 1 .368m 1 .5
testmt 0 .133 0 .115 15 .7
setvec 0 .016m 0 .016m 0 .0
luinv 0 .769m 0 .740m 3 .9
lubksb 0 .079 0 .073 8 .2
ludcmp 0 .048 0 .045 6 .7
gaussj 0 .442 0 .414 6 .8
getmat 0 .028 0 .027 3 .7
getvec 0 .273m 0 .274m -0 .4
total(main) 0 .772 0 .716 7 .8

previous    contents     next

Peter Junglas 18.10.1993