E. Durch die Implementierung definiertes Verhalten in OpenMP (C/C++)
In diesem Anhang werden die Verhaltensweisen zusammengefasst, die in dieser API als "implementierungsdefiniert" beschrieben werden. Jedes Verhalten wird in der Hauptspezifikation wieder auf seine Beschreibung verwiesen.
Hinweise
Eine Implementierung ist erforderlich, um sein Verhalten in diesen Fällen zu definieren und zu dokumentieren, aber diese Liste kann unvollständig sein.
Anzahl der Threads: Wenn während einer dynamischen Anpassung der Anzahl der Threads eine dynamische Anpassung der Anzahl der Threads auftritt, die für den parallelen Bereich angefordert werden, ist mehr als die Anzahl, die vom Laufzeitsystem bereitgestellt werden kann, wird das Verhalten des Programms implementierungsdefiniert (siehe Seite 9).
In Visual C++ werden für einen nicht geschachtelten parallelen Bereich 64 Threads (das Maximum) bereitgestellt.
Anzahl der Prozessoren: Die Anzahl der physischen Prozessoren, die die Threads zu einem bestimmten Zeitpunkt hosten, ist implementierungsdefiniert (siehe Seite 10).
In Visual C++ ist diese Zahl nicht konstant und wird vom Betriebssystem gesteuert.
Erstellen von Threads: Die Anzahl der Threads in einem Team, das einen geschachtelten parallelen Bereich ausführt, ist implementierungsdefiniert (siehe Seite 10).
In Visual C++ wird diese Zahl vom Betriebssystem bestimmt.
schedule(runtime): Die Entscheidung zur Planung wird bis zur Laufzeit zurückgestellt. Der Zeitplantyp und die Blockgröße können zur Laufzeit ausgewählt werden, indem die
OMP_SCHEDULE
Umgebungsvariable festgelegt wird. Wenn diese Umgebungsvariable nicht festgelegt ist, wird der resultierende Zeitplan implementierungsdefiniert (siehe Seite 13).In Visual C++ weist
static
der Zeitplantyp keine Blockgröße auf.Standardplanung: Wenn die Terminplanklausel nicht vorhanden ist, ist der Standardzeitplan implementierungsdefiniert (siehe Seite 13).
In Visual C++ ist
static
der Standardzeitplantyp ohne Blockgröße.ATOMIC: Es ist implementierungsdefiniert, ob eine Implementierung alle
atomic
Direktiven durchcritical
Direktiven ersetzt, die denselben eindeutigen Namen haben (siehe Seite 20).Wenn in Visual C++ daten, die von Atom geändert wurden, nicht auf einer natürlichen Ausrichtung oder wenn es ein oder zwei Byte lang ist, verwenden alle atomischen Vorgänge, die diese Eigenschaft erfüllen, einen kritischen Abschnitt. Andernfalls werden kritische Abschnitte nicht verwendet.
omp_get_num_threads: Wenn die Anzahl der Threads nicht explizit vom Benutzer festgelegt wurde, wird die Standardimplementierung definiert (siehe Seite 9).
In Visual C++ ist die Standardanzahl von Threads gleich der Anzahl der Prozessoren.
omp_set_dynamic: Die Standardeinstellung für die Anpassung des dynamischen Threads ist implementierungsdefiniert.
In Visual C++ ist
FALSE
der Standardwert .omp_set_nested: Wenn geschachtelte Parallelität aktiviert ist, wird die Anzahl der Threads, die zum Ausführen geschachtelter paralleler Bereiche verwendet werden, implementierungsdefiniert.
In Visual C++ wird die Anzahl der Threads vom Betriebssystem bestimmt.
OMP_SCHEDULE Umgebungsvariable: Der Standardwert für diese Umgebungsvariable ist implementierungsdefiniert.
In Visual C++ weist
static
der Zeitplantyp keine Blockgröße auf.OMP_NUM_THREADS Umgebungsvariable: Wenn kein Wert für die
OMP_NUM_THREADS
Umgebungsvariable angegeben wird oder wenn der angegebene Wert keine positive ganze Zahl ist oder der Wert größer als die maximale Anzahl von Threads ist, die das System unterstützen kann, ist die Anzahl der zu verwendenden Threads implementierungsdefiniert.Wenn der angegebene Wert in Visual C++ null oder kleiner ist, entspricht die Anzahl der Threads der Anzahl der Prozessoren. Wenn der Wert größer als 64 ist, beträgt die Anzahl der Threads 64.
OMP_DYNAMIC Umgebungsvariable: Der Standardwert ist implementierungsdefiniert.
In Visual C++ ist
FALSE
der Standardwert .