问题标签 [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.
openacc - 编译器错误 PGI OpenACC "pgf90_mzero8" 未定义
我正在尝试将 fortran 中的子例程编译为 !$acc 例程 seq 我收到以下错误消息
/scratch/tmp/pgaccKU0jSWcDesiI.gpu(93):错误:标识符“pgf90_mzero8”未定义
在“/scratch/tmp/pgnvdgV0jsxZLyFWv.nv0”的编译中检测到 1 个错误
PGI 编译器版本 17.4
文本大小写
子例程 xx(ndime,pgaus,yy) !$acc 例程 seq
隐式无整数(4) :: ndime, pgaus real(8) :: yy(ndime,ndime,pgaus)
年=0.0
结束子程序 xx
openacc - 编译 openacc 例程“pgf90_copy_f77_argl_i8”时出错
不支持调用 PGI 运行时函数 - pgf90_copy_f77_argl_i8
我相信正在将一个 8 字节整数参数传递给 !$acc 例程。
任何解决方法或更新?
PGI 编译器 17.4
例子。
这里 func 是 acc 例程,所以我想这种方法会产生问题。
我们将创建临时数组,然后传递它们。
c - 如何使用 C/OpenACC 和 PGI 编译器声明全局动态数组
我正在尝试运行一个简单的测试用例,其中动态分配的数组A
被定义为外部并使用 OpenACC 上传到 GPU。全部使用 PGI 编译器。
我的 header.h
文件:
然后,我的header.c
实现:
然后,在main.c
我有
我使用以下命令编译代码:
我的PGI
编译器版本是:
要执行代码:
我认为问题在于 PGI 编译器发送variable=A bytes=8
,因此忽略了我的发送请求A[0:N]
。
那么,如何用 C/OpenACC 和 PGI 编译器声明一个全局动态数组呢?
c++ - 对 openacc 中的每个 gang 进行递归的私有数组
如何在openacc中正确地将数组设为私有?为了我的使用,我声明了一个通过递归函数并自行更新的数组。在 C++ 中,我是这样做的,
现在,当我尝试使用 openacc 指令并行执行此操作时,主要问题就开始了。我想将此数组复制到并行 for 循环区域中,这样每个团伙都将拥有该数组的副本,并且能够使用递归函数更改他们自己的数组 [] 版本,而不是其他版本。我尝试这样做的方式是
但似乎数组没有被传递给递归函数,因为我已经检查过它没有改变。做到这一点的完美方法是什么?
ps 我也试过#pragma acc data pcreate(array[0:N])
,#pragma acc parallel loop independent private(array[0:N])
但结果是一样的
你可以在这里找到整个代码。它在没有指令的情况下完美运行。您唯一需要更改的是用 curand 注释该行,并在 251 268 行用 rand 取消注释该行。请帮忙!
c++ - PGI 编译器中的 CUDA 工具包缺少 link.stub
我正在尝试使用 PGI 编译器附带的 CUDA 工具包 9.0 构建我的 CMake/CUDA 项目。不幸的是,当我尝试这样做时,我在运行时收到以下错误cmake
:
实际上,上述目录中不存在此类文件。但是,如果我转到系统的 CUDA 工具包目录 ( /usr/lib/nvidia-cuda-toolkit/bin
),它与 一起安装,文件所在apt-get
的目录就在那里。如果我只是将目录从该位置复制到 PGI CUDA 工具包目录,CMake 会停止抱怨并且一切都会编译(好吧,我收到关于其中一个库的链接器错误,但我认为这是一个完全不同的问题)。crt
link.stub
crt
cuFFT
- 文件的目的是什么
link.stub
? - 为什么它在 PGI 编译器附带的 CUDA 工具包中不可用?
- 有没有更“温和”的方式来处理这个问题?我不喜欢复制粘贴解决方案,因为我系统的 CUDA 工具包版本是 8.0,而 PGI 编译器工具包中的版本是 9.0。
我正在使用 PGI 编译器工具包 17.10 版。
c - 什么是“PGC-I-0222-符号的冗余定义”
如何解决 pgcc&openacc 链接器错误“__pgi_uacc_multicorestart”、“__pgi_uacc_multicoreend”
这是上述问题之后的后续问题。
在“将 lbe.c 编译为 lbe.o 消息:”中,我总是看到“PGC-I-0222-冗余定义”消息。是警告还是错误?为什么会发生?我如何解决它?
c++ - `->` 的循环携带依赖阻止了并行化
我有一个模型类,它保存模型的数据并在该数据上运行多个函数。细节可能不太重要,只是它具有以下设计:
- 变量存储在类命名空间中。
- 变量由类的方法之一初始化和释放。
- 变量被其他几种方法使用。
类的 MWE 如下所示:
当我编译时:
我收到以下警告:
互联网上的一些挖掘表明,造成这种情况的一个典型原因是指针别名可能导致依赖关系。
我尝试使用*restrict
and independent
(如图所示)告诉编译器一切正常,但它忽略了我并且不并行化循环。
通过适当使用将指针作为参数传递给函数可以restrict
消除错误,但我对这种设计有审美偏好。或者,所有方法,本质上都是一个内核,可以在run()
函数中串在一起,但同样,这是不可取的。
如果我independent
在内循环上使用,我得到:
PGCC-W-0155-平铺/折叠循环嵌套的内部循环不应有另一个循环指令(actual_code.cpp:227)
但循环似乎是并行化的。
我正在使用 PGI 17.9 进行编译。
g++ - 我可以在 GPU 上使用 `omp_get_thread_num()` 吗?
我有 OpenMP 代码,它通过让每个线程管理由线程的 id 号寻址的内存来在 CPU 上工作,可以通过omp_get_thread_num()
. 这在 CPU 上运行良好,但它可以在 GPU 上运行吗?
MWE 是:
c++ - PGI 上 OpenMP 目标指令的结果
我正在使用 PGI 编译以下程序,该程序使用 OpenMP 的目标指令将工作卸载到 GPU:
我的编译字符串如下:
编译成功,但它缺少我使用 OpenACC 获得的一系列输出,这些输出告诉我编译器对指令实际做了什么,如下所示:
如何获得 OpenMP 的类似信息?-Minfo
本身似乎并没有产生任何有用的东西。
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 线程都是私有的?