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