Benutzung des SFB-Clusters im Shared-Memory

Transcrição

Benutzung des SFB-Clusters im Shared-Memory
Benutzung des SFB-Clusters
im Shared-Memory-Betrieb
Roger Butenuth
10.12.97
Inhalt
1. SCI – Übersicht
2. Dolphin PCI-SCI Karte
3. Speicherverwaltung in Linux
4. Speichermodell
5. Leistungsdaten
6. Programmierumgebungen
7. Synchronisationsoperationen
SCI – Übersicht
• Unidirektionaler Ring
• Verschiedene standardisierte Datenraten
• Kopplung von Ringen durch Switches
• Globaler Adreßraum
(64 Bit, 264 Byte)
16 Bit
48 Bit
node-ID
local address
64 Bit
SCI System (NUMA)
CPU
CPU
CPU
CPU
Cache
Cache
Cache
Cache
Speicher
SCI-Cache
SCI-Cache
Speicher
SCI-Bridge
SCI-Bridge
SCI-Ring
SCI System (gekoppelte Workstations)
CPU
CPU
CPU
CPU
Cache
Cache
Cache
Cache
PCI-Bridge
Speicher
Speicher
PCI-Bridge
PCI-bus
PCI-bus
SCI-Bridge
SCI-Bridge
SCI-Ring
Dolphin PCI-SCI Karte
SRAM
(ATT)
DMA
PCI
PSB
B-Link
(Bus)
LC1
SCI-Ring
Dolphin Switch
• 200 Mbyte/s pro Ring
• Latency ca. 1 µs
• Interne Bandbreite 400 Mbyte/s
B-Link
LC1
LC1
LC1
LC1
Ring 1
Ring 2
Ring 3
Ring 4
Speicherverwaltung in Linux
I/O Adreßbereich
(PCI-Karte)
Logische Sicht
eines Prozesses
(Adreßraum)
AVL-Baum
Physikalischer
Speicher
Speicherbereiche
• Objekte im Kern
• Pro Adreßraum als AVL-Baum organisiert
• Mit einer Datei oder einem Device verbunden
Knotenübergreifender gemeinsamer Speicher
Knoten A
Knoten B
MMU
MMU
ATT
gemeinsamer
Bereich
Speichermodell
• SCI-Transaktionen werden
über Streams abgewickelt.
Zustand
Adresse
64 Byte Daten
• Es existieren je 8 Streams für Lese- und Schreibzugriffe
• Auswahl erfolgt über die Zugriffsadresse
Konzepte zur Durchsatzsteigerung
Write Gathering
Speculative Buffering
• Daten werden gesammelt,
bis der Stream voll ist.
• Es werden immer 64 Byte
gelesen
• Es werden – wenn möglich
– 64 Byte Transaktionen
generiert
• Diese bleiben gepuffert bis
der Stream anderweitig
benötigt wird
Speichermodell (Fortsetzung)
Ignorieren der Stream-Buffer kann Leistungseinbußen
um den Faktor 60 bringen!
Entfernte Schreiboperationen werden unter Umständen:
• verzögert ausgeführt
• vertauscht
Entfernte Leseoperationen liefern unter Umständen
veraltete Daten
Leistungsdaten
Durchsatz
Chipset
Remote Write
Remote Read
Pentium
PentiumPro
PentiumPro
Intel 82437
Intel 82441FX
Intel 82454GX
Triton
Natoma
Orion
68 MB/s
6.3 MB/s
28 MB/s (default)
7.0 MB/s (default)
66 MB/s (write combining)
38 MB/s (write combining)
5.2 MB/s
5.6 MB/s
Latency
ca. 3 µs
Programmierumgebungen
Anwendung
SMI
MPI
PVM
?
?
sci-init
Linux
SCI-Treiber
Hardware
SMI (Shared Memory Interface)
Quelle: Marcus Dormanns, RWTH Aachen
Funktionalität:
1. Starten eines parallelen Programmes
2. Synchronisation (Semaphore, Barriere)
3. Speicherverwaltung
4. (Loop Scheduling)
Dokumentation:
/homes3/uranus/pc2/sci/smi/docs/manual.ps
Beispiel
void main(int argc, char** argv) {
SMI_Init(&argc, &argv);
SMI_Proc_rank(&proc_rank);
SMI_Proc_size(&proc_size);
SMI_Create_shreg(SIZE*SIZE*sizeof(double), BLOCKED, NULL,
&shseg_id, (char**)&grid);
for(t=0;t<ITERATIONS;t++) {
for(i=low;i<=high;i++)
for(j=1;j<SIZE-1;j++)
grid[i*SIZE+j] = 0.25 * (grid[i*GRIDSIZE+j+1] + ...);
SMI_Barrier();
}
SMI_Finalize();
}
sci-init
Funktionalität:
1. Starten eines parallelen Programmes (Basis für SMI)
2. Low-Level Synchronisation (Basis für SMI?)
3. Testumgebung für den Treiber
4. Abstraktion für Anwendungsprogrammierer:
• Store-Barrier: scii_store_barrier();
• Load-Barrier: scii_load_barrier();
• Debugger: scii_start_debugger();
Synchronisationsoperationen
Barrieren
Einzel- und Gruppensignalisierung
Sperren
signal
signal
wait
unlock
lock
wait
wait
wait
lock