问题标签 [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.
c - 如何解决 pgcc&openacc 链接器错误“__pgi_uacc_multicorestart”、“__pgi_uacc_multicoreend”
我正在尝试在 Ubuntu 16.04 LTS 上将我的 C 程序与 OpenACC 2.5 并行化。在添加一行的简单修改后,我可以将所有 .c 文件编译为 .o 文件。在链接步骤中,pgcc 编译器显示
未定义对“__pgi_uacc_multicorestart”的引用
和
对“__pgi_uacc_multicoreend”的未定义引用
. 谷歌搜索显示与这些错误消息无关。请帮我解决这个问题。
这是与我的系统和程序相关的信息和源代码。我尝试发布基本部分,如果您需要其他任何内容,请告诉我。
操作系统、软件:
.bashrc:
生成文件:
错误信息:
lbe.c,我只添加了一行作为使用 OpenACC 的第一步。
将 lbe.c 编译为 lbe.o 消息:
c - 什么是“PGC-I-0222-符号的冗余定义”
如何解决 pgcc&openacc 链接器错误“__pgi_uacc_multicorestart”、“__pgi_uacc_multicoreend”
这是上述问题之后的后续问题。
在“将 lbe.c 编译为 lbe.o 消息:”中,我总是看到“PGC-I-0222-冗余定义”消息。是警告还是错误?为什么会发生?我如何解决它?
c - OpenACC:每个 GPU 线程都有一个私有数组
我将代码带到 GPU 上。这段代码有一个使用私有数组的内核。这意味着该数组是在内核循环中声明的。
当我将代码移植到 OpenACC 时,我得到了错误的结果。对我来说,看起来这个数组是在 GPU 向量线程之间共享的,这会导致几个竞争条件。
我用外部调用组织了以下示例,因为这就是我的原始代码的样子。
标头.h:
主.c:
fc:
我可以看到带有cc -v
返回的编译器版本Export PGI=/opt/pgi/17.5.0
。
编译:
代码应将所有A[i]
元素设置为等于i
. 当我在 OpenACC 支持下运行此代码时,我得到完全错误的结果。我的猜测是比赛条件。没有openacc
编译的版本可以正常运行。在运行结束时A[i]==i
所以,我的问题是:如何使用 OpenACC使一个小数组对所有GPU 线程都是私有的?
fortran - OpenMP 4.0 标准是否支持现代 Fortran 中的类型绑定过程?
我正在使用 OpenACC 指令加速我们研究小组的研究计算流体动力学 (CFD) 代码。但是,CFD 代码是用现代 Fortran 编写的,并且使用类型绑定过程。
不幸的是, PGI 编译器在 GPU 代码中不支持类型绑定过程。然后我的顾问希望我弄清楚 OpenMP 4.0 标准是否支持现代 Fortran 中的类型绑定过程。
如果是这样,是否有具有此支持的编译器?
gpu - PGI 18.1 与 PGI 18.4
从 PGi 版本 18.1 到 18.4 是否有关于#pragma 例程 seq 的任何更改,我的代码在 18.1 版本中运行良好,但在我使用较新版本时出现错误。我使用数学库生成内核。
使用命名空间标准;#pragma acc 例程 double myfunc(double x) { return(fabs(x)); }
例程指令的默认并行度是(或曾经是)顺序的。即#pragma accroutine 等价于#pragma accroutine seq
这在 18.1 版中运行良好。但我认为新版本可能会有一些变化,因为当我使用 18.4 版本编译时,它会报错,抱怨数学库函数。
奇怪的是也会导致错误
#include cmath
#include "openacc.h"
使用命名空间标准;
给出编译错误,但是当我将数学库更改为 math.h 时,它非常好,谁能解释为什么不使用 pgc++ ?
gpu - 带有 openACC 指针的嵌套类
我在 C++ 中有一个相当大的代码,我必须将一些新类集成到基类中,如下所示。
我认为我遇到了深拷贝问题,因为 B 类的指针无效,因此 GPU 上的代码行为我未定义。我将不胜感激有关如何在另一个课程中执行课程包含而不涉及深拷贝问题的反馈。我怀疑更新设备(this)以某种方式导致了这种情况。
openacc - OpenACC - pgcc 编译器中的 -ta 是什么意思?
亲爱的 StackOverflow 社区,
为了使用 OpenACC 使用 GPU 加速,我正在 pgi 编译器中使用“-ta”标志。我没有找到任何全面的答案。是的,我知道它被称为目标加速器,以使用有关硬件的信息来提升。那么,如果我的 GPU 硬件是,我应该设置什么 -ta :
pgi 编译器 ( /opt/pgi/linux86-64/2019/cuda
) 的 CUDA 版本为: 9.2、10.0、10.1
先感谢您!
最好的问候, Evgenii
c++ - 为什么我得到设备 [1] 的当前表转储:此代码中的 NVIDIA Tesla GPU 0?
这是一个头文件DataHolder.h:
我在文件 main.cpp 中使用它:
该程序编译,但失败:
sizeof(DataHolder)=7 MB hostptr=0x501520000,stride=1,size=2000000,eltsize=4,flags=0x200=present,async=-1,threadid=1 设备[1]的当前表转储:NVIDIA Tesla GPU 0 , 计算能力 3.0, threadid=1 host:0x604b60 device:0x501ce0000 size:4 presentcount:1+0 line:26 name:LIFE 已分配块设备:0x501ce0000 size:512 thread:1 FATAL ERROR: PRESENT 子句中的数据未找到设备 1:名称=(空)主机:0x501520000 文件:/home/70-gaa/NFbuild_script_CHECK_GPU/ERROR/T3DataHolder.h _ZN10DataHolderIfE12InitParticleEv 行:26
为什么?怎么了?
我使用编译行编译了在 GPU GeForce GTX 650 Ti 上启动的代码:
使用 PGI 19.4 C++ 编译器、gcc 5.3.1、OS Fedora 23 x86_64、CUDA 10.1、CUDA 驱动程序版本 418.67。
c++ - 如何直接(不使用指针作为函数参数)访问 OpenAcc 计算区域中 GPU 上的数组?
我有以下简单的代码,由 4 个文件组成:
它在带有 PGI 19.4 编译器的 CPU 上正常工作。但我的任务是在 GPU 上启动代码。我使用 PGI 19.4 + OpenAcc。使用简单的CMakeLists.txt文件和编译行(GPU Nvidia GeForce 650 Ti,计算能力 3.0):
编译失败:
使用pggdecode,发现“ _ZNK11ProcessImpl4Get2Ei ”是ProcessImpl::Get2(int) const的错误名称。我从ProcessImpl.h中删除了inline关键字,并尝试在main()中将copyin(process)添加到#pragma acc data create(particles,outputArray),但这没有帮助。使用 gcc 5.3.1 在 Fedora 23 上工作。
在完整的代码中,我避免了在单个 .cpp 文件中包含多个数组粒子和outputArray定义的问题,因为 OpenAcc 不允许使用extern关键字。可能不好(如果您知道如何做得更好,请提出建议),但它确实有效。
问题是:
如何正确地将 GPU 版本的数组粒子和outputArray传递给Process.h中的 Get1( )和Get2 () ,并使ProcessImpl.h中的Get1()和Get2()与 GPU 上分配的数组一起工作?以及如何编译这段代码?
OpenAcc 如何允许直接访问在 OpenAcc 计算区域的代码中复制到 GPU 的全局分配数组,而无需将指向它们的指针作为调用函数的参数传递?
谢谢你。
rust - 从 Rust 调用 OpenACC 代码不在 GPU 上运行
2020 年 9 月 7 日更新
我在https://gitlab.com/lisanhu2016/rust-openacc-example.git为此添加了一个小示例
这是一个带有自述文件的公共存储库,您应该可以在那里尝试该示例。
我一直链接的库是:nvc、achost、pgm,你可以在build.rs
===
我正在尝试从 rust 代码中调用 openacc 代码,但我遇到了可能与链接有关的问题。我正在使用以下步骤:
bindings.cc
使用 openacc 标志编译-acc -gpu=managed -Minfo=accel
并将其转换为静态库libfoo.a
- 编译 rust 代码
libfoo.a
,并动态链接到库nvc
nvcpumath
nvhost
nvdevice
。 - 用一些数据运行代码,它运行。
- 运行代码
PGI_ACC_TIME=1
,没有时间信息 - 运行代码
ncu --set full
,它没有显示内核信息
我想我们可能链接到了错误的库,但我不确定,你能帮我解决这个问题吗?太感谢了!!