c++ - 如何使用 OpenACC 计算 Mandelbrot 集?

标签 c++ openacc

我正在尝试学习使用 OpenACC,并开始使用一个简单的代码来实现它来计算 Mandelbrot 集,但我在编译代码时收到错误。

我找到了这个

OpenACC must have routine information error

并认为它在我的代码中很容易使用,但它似乎不起作用。

这些是我想使用 OpenACC 的例程,以及我尝试过的方法

#pragma acc parallel loop copyout(color)

for (int i=0;i<=n0x;i++)
{

Cx=Re_start+dx*i;

  #pragma acc loop

    for (int h=0;h<=n0y;h++)
    {

    Cy=Im_start+dy*h;
    Zx1=0.;
    Zy1=0.;

    #pragma acc loop

        for(int k=0;k<=n;k++ && mod<=4.)
        { 


        Zx=Zx1*Zx1-Zy1*Zy1+Cx;
        Zy=2*Zx1*Zy1+Cy;
        Zx1=Zx;
        Zy1=Zy; 

        mod=(Zx*Zx+Zy*Zy);

            if(mod<=4.)
            {

            if(k==n) 
            color[i][h]=-1; 


            color[i][h]=k+1;

            }

        }  

    }

}

我收到错误(我正在使用 pgc++ -acc splot.cpp -Minfo=accel 进行编译)

PGCC-S-0155-Compiler failed to translate accelerator region (see -Minfo messages): Unknown variable reference (splot.cpp: 48)
main:
     48, Generating copyout(color[:][:])
         Generating Tesla code
         52, #pragma acc loop gang /* blockIdx.x */
         59, #pragma acc loop seq
         68, #pragma acc loop vector(128) /* threadIdx.x */
     52, Accelerator restriction: scalar variable live-out from loop: color
     59, Loop is parallelizable
         Accelerator restriction: scalar variable live-out from loop: color
     68, Loop is parallelizable
         Accelerator restriction: scalar variable live-out from loop: color
PGCC-F-0704-Compilation aborted due to previous errors. (splot.cpp)
PGCC/x86-64 Linux 19.4-0: compilation aborted

我需要修改什么才能正确编译和运行我的代码?

最佳答案

问题是“for(int k=0;k<=n;k++ && mod<=4.)”中的“&& mod<=4.0”。 for 循环中的复合表达式是一个已知的 PGI 限制,目前在设备代码生成中不可用。

删除“&& mod<=4.0”将解决该问题。

我可以提交问题报告,但我不清楚为什么会有这段代码,因为它看起来无关紧要。你能解释一下意图吗?

关于c++ - 如何使用 OpenACC 计算 Mandelbrot 集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56499947/

相关文章:

Windows 环境 OpenACC

c++ - 每次执行时,OpenACC 总和减少输出递增总和

c - openACC 传递结构列表

c++ - 媒体基础 SinkWriter (MP4 FastStart)

c++ - 没有制定目标 `libbrcmEGL.so' 的规则, `HelloTriangle' 需要

c++ - GLUT 暂停键盘的工作

c++ - OpenACC - 嵌套循环奇怪的行为

rust - 从 Rust 调用 OpenACC 代码不在 GPU 上运行

c++ - 避免多态类中的虚表

c++ - 在未命名的命名空间中定义的 C 回调函数?