OpenACC与OpenMP

时间:2018-02-25 09:53:01

标签: windows ubuntu gcc openmp openacc

您好我测试OpenACC vs OpenMP vs Nothing,但我得到了奇怪的结果。

  • 代码:

        #include <stdio.h>
            int main () {
            int a,sum=0;
       (#pragma omp for/#pragma acc parallel loop/nothing)
       for( a = 0 ; a < 2000000000; a = a + 1 ){
         sum+=a%2;
       }
     printf("sum = %d\n",sum);
       return 0;
    }
    
    1. 我使用子系统Ubuntu for windows 10 (https://docs.microsoft.com/en-us/windows/wsl/install-win10)和 GCC 7.1(C编译器)并获得以下结果:Nothing = OpenMP(约5秒内的正确结果); OpenACC更快,但结果错误(0 vs 1 000 000 000)
    2. 我在Ubuntu上使用VMware,结果是:没有给出任何东西 什么都没有(程序无限执行,我只是关闭终端); OpenACC的 显示结果比OpenMP快,但再次显示错误的结果。
    3. 如果我在OpenMP的控制台上使用英特尔C ++编译器,我在Ubuntu中大约需要1.3秒vs~5秒

怎么办?

2 个答案:

答案 0 :(得分:0)

您有多个不同的线程覆盖sum,因此您的结果会出错。你需要告诉它这是一个&#34;减少&#34;

#pragma omp parallel for reduction(+:sum)

#pragma acc parallel loop reduction(+:sum)

答案 1 :(得分:0)

Google&#39;竞争条件&#39; 事实上,较新版本的PGI OpenACC足够智能,可以检测到给定变量的减少。这并不意味着你应该编写潜在的错误代码