为什么从OpenMP程序中获取不正确的结果?

问题描述 投票:2回答:1

我正在编写一些简单的示例来了解OpenMP程序的工作原理。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <omp.h>

int main (int argc ,char* argv[]){
    omp_set_num_threads(4);
    int j =0;
    #pragma omp parallel private (j)
    {
    int i;
    for(i=1;i<2;i++){
        printf("from thread %d : i is equel to  %d and j is equal to %d\n ",omp_get_thread_num(),i,j);

    }
    }
}

所以在这个例子中我应该每次都得到j=0, 不幸的是结果是j == 0 3次,和j == 32707一次。

我的例子出了什么问题?

c parallel-processing openmp
1个回答
1
投票

如果你想要每个线程都有一个firstprivate(j)的私有副本,初始值是进入并行区域之前的值,请使用private(j)而不是j

© www.soinside.com 2019 - 2024. All rights reserved.