2016-10-23 8 views
0

私はOpenMPを初めて使用しています。基本的な操作に固執しています。ここに私の質問のサンプルコードです。OpenMP:firstprivate変数の値をグローバルに戻す方法

#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]); 
    } 
    } 
} 

明らかに、Aの値は各スレッドにローカルです。しかし、最後に、各スレッドによって計算されたAの一部を、グローバル変数Aの対応する位置に書き戻したいと思います。これはどのように達成できますか?

答えて

0

Aを共有すると、となります。すべてのループ反復がAという別々の要素で動作するため、これは問題ありません。 OpenMPは共有メモリプログラミングです。

あなたはshared代わりのfirstprivateを使用して明示的にそう行い、または単に宣言削除することができます。デフォルトでは、並列領域の外側で宣言されているすべての変数を

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

を。 this answerに詳細な説明があります。

関連する問題