Erweiterungen für Parallelität
Die C++ Extensions for Parallelism, ISO/IEC TS 19570:2015 definieren die folgenden neuen Komponenten für die C++-Standardbibliothek
Inhalt |
[bearbeiten] Ausführungsrichtlinien
Die Parallelism TS beschreibt drei Ausführungsrichtlinien: sequenziell, parallel und parallel+vektor und stellt entsprechende Typen und Objekte für Ausführungsrichtlinien bereit. Benutzer können eine Ausführungsrichtlinie statisch auswählen, indem sie einen parallelen Algorithmus mit einem Ausführungsrichtlinienobjekt des entsprechenden Typs aufrufen, oder dynamisch, indem sie die Typlöschungsklasse execution_policy verwenden.
Implementierungen können als Erweiterung zusätzliche Ausführungsrichtlinien definieren. Die Semantik von parallelen Algorithmen, die mit einem Ausführungsrichtlinienobjekt eines implementierungsdefinierten Typs aufgerufen werden, ist implementierungsdefiniert.
| Definiert in Header
<experimental/execution_policy> | |
| Ausführungsrichtlinientypen (Klasse) | |
| Globale Ausführungsrichtlinienobjekte (Konstante) | |
| dynamische Ausführungsrichtlinie (Klasse) | |
| Prüft, ob eine Klasse eine Ausführungsrichtlinie darstellt (Klassentemplate) | |
[bearbeiten] Ausnahmelisten
| Definiert in Header
<experimental/exception_list> | |
| Ausnahmen, die während paralleler Ausführungen ausgelöst werden (Klasse) | |
[bearbeiten] Parallelisierte Versionen vorhandener Algorithmen
Die TS stellt parallelisierte Versionen der folgenden 69 Algorithmen aus <algorithm>, <numeric> und <memory> bereit
[bearbeiten] Neue Algorithmen
| Definiert im Header
<experimental/algorithm> | |
| ähnlich wie std::for_each, gibt aber void zurück (function template) | |
| wendet ein Funktions-Objekt auf die ersten n Elemente einer Sequenz an (function template) | |
| Definiert im Header
<experimental/numeric> | |
| (parallelism TS) |
ähnlich wie std::accumulate, aber nicht-sequenziell (Funktionstemplate) |
| ähnlich wie std::partial_sum, schließt das i-te Eingabeelement vom i-ten Summierergebnis aus (function template) | |
| ähnlich wie std::partial_sum, schließt das i-te Eingabeelement in das i-te Summierergebnis ein (function template) | |
| (parallelism TS) |
wendet einen Funktor an, dann Reduktion außer Reihenfolge (Funktionstemplate) |
| wendet einen Funktor an, dann berechnet exklusiven Scan (function template) | |
| wendet einen Funktor an, dann berechnet inklusiven Scan (function template) | |