2016-10-23 6 views
0

Ich bin neu in OpenMP und ich bin mit einer grundlegenden Operation fest. Hier ist ein Beispielcode für meine Frage.OpenMP: So kopieren Sie den Wert der erstenprivaten Variablen zurück in den globalen

#include <omp.h> 
int main(void) 
{ 
    int A[16] = {1,2,3,4,5 ...... 16}; 
    #pragma omp parallel for firstprivate(A) 
    for(int i = 0; i < 4; i++) 
    { 
    for(int j = 0; j < 4; j++) 
    { 
     A[i*4+j] = Process(A[i*4+j]); 
    } 
    } 
} 

Wie ersichtlich, ist der Wert von A lokal für jeden Thread. Am Ende möchte ich jedoch einen Teil von A, der von jedem Thread berechnet wurde, an die entsprechende Position in der globalen Variablen A zurückschreiben. Wie kann dies erreicht werden?

Antwort

0

Einfach machen Ageteilt. Dies ist in Ordnung, da alle Schleifeniterationen auf separaten Elementen von A ausgeführt werden. Denken Sie daran, dass OpenMP shared memory Programmierung ist.

Sie tun können, so explizit durch shared anstelle von firstprivate, oder einfach nur die Erklärung entfernen:

int A[16] = {1,2,3,4,5 ...... 16}; 
    #pragma omp parallel for 
    for(int i = 0; i < 4; i++) 

standardmäßig alle Variablen außerhalb der parallelen Region erklärt. Eine ausführliche beispielhafte Beschreibung finden Sie unter this answer.

Verwandte Themen