问题标签 [pgi]

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 投票
1 回答
146 浏览

if-statement - if 语句对 OpenACC 不利吗?

我听说 OpenACC 不能有效地处理 if 语句,应该尽量避免使用它。

例如,在设备/OpenACC 中做这样的事情(带有几个 if 语句的循环)是不好的:

是真的吗?如果是这样,我该如何处理 OpenACC 中的 if 语句?

0 投票
0 回答
150 浏览

loops - 循环和 if 语句中的 openacc 结构

我有以下代码:

“polygon1”和“polygon2”是结构。
“listOfPolygons1”和“listOfPolygons2”是结构体数组,对应着“polygon1”和“polygon2”的列表。
"listOfBoolean" 是一个 int 数组,
"listOfPolygons1" 和 "listOfPolygon2" 都被深度复制到加速器并在之前的循环中成功使用(此处未显示代码)

该代码可以编译,但运行时会产生以下错误消息:

我的观察
问题似乎在第 139 行。当我使用“k<polygon2.num_vertices”时,它产生了我提到的错误。
但是,如果我将这一行改为:

(更新 1)或者这个:

程序可以编译运行成功

为什么会这样,我如何在这里使用 struct "polygon2"?

0 投票
1 回答
156 浏览

arrays - 在 OpenACC 中加入数组结果

我正在编写一个具有数组依赖性的 OpenACC 代码。内循环的每次迭代都可以更新数组的相同位置。这是一些代码:

OpenMP 版本的写法如下:

在 OpenACC 中,关键字 private 与数组一起使用,但我不知道如何将私有数组与全局数组连接起来。

谢谢。

0 投票
1 回答
207 浏览

header - PGI 编译器错误“找不到包含文件位/c++config.h”

我正在用 C 语言编写并在 Ubuntu OS 中使用 pgi 编译器。我想包含一个带有我创建的函数的头文件。在我的代码中,我有

但是,当我编译时出现错误

括号中的目录正是我的工作站上 bits/c++config.h 文件所在的位置。另外,如果我在我的代码中取出“#include”语句,一切运行正常。此外,我什至在我的路径中添加了“/opt/pgi/linux86-64/16.7/include”,但我仍然得到错误上面。我做错了什么?

0 投票
1 回答
998 浏览

fortran - Fortran-OpenACC 例程如何调用另一个 Fortran-OpenACC 例程?

我目前正在尝试通过使用带有 PGI (15.10) 编译器的 OpenACC 将大部分例程移植到 GPGPU 来加速光谱元素流体求解器。源代码是用 OO-Fortran 编写的。该软件具有调用其他功能和子程序的子程序“层”。为了使用 openacc 将代码带到 GPU 上,我首先尝试在每个需要移植的例程中放置“$accroutine”指令。在编译期间,使用“pgf90 -acc -Minfo=accel”,我收到以下错误:

nvvmCompileProgram 错误:9。

错误:/tmp/pgacc2lMnIf9lMqx8.gpu (146, 24): 使用错误类型解析对函数“innerroutine_”的无效前向引用!

PGF90-S-0155-Compiler 无法转换加速器区域(请参阅 -Minfo 消息):设备编译器以错误状态代码退出 (Test.f90: 1)

可以使用以下简单的 fortran 程序重现同样的问题:

同样,使用“pgf90 -acc -Minfo=accel”编译上述程序会产生问题。

openacc 是否支持启用 acc 的例程调用其他启用 acc 的例程?

如果是这样,我做错了什么?

0 投票
2 回答
1203 浏览

cmake - 在 cmake 混合语言项目中使用 FORTRAN 链接器

当 CMake 用于混合语言项目(C/C++ 和 FORTRAN)时,会调用 C++ 编译器来链接可执行文件。是否有一种简单的方法可以为链接步骤调用 FORTRAN 编译器。

这将使用 FORTRAN 编译器正确编译,但对于链接步骤,将调用 C++ 编译器,这会导致某些编译器套件(例如 PGI)出现问题。

0 投票
1 回答
202 浏览

nvcc - openacc - ta=multicore 和 ta=nvidia 编译之间的差异

我有一个最初用 OpenMP 编写的代码。现在,我想将它迁移到 OpenACC 中。考虑以下:

1- 首先,OpenMP 的输出结果被认为是最终结果,OpenACC 输出应该跟随它们。

2-其次,代码中有两个功能可以通过输入终端上的程序来启用。因此,要么 要么F1运行F2基于输入标志。

因此,如前所述,我将代码转移到 OpenACC。现在,我可以使用两者来编译我的 OpenACC 代码,-ta=multicore-ta=nvidia为不同的架构编译 OpenACC 区域。

对于F1,两种架构的输出都与 OpenMP 相同。因此,这意味着当我使用 and 编译我的程序时-ta=multicore-ta=nvidia我会在选择时得到类似于 OpenMP 的正确输出结果F1

对于F2,有点不同。编译-ta=multicore给我一个正确的输出作为 OpenMP,但同样的事情不会发生在 nvidia 架构上。当我用结果编译我的代码时-ta=nvidia是错误的。

任何想法可能有什么问题,F2甚至是build process什么?

注意:我使用的是 PGI 编译器 16,而我的 NVIDIA GPU 的 CC 等于 5.2。

0 投票
1 回答
311 浏览

cuda - OpenACC 中的固定内存(使用 PGI 编译器)

我有一个简单的 CUDA 代码,我将它翻译成 OpenACC。我的所有内核都按预期并行化,它们的性能与我的 CUDA 内核相似。但是,设备到主机的内存传输会影响我的性能。在我的 CUDA 代码中,我使用固定内存并且性能要好得多。不幸的是,在 OpenACC 中我不知道如何使用固定内存。我在文档中找不到任何内容。有人可以为我提供一个使用固定内存的简单 OpenACC 示例吗?

PS:我使用的是 PGI 16.10-0 64 位编译器

0 投票
1 回答
132 浏览

openacc - 在没有堆分配时报告 _mp_malloc 的 PGCC-S-0000-Internal 错误

当我尝试在 OpenACC 中编译我的代码时,它会报告:

而报告的函数定义如下:

第 92 行是第 5 行(它是函数定义的一部分,很奇怪)

如果有人可以帮助我,我将不胜感激。

0 投票
1 回答
461 浏览

c++ - 更新指令 OpenACC

当我在顶部循环中有一个内核时,为什么我不能使用这两个指令:

我需要在下面的代码中更新这些变量hbias, vbiasW但它不起作用:

但是当我在每个嵌套循环上有许多分离的内核时,我可以更新变量: