Anbieter neuer Computerarchitekturen versuchen regelmäßig, neue Programmiermodelle einzuführen, z. B. kürzlich CUDA / OpenCL für GPGPUs, und C / POSIX als Steuerungsschnittstelle für die Plattformparallelität zu verdrängen. (Poss & Koening, AM3: Auf dem Weg zu einem Hardware-Unix-Beschleuniger für viele Kerne, 2015)
Warum versuchen Architekturdesigner, neue Programmiermodelle zu entwerfen, um C / POSIX für paralleles Rechnen zu ersetzen? Ist C / POSIX nicht gut für Multiprozessoren geeignet, oder hatten die ursprünglichen Autoren von C / POSIX zum Zeitpunkt der C / POSIX-Entwurfszeit keine Notwendigkeit für paralleles Rechnen? Oder benötigen Programmierer mehr Funktionen, als C / POSIX bieten kann, und greifen daher auf neue Designs wie CUDA / OpenCL usw. zurück?
quelle
Antworten:
Vergleichen Sie beispielsweise POSIX-Threads und Grand Central Dispatch. Ich habe Code, der in acht Codezeilen an vier Threads gesendet wird. Mit POSIX wäre das alles ein absoluter Albtraum.
Andererseits geht es bei CUDA / OpenCL überhaupt nicht um Multithreading, sondern um die Verwendung massiver Vektorfähigkeiten. (Sie können auch Multithreading ausführen, aber Vektorisierung ist das Wichtigste).
quelle
Es wird zwischen der parallelen SIMD- Programmierung und dem traditionelleren parallelen Programmiermodell von POSIX unterschieden.
SIMD ist das Modell, das CUDA, OpenCL usw. verwenden. Es gibt einen einzelnen Befehlssatz, der gleichzeitig von vielen Threads ausgeführt wird, die jeweils mit ihrem eigenen Datenpool arbeiten. Dies ist sehr nützlich für 3D-Grafiken, bei denen dieselben Transformationen auf eine große Anzahl von Punkten angewendet werden.
Das POSIX-Modell geht davon aus, dass jeder Thread asynchron ausgeführt wird und jeder Thread möglicherweise völlig anderen Code ausführen kann.
Beide Modelle haben ihre Stärken und Schwächen - deshalb sind sie unterschiedlich. POSIX ist viel flexibler, aber CUDA / OpenCL / etc. kann von spezialisierter Hardware profitieren und Tausende von (normalerweise einfacheren) Threads gleichzeitig ausführen.
quelle