问题标签 [openacc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
468 浏览

cuda - PGI 加速器 Fortran 代码中的错误

这是我的代码

我正在使用 PGI 加速器指令进行并行化,但它显示

“编译器无法转换加速器区域(请参阅 -Minfo 消息):具有零步长值的感应变量”

0 投票
2 回答
3645 浏览

cuda - Visual C++ 中的 OpenACC

我想用 OpenACC 指令并行化我的代码。据说它是一个跨平台的API。开发公司没有提供有关 VisualStudio 中 OpenACC 的信息。有没有办法做到这一点?

0 投票
1 回答
3810 浏览

cuda - 如何使用 OpenACC 优化矩阵乘法?

我正在学习 OpenACC(使用 PGI 的编译器)并尝试优化矩阵乘法示例。到目前为止,我提出的最快的实现如下:

这会产生大小为 32x32 线程的线程块,并为我提供迄今为止最好的性能。以下是基准:

不幸的是,我意识到生成的 CUDA 代码非常原始(例如,它甚至不使用共享内存),因此无法与手动优化的 CUDA 程序竞争。作为参考实现,我采用了 Arrayfire 库,结果如下:

我想知道是否有任何建议如何从 OpenACC 获得更好的性能?也许我选择的指令不正确?

0 投票
1 回答
1719 浏览

cuda - 多维数组拷贝OpenACC

我有一个 2D 矩阵 SIZE x SIZE,我正在尝试将其复制到 GPU。

我这样分配矩阵:

我的 ACC 地区有这个:

当使用 PGI 编译器进行编译时,使用 -Minfo=acc,编译器会告诉我:

a[0:1024][0:] 是什么意思?为什么不是 [0:1024][0:1024] ???

如果我不声明矩阵,而是声明大小为 SIZE*SIZE 的数组,则执行

生成以下编译器消息

代码实际上以相同的方式工作,相同的性能,相同的结果。

显然,编译器以两种方式生成相同的代码,应该是这样,但消息并不简单。

我在 Linux64 机器上使用 PGI 加速器 12.8。我正在使用 -Minfo=acc 进行编译

注意:这个问题已经过编辑,现在它并没有多大意义,但它可能对更多人有用。

0 投票
1 回答
2943 浏览

cuda - OpenACC:复杂循环对“*(*(b))”的依赖阻止了并行化

我正在使用具有动态数组分配的 OpenACC。以下是我的分配方式:

这是我如何并行矩阵添加:

当我用它编译这段代码时,pgcc它会检测循环迭代上对指针的依赖float**并生成所有标量内核(每块 1 个块 1 个线程),其性能不如预期:

循环显然是并行的,我认为编译器也可以检测到这一点。我很好奇如何解释它pgcc

提前致谢。

0 投票
1 回答
1558 浏览

cuda - 使用 OpenACC 共享内存

我正在尝试使用共享内存来缓存 OpenACC 的内容。

基本上我正在研究的是矩阵乘法,我所拥有的是:

我想做的是使用共享内存来缓存矩阵“a”和“b”的图块,以用于计算“c”,其方式与 CUDA mmul 算法类似。

基本上在 CUDA 上,我会知道我的块的确切大小,并且能够:

  • 用块的大小声明一个共享内存
  • 将数据的“相关”部分复制到块中
  • 使用这些数据

我知道我可以使用

指令,并且我可以使用vectorgang选项指定块大小,但是我在理解如何将其映射到 CUDA 架构时遇到了一些麻烦。

有没有办法用 OpenACC 实现类似的功能?是否有关于使用缓存指令或如何将共享内存的一些功能从 CUDA 映射到 OpenACC 的良好教程/资源?

0 投票
2 回答
1396 浏览

gpu - OpenACC 红黑 Gauss-Seidel 比 CPU 慢

我为拉普拉斯方程(一个简单的热板问题)添加了 OpenACC 指令到我的红黑 Gauss-Seidel 求解器中,但是 GPU 加速的代码并不比 CPU 快,即使对于大问题也是如此。

我还编写了一个 CUDA 版本,这比两者都快得多(对于 512x512,大约 2 秒,而 CPU 和 OpenACC 为 25 秒)。

谁能想到造成这种差异的原因?我意识到 CUDA 提供了最有潜力的速度,但 OpenACC 应该比 CPU 提供更好的解决更大问题的东西(比如 Jacobi 求解器,用于解决此处演示的同类问题)。

这是相关代码(完整的工作源代码在这里):

0 投票
1 回答
1657 浏览

c++ - C/C++ 和 GNU/PGI:对 `__pgio_ini' 的未定义引用

有没有办法将 PGI 编译器二进制文件链接到现有的 GNU 二进制文件?当我尝试链接时,出现以下错误:

细节:

我用 gcc 和 g++ 编译了一些文件。Cmain函数包含在这些文件中。现在我应该在项目中添加一个 OpenACC 函数,该函数必须由 PGI C Compiler ( pgcc) 编译。编译后,出现上述链接错误(两者pgCCg++链接器的错误相同)。

也许我需要将 OpenACC 函数集成到一个虚拟库中并将其包含/链接到项目中。但我不知道该怎么做。

不幸的是,无法使用 PGI 编译器编译整个项目,因为某些功能依赖于 GNU 编译器。

提前致谢。

0 投票
2 回答
2465 浏览

cuda - NVCC 5.0 和 OpenACC

根据英伟达网站

“CUDA 工具包补充并完全支持使用 OpenACC 指令进行编程。”

这是否意味着可以使用编译nvcc器编译 OpenACC 程序(pargma 和 API)?或者这意味着只支持运行时例程调用?

不幸的是,这些天我无法安装 CUDA Toolkit 5.0 来获得答案。谢谢!

0 投票
3 回答
3074 浏览

cuda - 内核构造和并行构造之间的区别

我研究了很多文章和 OpenACC 的手册,但我仍然不明白这两种结构的主要区别。