相关疑难解决方法(0)

OpenMP卸载到Nvidia错误的减少

我有兴趣使用OpenMP将工作卸载到GPU.

下面的代码给出sum了CPU 的正确值

//g++ -O3 -Wall foo.cpp -fopenmp
#pragma omp parallel for reduction(+:sum)                                                                                                                                    
for(int i = 0 ; i < 2000000000; i++) sum += i%11;
Run Code Online (Sandbox Code Playgroud)

它也适用于像OpenACC这样的GPU

//g++ -O3 -Wall foo.cpp -fopenacc   
#pragma acc parallel loop reduction(+:sum)                                                                                                                                    
for(int i = 0 ; i < 2000000000; i++) sum += i%11;
Run Code Online (Sandbox Code Playgroud)

nvprof 表明它在GPU上运行,并且它也比CPU上的OpenMP更快.

但是,当我尝试使用这样的OpenMP卸载到GPU时

//g++ -O3 -Wall foo.cpp -fopenmp -fno-stack-protector
#pragma omp target teams distribute parallel for reduction(+:sum)
for(int i = 0 ; i < 2000000000; i++) sum += i%11;
Run Code Online (Sandbox Code Playgroud)

它得到了错误的结果 …

c++ gcc openmp offloading openacc

7
推荐指数
1
解决办法
984
查看次数

标签 统计

c++ ×1

gcc ×1

offloading ×1

openacc ×1

openmp ×1