问题标签 [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.
if-statement - if 语句对 OpenACC 不利吗?
我听说 OpenACC 不能有效地处理 if 语句,应该尽量避免使用它。
例如,在设备/OpenACC 中做这样的事情(带有几个 if 语句的循环)是不好的:
是真的吗?如果是这样,我该如何处理 OpenACC 中的 if 语句?
loops - 循环和 if 语句中的 openacc 结构
我有以下代码:
“polygon1”和“polygon2”是结构。
“listOfPolygons1”和“listOfPolygons2”是结构体数组,对应着“polygon1”和“polygon2”的列表。
"listOfBoolean" 是一个 int 数组,
"listOfPolygons1" 和 "listOfPolygon2" 都被深度复制到加速器并在之前的循环中成功使用(此处未显示代码)
该代码可以编译,但运行时会产生以下错误消息:
我的观察
问题似乎在第 139 行。当我使用“k<polygon2.num_vertices”时,它产生了我提到的错误。
但是,如果我将这一行改为:
(更新 1)或者这个:
程序可以编译运行成功
为什么会这样,我如何在这里使用 struct "polygon2"?
arrays - 在 OpenACC 中加入数组结果
我正在编写一个具有数组依赖性的 OpenACC 代码。内循环的每次迭代都可以更新数组的相同位置。这是一些代码:
OpenMP 版本的写法如下:
在 OpenACC 中,关键字 private 与数组一起使用,但我不知道如何将私有数组与全局数组连接起来。
谢谢。
header - PGI 编译器错误“找不到包含文件位/c++config.h”
我正在用 C 语言编写并在 Ubuntu OS 中使用 pgi 编译器。我想包含一个带有我创建的函数的头文件。在我的代码中,我有
但是,当我编译时出现错误
括号中的目录正是我的工作站上 bits/c++config.h 文件所在的位置。另外,如果我在我的代码中取出“#include”语句,一切运行正常。此外,我什至在我的路径中添加了“/opt/pgi/linux86-64/16.7/include”,但我仍然得到错误上面。我做错了什么?
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 的例程?
如果是这样,我做错了什么?
cmake - 在 cmake 混合语言项目中使用 FORTRAN 链接器
当 CMake 用于混合语言项目(C/C++ 和 FORTRAN)时,会调用 C++ 编译器来链接可执行文件。是否有一种简单的方法可以为链接步骤调用 FORTRAN 编译器。
这将使用 FORTRAN 编译器正确编译,但对于链接步骤,将调用 C++ 编译器,这会导致某些编译器套件(例如 PGI)出现问题。
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。
cuda - OpenACC 中的固定内存(使用 PGI 编译器)
我有一个简单的 CUDA 代码,我将它翻译成 OpenACC。我的所有内核都按预期并行化,它们的性能与我的 CUDA 内核相似。但是,设备到主机的内存传输会影响我的性能。在我的 CUDA 代码中,我使用固定内存并且性能要好得多。不幸的是,在 OpenACC 中我不知道如何使用固定内存。我在文档中找不到任何内容。有人可以为我提供一个使用固定内存的简单 OpenACC 示例吗?
PS:我使用的是 PGI 16.10-0 64 位编译器
openacc - 在没有堆分配时报告 _mp_malloc 的 PGCC-S-0000-Internal 错误
当我尝试在 OpenACC 中编译我的代码时,它会报告:
而报告的函数定义如下:
第 92 行是第 5 行(它是函数定义的一部分,很奇怪)
如果有人可以帮助我,我将不胜感激。
c++ - 更新指令 OpenACC
当我在顶部循环中有一个内核时,为什么我不能使用这两个指令:
我需要在下面的代码中更新这些变量hbias
, vbias
,W
但它不起作用:
但是当我在每个嵌套循环上有许多分离的内核时,我可以更新变量: