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

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

0 投票
1 回答
127 浏览

openacc - 编译 openacc 例程“pgf90_copy_f77_argl_i8”时出错

不支持调用 PGI 运行时函数 - pgf90_copy_f77_argl_i8

我相信正在将一个 8 字节整数参数传递给 !$acc 例程。

任何解决方法或更新?

PGI 编译器 17.4

例子。

这里 func 是 acc 例程,所以我想这种方法会产生问题。

我们将创建临时数组,然后传递它们。

0 投票
1 回答
941 浏览

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 编译器声明一个全局动态数组呢?

0 投票
1 回答
198 浏览

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 取消注释该行。请帮忙!

0 投票
1 回答
377 浏览

c++ - PGI 编译器中的 CUDA 工具包缺少 link.stub

我正在尝试使用 PGI 编译器附带的 CUDA 工具包 9.0 构建我的 CMake/CUDA 项目。不幸的是,当我尝试这样做时,我在运行时收到以下错误cmake

实际上,上述目录中不存在此类文件。但是,如果我转到系统的 CUDA 工具包目录 ( /usr/lib/nvidia-cuda-toolkit/bin),它与 ​​一起安装,文件所在apt-get的目录就在那里。如果我只是将目录从该位置复制到 PGI CUDA 工具包目录,CMake 会停止抱怨并且一切都会编译(好吧,我收到关于其中一个库的链接器错误,但我认为这是一个完全不同的问题)。crtlink.stubcrtcuFFT

  • 文件的目的是什么link.stub
  • 为什么它在 PGI 编译器附带的 CUDA 工具包中不可用?
  • 有没有更“温和”的方式来处理这个问题?我不喜欢复制粘贴解决方案,因为我系统的 CUDA 工具包版本是 8.0,而 PGI 编译器工具包中的版本是 9.0。

我正在使用 PGI 编译器工具包 17.10 版。

0 投票
1 回答
246 浏览

c - 什么是“PGC-I-0222-符号的冗余定义”

如何解决 pgcc&openacc 链接器错误“__pgi_uacc_multicorestart”、“__pgi_uacc_multicoreend”

这是上述问题之后的后续问题。

在“将 lbe.c 编译为 lbe.o 消息:”中,我总是看到“PGC-I-0222-冗余定义”消息。是警告还是错误?为什么会发生?我如何解决它?

0 投票
1 回答
780 浏览

c++ - `->` 的循环携带依赖阻止了并行化

我有一个模型类,它保存模型的数据并在该数据上运行多个函数。细节可能不太重要,只是它具有以下设计:

  • 变量存储在类命名空间中。
  • 变量由类的方法之一初始化和释放。
  • 变量被其他几种方法使用。

类的 MWE 如下所示:

当我编译时:

我收到以下警告:

互联网上的一些挖掘表明,造成这种情况的一个典型原因是指针别名可能导致依赖关系。

我尝试使用*restrictand independent(如图所示)告诉编译器一切正常,但它忽略了我并且不并行化循环。

通过适当使用将指针作为参数传递给函数可以restrict消除错误,但我对这种设计有审美偏好。或者,所有方法,本质上都是一个内核,可以在run()函数中串在一起,但同样,这是不可取的。

如果我independent在内循环上使用,我得到:

PGCC-W-0155-平铺/折叠循环嵌套的内部循环不应有另一个循环指令(actual_code.cpp:227)

但循环似乎是并行化的。

我正在使用 PGI 17.9 进行编译。

0 投票
2 回答
378 浏览

g++ - 我可以在 GPU 上使用 `omp_get_thread_num()` 吗?

我有 OpenMP 代码,它通过让每个线程管理由线程的 id 号寻址的内存来在 CPU 上工作,可以通过omp_get_thread_num(). 这在 CPU 上运行良好,但它可以在 GPU 上运行吗?

MWE 是:

0 投票
1 回答
381 浏览

c++ - PGI 上 OpenMP 目标指令的结果

我正在使用 PGI 编译以下程序,该程序使用 OpenMP 的目标指令将工作卸载到 GPU:

我的编译字符串如下:

编译成功,但它缺少我使用 OpenACC 获得的一系列输出,这些输出告诉我编译器对指令实际做了什么,如下所示:

如何获得 OpenMP 的类似信息?-Minfo本身似乎并没有产生任何有用的东西。

0 投票
1 回答
874 浏览

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 线程都是私有的?