У меня есть несколько глобальных переменных, которые мне нужно использовать в параллельном разделе моей программы. Итак, я написал это:
#define N 2000
int x[N], matrix[N][N]
int main(int argc, char **argv)
...
#pragma omp parallel
{
#pragma omp privatethread(x,matrix)
#pragma omp for
for(int k=0; k<100;++k)
/*some function to modify values of x and matrix differently
from run to run*/
...
}
...
Часть с #pragma эквивалентна:
...
#pragma omp privatethread(x,matrix) parallel for
...
Есть ли разница между объявлением #pragma omp parallel, затем #pragma omp privatethread и объявлением сначала #pragma omp privatethread, а затем #pragma omp parallel для? Должен ли я ставить {после части приватного чтения?
#pragma omp privatethread(x,matrix)
{ //<-- here
#pragma omp for
Наконец, это хороший способ работать с большими векторами в c или лучше использовать malloc внутри моей pragma omp и удалить часть privatethread? (пожалуйста, дайте мне знать, если я лучше задам этот заключительный вопрос в новом посте)