BMDFM ( Binary Modular Dataflow Machine ) ist eine Software, die das parallele Ausführen einer Anwendung auf symmetrischen Shared Memory-Multiprozessoren (SMP) mit mehreren Prozessoren ermöglicht die Ausführung einzelner Anwendungen. BMDFM erkennt und nutzt die Parallelität automatisch aufgrund der statischen und vor allem der DYNAMISCHEN ZEITPLANUNG der Datenflussanweisungssequenzen, die aus dem zuvor sequentiellen Programm abgeleitet wurden.
Das dynamische BMDFM-Scheduling-Subsystem führt eine SMP-Emulation der Tagged-Token-Datenflussmaschine durch, um die transparente Datenflusssemantik für die Anwendungen bereitzustellen. Es sind keine Anweisungen für die parallele Ausführung erforderlich.
Hintergrund [ edit ]
Heutzutage sind symmetrische parallele Shared Memory-Multiprozessor-Prozessoren (SMP) komplexe Maschinen, bei denen eine Vielzahl architektonischer Aspekte gleichzeitig angesprochen werden muss, um eine hohe Leistung zu erzielen . Aktuelle SMP-Standardcomputer für das technische Rechnen können viele eng gekoppelte Kerne aufweisen (gute Beispiele sind SMP-Maschinen, die auf Intel-Multi-Core-Prozessoren oder IBM POWER-Multi-Core-Prozessoren basieren). Die Anzahl der Kerne pro SMP-Knoten wird sich in den kommenden Jahren wahrscheinlich verdoppeln, wie die Computerhersteller bekannt geben.
Multi-Cores sollen eine durch Software identifizierte Thread-Parallelität ausnutzen. Daher besteht die schwierigste Aufgabe darin, einen effizienten Weg zu finden, wie die Leistung von Multi-Core-Prozessoren für die parallele Verarbeitung eines Anwendungsprogramms genutzt werden kann. Das bestehende OpenMP-Paradigma der statischen Parallelisierung mit einer Fork-Join-Laufzeitbibliothek funktioniert nur für schleifenintensive reguläre Array-basierte Berechnungen. Die Parallelisierungsmethoden für die Kompilierungszeit sind jedoch im Allgemeinen schwach und für unregelmäßige Anwendungen fast nicht anwendbar:
- Es gibt viele Operationen, die eine nicht deterministische Zeit in Anspruch nehmen, wodurch es schwierig wird, genau zu wissen, wann bestimmte Daten verfügbar werden.
- Eine Speicherhierarchie mit Mehrebenen-Caches hat unvorhersehbare Latenzzeiten für den Speicherzugriff. [19659009] Die Codes anderer Benutzer können im Mehrbenutzer-Modus Ressourcen verbrauchen oder einen Teil der Berechnung auf eine Weise verlangsamen, die der Compiler nicht berücksichtigen kann.
- Interprozedurale und bereichsübergreifende Optimierungen während der Kompilierung sind schwierig (sehr oft) unmöglich), weil Compiler nicht herausfinden können, in welche Richtung ein Bedingter über einen Funktionsaufruf hinausgeht oder nicht optimiert werden kann.
Transparente Datenflusssemantik von BMDFM [ edit ]
Ein neuartiger BMDFM (Binary Modular) Die Data-Flow Machine) -Technologie verwendet hauptsächlich die dynamische Planung, um die Parallelität eines Anwendungsprogramms auszunutzen. BMDFM vermeidet daher die genannten Nachteile der Kompilierzeitverfahren. BMDFM ist eine parallele Programmierumgebung für Multi-Core-SMP, die Folgendes bietet:
- Konventionelles Programmierparadigma, das keine Anweisungen für die parallele Ausführung erfordert.
- Transparente (implizite) Nutzung des Parallelismus auf natürliche und lastverteilte Weise, wobei alle verfügbaren Multi-Core-Prozessoren im System automatisch verwendet werden.
BMDFM vereint die Vorteile von bekannte Architekturprinzipien in einer einzigen Hybridarchitektur, die implizite Parallelität der Anwendungen mit vernachlässigbarem dynamischem Planungsaufwand und ohne Engpässe nutzen kann. Hauptsächlich wird das grundlegende Datenflussprinzip verwendet. Das Datenflussprinzip besagt: "Eine Anweisung oder eine Funktion kann ausgeführt werden, sobald alle ihre Argumente bereit sind. Eine Datenflussmaschine verwaltet die Tags für alle Daten zur Laufzeit. Die Daten werden mit dem Ready-Tag gekennzeichnet, wenn die Daten berechnet wurden. Anweisungen mit fertigen Argumenten werden sie ausgeführt, indem sie ihre Ergebnisdaten kennzeichnen ".
Die Hauptfunktion von BMDFM besteht darin, auf konventioneller Ebene ein herkömmliches Programmierparadigma bereitzustellen, die so genannte transparente Datenfluss-Semantik. Ein Benutzer versteht BMDFM als virtuelle Maschine, die alle Anweisungen eines Anwendungsprogramms parallel ausführt und alle Mechanismen der Parallelisierung und Synchronisierung vollständig transparent ausführt. Die Anweisungen eines Anwendungsprogramms sind normale Operatoren, aus denen jedes einzelne Thread-Programm bestehen kann. Dazu gehören Variablenzuweisungen, bedingte Verarbeitung, Schleifen, Funktionsaufrufe usw.
Angenommen, wir haben das folgende Codefragment:
( setq a ( foo0 i )) # a = 19659021] i ); ( setq b ( foo1 ( + 1 1))) # b = foo1 ( i + 1 ] (19659021] 19659023] ( ++ b )) # b ++ ; (19659021] outf a =% d n a ) # printf ( a =% d n a ); ( outf b =% d n b # 19659071] printf ( b =% d n b ); Die beiden ersten Aussagen sind unabhängig, also eine Datenflussmaschine von BMDFM kann laufen sie auf verschiedenen Prozessoren oder Prozessorkernen. Die beiden letzten Anweisungen können auch parallel ausgeführt werden, aber erst nachdem "a" und "b" berechnet wurden. Die Datenfluss-Engine erkennt Abhängigkeiten automatisch, da sie zur Laufzeit dynamisch ein Datenflussdiagramm erstellen kann. Darüber hinaus ordnet die Datenfluss-Engine den Ausgabestrom korrekt an, um die Ergebnisse sequentiell auszugeben. Somit werden die Ergebnisse auch nach der Verarbeitung außerhalb der Reihenfolge auf natürliche Weise angezeigt.
Angenommen, das obige Codefragment ist jetzt in einer Schleife verschachtelt:
( für i 1 1 N ( progn # für ( i ] = 1 ; i <19659022] N ; i ++ ] [ ( setq 19659022] a ( foo0 i )) # a = foo0 i i ; 19659120] ( setq b ( foo1 ( + i 1 )))) 19659029] = foo1 ( i + 1 ); ( setq b ++ [19659022] b )) # b ++ ; ( outf a =% d n a ) # printf ( a =% d n a a ; ( outf b =% d n b ) # printf ( b =% d n " b ); )) # }
Die Datenfluss-Engine von BMDFM hält die Variablen" a "und" b "jeweils für sich Iteration. Tatsächlich handelt es sich dabei um unterschiedliche Kopien der Variablen. Eine Kontextvariable ist vorhanden, bis sie von Instruktionskonsumenten referenziert wird. Spätere, nicht referenzierte Kontexte werden zur Laufzeit gesammelt. Daher kann die Datenfluss-Engine sowohl lokale Parallelität innerhalb der Iteration als auch globale Parallelität nutzen sowie mehrere Iterationen gleichzeitig ausführen.
Architektur von BMDFM [ edit ]
Das Grundkonzept von BMDFM ist in der nächsten Abbildung dargestellt. Der vorgeschlagene Ansatz stützt sich auf zugrunde liegende SMP-Hardware, die auf dem Markt erhältlich ist. Normalerweise bieten SMP-Anbieter ihr eigenes SMP-Betriebssystem (OS) mit einer SVR4 / POSIX-UNIX-Schnittstelle (Linux, HP-UX, SunOS / Solaris, Tru64OSF1, IRIX, AIX, BSD, MacOS usw.) an. Auf einem SMP-Betriebssystem führt das Multithread-Datenfluss-Laufzeitmodul eine Software-Emulation der Datenflussmaschine aus. Eine solche virtuelle Maschine verfügt über Schnittstellen zur Sprache der virtuellen Maschine und zu C, die die transparente Datenfluss-Semantik für die herkömmliche Programmierung bereitstellen.
Grundkonzept von BMDFM
Wie man sieht, ist BMDFM als Hybrid aus mehreren architektonischen Prinzipien aufgebaut:
- MIMD (Multiple Instruction Streams, Multiple Data Streams), das von Commodity SMP unterstützt wird.
- Die implizite parallele Ausführung wird durch die Datenflussemulation sichergestellt.
- Das von-Neumann-Berechnungsprinzip eignet sich gut für die Implementierung der Front-End-Steuerung Virtuelle Maschine.
Die nächste Abbildung zeigt eine detailliertere Ansicht der BMDFM-Architektur:
Architektur von BMDFM
Ein Anwendungsprogramm (sequentielles Eingabeprogramm) wird in drei Stufen verarbeitet: vorläufige Code-Reorganisation (Code-Reorganizer), statische Planung der Anweisungen (statischer Scheduler) und Kompilieren / Laden (Compiler, Loader). Die Ausgabe nach den statischen Planungsstufen ist ein Cluster mit mehreren Clustern, der die Multithread-Engine über die Schnittstelle speist, die so konzipiert ist, dass Engpässe vermieden werden. Der Clusterfluss mit mehreren Clustern kann als kompiliertes Eingabeprogramm betrachtet werden, das in Marshall-Cluster aufgeteilt ist, in denen alle Adressen aufgelöst und mit Kontextinformationen erweitert werden. Die Aufteilung in Marshalled-Cluster ermöglicht das Laden von Multithreaded-Clustern. Mit Kontextinformationen können Iterationen parallel verarbeitet werden. Listener-Thread ordnet den Ausgabestrom nach der Verarbeitung außerhalb der Reihenfolge an.
Das dynamische BMDFM-Scheduling-Subsystem ist ein effizienter SMP-Emulator der Datenflussmaschine mit Tag-Token. Der Shared Memory Pool ist in drei Hauptteile unterteilt: Input / Output Ring Buffer Port (IORBP), Datenpuffer (DB) und Operations Queue (OQ). Die virtuelle Front-End-Steuerungsmaschine plant ein Eingabe-Anwendungsprogramm statisch und fügt gebündelte Anweisungen und Daten des Eingabeprogramms in das IORBP ein. Die Ringpuffer-Serviceprozesse (IORBP PROC) verschieben Daten in die DB und Anweisungen in die OQ. Die Operations-Queue-Serviceprozesse (OQ PROC) kennzeichnen die Anweisungen als bereit für die Ausführung, wenn auf die Daten der erforderlichen Operanden zugegriffen werden kann. Ausführungsprozesse (CPU PROC) führen Anweisungen aus, die als ready markiert sind und berechnete Daten in den DB oder an die IORBP ausgeben. Darüber hinaus sind IORBP PROC und OQ PROC für die Freigabe von Speicher verantwortlich, nachdem Kontexte verarbeitet wurden. Der Kontext ist eine spezielle eindeutige Kennung, die eine Kopie von Daten in verschiedenen Iterationskörpern entsprechend der Datenflussarchitektur mit Tag-Token darstellt. Dadurch kann der dynamische Scheduler mehrere Iterationen parallel verarbeiten.
Die Prozesse laufen unter einem SMP-Betriebssystem und belegen alle verfügbaren realen Maschinenprozessoren und Prozessorkerne. Damit mehrere Prozesse gleichzeitig auf dieselben Daten zugreifen können, sperrt der dynamische BMDFM-Scheduler Objekte im Shared Memory Pool über SVR4 / POSIX-Semaphoroperationen. Die Sperrungsrichtlinie bietet mehrfachen Nur-Lese-Zugriff und exklusiven Zugriff für Änderungen.
Unterstützte Plattformen [ edit ]
Jede Maschine, die ANSI C und POSIX / SVR4 unterstützt, kann BMDFM ausführen.
BMDFM wird als vollständige Multithreadversion für folgende Versionen bereitgestellt:
- x86: Linux / 32, FreeBSD / 32, OpenBSD / 32, NetBSD / 32, MacOS / 32, SunOS / 32, UnixWare / 32, Minix / 32, Android / 32, Win-Cygwin / 32, Win-UWIN / 32, Win-SFU-SUA / 32;
- x 86-64: Linux / 64, FreeBSD / 64, OpenBSD / 64, NetBSD / 64, MacOS / 64, SunOS / 64, Android / 64, Win-Cygwin / 64:
- VAX: Ultrix / 32;
- Alpha: Tru64OSF1 / 64, Linux / 64, FreeBSD / 64;
- IA-64: HP-UX / 32, HP-UX / 64, Linux / 64 FreeBSD / 64;
- XeonPhiMIC: Linux / 64;
- MCST-Elbrus: Linux / 32, Linux / 64;
- PA-RISC: HP-UX / 32, HP-UX / 64, Linux /
- SPARC: SunOS / 32, SunOS / 64, Linux / 32, Linux / 64, FreeBSD / 64;
- MIPS: IRIX / 32, IRIX / 64, Linux / 32, Linux / 64
- ] MIPSel: Linux / 32, Linux / 64, Android / 32, Android / 64;
- PowerPC: AIX / 32, AIX / 64, MacOS / 32, MacOS / 64, Linux / 32, Linux / 64, FreeBSD / 32, FreeBSD / 64;
- PowerPCle: Linux / 32, Linux / 64;
- S / 390: Linux / 32, Linux / 64;
- M68000: Linux / 32;
- ARM: Linux / 32, Linux / 64, Android / 32, Android / 64;
- ARMbe: Linux / 64;
- RISC-V: Linux / 64
- und eine eingeschränkte Singlethreadversion für x86: Win / 32.
Zusammenfassung [ edit
Die Datenflusssysteme sind wahrscheinlich wert Noch ein Blick auf diese Zeit. Die Community hat seit dem Höhepunkt des Datenflusses einen Shared-Distributed-Shared-Hardware-Implementierungszyklus durchlaufen, und es scheint angemessen, einige der in dieser Zeit Gelernten auf Software-basierte Systeme anzuwenden.
BMDFM ist eine komfortable parallele Programmierumgebung und eine effiziente Laufzeit-Engine für Multi-Core-SMP aufgrund der MIMD-Vereinigung mehrerer Architekturparadigmen (von-Neumann, SMP und Datenfluss):
- Zunächst handelt es sich um einen hybriden Datenflussemulator, der auf Commodity-SMP multithreaded läuft. Der SMP sorgt für MIMD, während der Datenfluss die implizite Parallelität ausnutzt.
- Zweitens handelt es sich um eine hybride Multithreaded-Datenfluss-Laufzeit-Engine, die von einer von-Neumann-Front-End-VM gesteuert wird. Die Datenfluss-Laufzeit-Engine führt kontextabhängige parallele Anweisungen mit Tag-Token aus (im Gegensatz zum eingeschränkten Gabel-Join-Paradigma), während die von-Neumann-Front-End-VM Kontexte initialisiert und die Datenfluss-Laufzeit-Engine mit gemarshallten Befehlsclustern speist.
- Es ist eine Mischung aus statischer und dynamischer Parallelisierung. Die von-Neumann-Front-End-VM versucht, eine Anwendung statisch in parallel gemarshallte Anweisungscluster aufzuteilen, während die Dataflow-Laufzeit-Engine die statischen Parallelisierungsmethoden dynamisch ergänzt.
BMDFM ist für die Verwendung in einer Rolle der Parallel-Laufzeit-Engine ( anstelle einer herkömmlichen Fork-Join-Laufzeitbibliothek), mit der unregelmäßige Anwendungen automatisch parallel ausgeführt werden können. Aufgrund der transparenten Datenfluss-Semantik ist BMDFM eine einfache Parallelisierungstechnik für Anwendungsprogrammierer und gleichzeitig eine viel bessere parallele Programmier- / Kompiliertechnologie für Multi-Core-SMP-Computer.
Weitere Informationen: [1] Weitere Informationen: [2]
Siehe auch [ edit ]
No comments:
Post a Comment