, OpenMP , ordered. . i ( ) (i 0 19, 0 omp_get_num_threads() - 1):
#pragma omp parallel
#pragma omp for ordered
for (i = 0; i < 20; i++)
#pragma omp ordered
printf("i=%d - tid=%d\n", i, omp_get_thread_num());
( 8- Intel x86_64):
i=0 - tid=0
i=1 - tid=0
i=2 - tid=0
i=3 - tid=1
i=4 - tid=1
i=5 - tid=1
i=6 - tid=2
i=7 - tid=2
i=8 - tid=2
i=9 - tid=3
i=10 - tid=3
i=11 - tid=3
i=12 - tid=4
i=13 - tid=4
i=14 - tid=5
i=15 - tid=5
i=16 - tid=6
i=17 - tid=6
i=18 - tid=7
i=19 - tid=7
:
#pragma omp parallel
#pragma omp for ordered
for (i = 0; i < 20; i++)
{
printf("other i=%d - tid=%d\n", i, omp_get_thread_num());
#pragma omp ordered
printf("i=%d - tid=%d\n", i, omp_get_thread_num());
}
:
other i=16 - tid=6
other i=18 - tid=7
other i=12 - tid=4
other i=0 - tid=0
i=0 - tid=0
other i=1 - tid=0
i=1 - tid=0
other i=2 - tid=0
i=2 - tid=0
other i=3 - tid=1
other i=6 - tid=2
other i=14 - tid=5
i=3 - tid=1
other i=4 - tid=1
i=4 - tid=1
other i=5 - tid=1
i=5 - tid=1
i=6 - tid=2
other i=7 - tid=2
i=7 - tid=2
other i=8 - tid=2
i=8 - tid=2
other i=9 - tid=3
i=9 - tid=3
other i=10 - tid=3
i=10 - tid=3
other i=11 - tid=3
i=11 - tid=3
i=12 - tid=4
other i=13 - tid=4
i=13 - tid=4
i=14 - tid=5
other i=15 - tid=5
i=15 - tid=5
i=16 - tid=6
other i=17 - tid=6
i=17 - tid=6
i=18 - tid=7
other i=19 - tid=7
i=19 - tid=7
Finally, note that this array is populated in order:
int Arr[20] = {0};
#pragma omp parallel for ordered
for (i = 0; i < 20; i++)
Arr[i] = i;
printf("\n\n");
for (i = 0; i < 20; i++)
printf("Arr[%d]=%d\n", i, Arr[i]);
Output:
A[0]=0
A[1]=1
A[2]=2
A[3]=3
A[4]=4
A[5]=5
A[6]=6
A[7]=7
A[8]=8
A[9]=9
A[10]=10
A[11]=11
A[12]=12
A[13]=13
A[14]=14
A[15]=15
A[16]=16
A[17]=17
A[18]=18
A[19]=19
Nikos source
share