2016-07-31 20 views
1

Ich fange an, in OpenMP zu tauchen und ich bin mir nicht sicher, ob ich vollständig verstehe, wie firstprivate mit Arrays umgehen würde.Deklarieren von Arrays als firstprivate in OpenMP - C

Wenn ich Code wie:

int array[5] = {0, 1, 2, 3, 4}; 
int i;  
#pragma omp parallel for firstprivate(array) 
for (i=0; i<SOME_LENGTH; i++) { 
    // something using array as a right hand operand 
} 

Würde das Array zu jedem Thread kopiert werden? Was wäre, wenn es eine komplexere Struktur und keine einfache int wäre?

Ist der Speicher selbst kopiert oder die Werte?

Auch wenn Sie mich in Richtung mehr Dokumentation zeigen können, würde ich es wirklich schätzen.

Danke!

Antwort

2

Ja, jeder Thread erhält seine eigene Instanz der Variablen, initialisiert auf den Wert dieser Variablen.

Dokumentation scheint ein wenig spärlich neben der ursprünglichen Dokumentation und einige grundlegende Tutorials.

+0

Obwohl es ein Array ist? –

2

Wie pro 2.15.3.4 von OpenMP 4.5 werden die Elemente kopiert:

Für eine Reihe von Elementen, von nicht-Array-Typ wird jedes Element initialisiert, als ob durch Zuweisung von einem Element des ursprünglichen Arrays das entsprechende Element des neuen Arrays.