问题标签 [pgi-accelerator]

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 投票
0 回答
58 浏览

fortran - 异步 OpenACC 内核中的数组访问

假设我有一个 Fortran 程序,它在一个数组上执行两个任务:任务 A 计算它的平均值,任务 B 将它加倍。关键是任务 B 应该独立于任务 A。当使用 OpenACC 加速程序时,通过使任务 A 异步来同时运行两个任务是有意义的:

但是,同时运行两个任务时,任务B会修改任务A正在读取的数组,导致值不正确。在 CPU 上(无加速)我得到:

在 GPU(使用 NVIDIA HPC SDK)上,我得到一个不同的平均值,这显然是不正确的:

是否有一种优雅的方式来“保护”任务 A 正在工作的阵列?

0 投票
1 回答
103 浏览

fortran - 设备上的 OpenACC 重复数组

在使用 OpenACC 加速的 Fortran 程序上,我需要在 GPU 上复制一个数组。复制的数组只会在 GPU 上使用,永远不会在主机上复制。我知道创建它的唯一方法是在主机上声明和分配它,然后acc data create它:

这是一个插图代码,因为所讨论的程序要复杂得多。

这个解决方案的问题是我必须allocate在主机上复制数组,即使我在这里不使用它。一些主机内存会被浪费,特别是对于大型阵列(即使我知道在主机内存用完之前我会用完设备内存)。在 CUDA Fortran 上,我知道我可以声明一个仅设备数组,但我不知道这是否可以通过 OpenACC 实现。

有没有更好的方法来执行此操作?

0 投票
0 回答
41 浏览

python - 使用 nvc++ OpenMP 卸载编译的 Python C 扩展无法在 GPU 上运行

我有一个 C/C++ 中的 Python 扩展,我想使用 OpenMP 卸载。使用 NVIDIA 的 nvc++,编译和在 python 中使用/运行扩展一样有效。问题在于它默认不使用 GPU。设置 $OMP_OFFLOAD_TARGET=MANDATORY 会导致以下错误:

在纯 C/C++ 版本中使用相同的 OpenMP 指令效果很好。

顺便说一句,编译期间的输出看起来很有希望: