2016-07-31 3 views
1

Я начинаю погружаться в OpenMP, и я не уверен, что полностью понимаю, как firstprivate будет работать с массивами.Объявление массивов как firstprivate в OpenMP - C

Если бы я был код, такой как:

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 
} 

ли массив копируется в каждый поток? Что, если это была более сложная структура, а не простая int?

Является ли сама память скопирована или значения?

Также, если вы можете указать мне в сторону дополнительной документации, я бы очень признателен.

Спасибо!

ответ

2

Да, каждый поток получает свой экземпляр переменной, инициализированный значением этой переменной.

Документация, кажется, немного разрежена рядом с оригинальной документацией и некоторыми базовыми учебниками.

+0

Даже если это массив? –

2

В соответствии с 2.15.3.4 из OpenMP 4.5, элементы копируются:

Для массива элементов типа не-массива, каждый элемент инициализируется, как если бы по заданию из элемента исходного массива соответствующий элемент нового массива.

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