2016-10-23 1 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.

Смежные вопросы