学习openMP
// array b
#pragma omp parallel for // reduction(&&: b[i])?
for (i=2; i<=N; i++)
{
// create local array for each thread
int *localb;
localb = (int*) malloc(N*sizeof(int));
memcpy(localb, b, N*sizeof(localb));
#pragma omp for private(j)
for (j=i+1; j<=N; j++)
{
if (j%i == 0)
localb[j] = 0;
}
是否可以使用reduction(&amp;&amp ;: b [i])减少全局数组b中的每个元素,以便b [i] = localb [j]&amp;&amp;双]?所有数据都是0或1;如果j可被i整除,则为0,否则为1。
答案 0 :(得分:2)
是的,自OpenMP 4.5起,标准直接支持减少数组,只需通过reduction(&&: b)
。
如果您的实施尚不支持,请参阅older answers about that。