问题标签 [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 回答
165 浏览

gcc - OpenMP/OpenACC 实现和 gcc/PGI 编译器之间的结果差异

我有一个更大的 Fortran 程序,我正在尝试转换它,以便计算密集型部分将在使用 OpenMP 和/或 OpenACC 的 NVidia GPU 上运行。在开发过程中,我遇到了一些问题,以了解如何在 GPU 上执行的子例程中使用模块中声明的变量(其中一些也在 CPU 上)。因此,我创建了一个小示例,并通过试验和添加相应的 OpenMP 和 OpenACC 指令来解决这个问题。我在此消息的末尾包含了构成我的示例的三个文件。

正如我认为我已经理解了一些事情并且我的示例程序可以工作一样,我注意到以下内容:

  • 我使用 OpenMP 指令使用 gcc 10.2 编译程序:

结果与预期一致,即数组 XMO 的所有元素都是 1,DCP 的所有元素都是 2,IS1 的元素是 3,IS2 的元素是 24。

  • 我使用 OpenACC 指令使用 PGI 编译器 19.10 社区版编译程序:

结果与上述相同。

  • 我使用 OpenACC 指令使用 gcc 10.2 编译程序:

数组 XMO、DCP 和 IS1 的结果是正确的,但是 IS2 的所有元素都是 0。很容易验证变量 NR 的值为 0 来得到这个结果。

我的理解是,我的示例的 OpenMP 和 OpenACC 版本是等效的,但我无法弄清楚为什么 OpenACC 版本仅适用于 PGI 编译器而不适用于 gcc。

如果可能,请提供不需要更改代码而只需要更改指令的解决方案。正如我所提到的,我的原始代码要大得多,包含更多的模块变量,并在代码中调用更多的子例程以在 GPU 上执行。更改该代码将变得更加困难,显然我宁愿仅在确实有必要时才这样做。

先感谢您!

我的示例文件如下。

0 投票
1 回答
527 浏览

openacc - acc并行区域内的例程

在阅读了这个how-can-a-fortran-openacc-routine-call-another-fortran-openacc-routine之后,我仍然对这个 OpenACC 函数调用限制感到困惑。

以下是来自上述链接帖子的修改后的废话代码:

当我用nvfortran20.7 版本编译它时,我得到了

是什么触发了编译错误?作为比较,以下代码与 acc 函数调用

可以用 OpenACC 编译并运行。

更新:令人惊讶的是,对于第一段代码,当我简单地切换子程序的顺序时,它起作用了:

令我惊讶的是,这个特定的依赖于常规订购。但是为什么它适用于我上面的第二个例子呢?

0 投票
1 回答
99 浏览

openacc - OpenACC 第一个私有变量

我在 OpenACC 内核中遇到了数组问题。这是演示代码:

当我编译nvfortran -acc -Minfo=accel test.f90并运行它时,它显示在设备上数组中的值是 0.0,而不是我在主机端设置的正确值 1.0。这仅适用于数组:标量,如示例中所示,具有正确的值。

我想知道这是否是nvfortran当前 OpenACC 标准或当前 OpenACC 标准的限制?

0 投票
1 回答
43 浏览

pgi - PGI 编译器的未知库

我已经为加速器(20.9)安装了 PGI 编译器,但是一个应用程序的编译找不到 3 个库nvhpcatm.sonvcpumath.so& nvc.so。我想知道是否有人熟悉这些库中的任何一个或者它们应该如何构建。谢谢。

0 投票
1 回答
185 浏览

fortran - Fortran-OpenACC 包含的子程序如何从父子程序访问数据

我目前正在加速 Fortran 代码,其中包含的子例程 ( subsub) 访问和修改父子例程 ( sub) 中声明的变量:

使用 PGI 编译器版本 20.9-0 编译时,它抱怨subsub无法引用主机变量var

这是有道理的。我尝试使用orvar在设备上创建,但它不会改变结果。acc data create(var)acc declare create(var)

这种模式可以加速吗?

0 投票
1 回答
62 浏览

fortran - 带有意图输出参数的 OpenACC 例程向量

我目前正在加速 Fortran 代码,其中我在 subroutine 中有一个主要的加速循环sub。在循环中,我想subsub在设备上调用子程序acc routine。子例程有一个intent(out)参数val,它在循环中是私有的。与subsub循环本身一样,我想使用该vector子句:

使用 PGI 编译器版本 20.9-0 编译并运行程序时,我在 variable 中得到乱码值array。当我简单地使用acc routineforsubsub时,我得到了正确的行为(在 的所有值中为 10 array)。我并行化这个子例程的方法有什么问题?

0 投票
1 回答
67 浏览

nvcc - 获取 OpenACC 空闲(或总)设备内存

我有一个 GPU 代码,它在每次迭代时决定是否可以将迭代卸载到加速器。OpenACC 成为最好的工具:

我如何提前决定是否aos[0:n_aos]适合 GPU 内存?有openacc_get_free_device_memory()某种功能吗?

否则,如果出现内存不足故障,我如何启动设备复制并返回仅 CPU 运行?

0 投票
2 回答
107 浏览

fortran - OpenACC Fortran 循环中的 Matmul

使用 PGI 编译器使用 OpenACC 加速 Fortran 代码,我遇到matmul了加速循环中的调用问题。

在简化示例中,我将单位矩阵应用于两个向量,因此输入和输出值应该相同:

使用 PGI 编译器 20.9 版进行编译时,我得到了以下信息:

运行代码会给出以下值:

第二行应该和第一行一样,顺序执行就是这种情况。代码有什么问题?

0 投票
1 回答
66 浏览

fortran - OpenACC Fortran 循环中的顺序点积

在 Fortran 程序中,我有一个大循环,其中dot_product对循环内生成的小向量进行了多次调用:

当使用 PGI 编译器编译时,似乎加速实现dot_product使用加速循环,因此可以防止更好地加速主循环(在 gang 和 vector 上):

从日志中可以看出,它对循环私有向量使用隐式缩减和共享内存。

有没有办法强制dot_product顺序运行?

0 投票
1 回答
53 浏览

openacc - 简单 OpenACC 内核中向量子句的非法上下文

我正在尝试编译一个简单的 OpenACC 基准测试:

使用 Nvidia HPC SDK 21.5 并遇到错误

知道是什么原因造成的吗?据我所知,我的语法vector(128)是合法的。