问题标签 [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.
c++ - OpenACC 嵌套循环依赖错误
拜托,我需要一些关于使用 OpenACC 并行计算模型(C++)的帮助。问题如下:
变量 W、hbias、vbias(它应该更新每次迭代)和 propup 和 propdown 函数内部的计算手段之间存在依赖关系,但是通过在不可用的代码上使用 OpenACC。所以每个迭代函数都会得到 W 的初始值和偏差。请注意,如果并行化发生在较低级别,则不会受益。这是代码:
multithreading - 2 个平台(GCC 和 PGI 编译器)上的 Fortran/OpenMP 比较。意外的执行时间
我编译(使用 GCC 和 PGI 编译器)并在两个不同的平台(基于 Haswell 和 Skylake)上运行了一个小型 Fortran/OpenMP 程序,只是为了感受一下性能的差异。我不知道如何解释结果——它们对我来说是个谜。
这是小程序(取自 Nvidia Developer 网站并稍作改编)。
我使用的两个平台是:
- 英特尔 i7-4770 @ 3.40GHz (Haswell),32 GB RAM / Ubuntu 16.04.2 LTS
- Intel i7-6700 @ 3.40GHz (Skylake), 32 GB RAM / Linux Mint 18.1 (~ Ubuntu 16.04)
在每个平台上,我都编译了 Fortran 程序
- GCC gfortran 6.2.0
- PGI pgfortran 16.10 社区版
我显然在每个平台上独立编译了程序(我只移动了 .f90 文件;我没有移动任何二进制文件)
我运行了 4 个可执行文件中的每一个 5 次(每个平台 2 个),收集以秒为单位测量的挂墙时间(由程序打印出来)。(嗯,整个测试我跑了好几次,下面的时间绝对有代表性)
顺序执行。程序编译:
- gfortran -Ofast main.f90 -o gcc-seq
- pgfortran -fast main.f90 -o pgi-seq
时间安排(最好的 5 个):
- 哈斯韦尔 > gcc-seq:150.955,pgi-seq:165.973
- Skylake > gcc-seq:277.400,pgi-seq:121.794
多线程执行(8 个线程)。程序编译:
- gfortran -Ofast -fopenmp main.f90 -o gcc-omp
- pgfortran -fast -mp=allcores main.f90 -o pgi-omp
时间安排(最好的 5 个):
- 哈斯韦尔 > gcc-omp:153.819,pgi-omp:151.459
- Skylake > gcc-omp:113.497,pgi-omp:107.863
使用 OpenMP 编译时,我使用 omp_get_num_threads() 检查了并行区域中的线程数,实际上总是有 8 个线程,正如预期的那样。
有几件事我没有得到:
- 使用 GCC 编译器:为什么在 Skylake OpenMP 上具有显着优势(277 vs 113 s),而在 Haswell 上却完全没有优势?(150 vs 153 s) Haswell 发生了什么?
- 使用 PGI 编译器:为什么 OpenMP 在两个平台上都有这么小的好处(如果有的话)?
- 专注于顺序运行,为什么 Haswell 和 Skylake 之间的执行时间存在如此巨大的差异(尤其是当程序使用 GCC 编译时)?为什么这种差异仍然如此重要 - 但是 Haswell 和 Skylake 的角色颠倒了!- 何时启用 OpenMP?
- 此外,当启用 OpenMP 并使用 GCC 时,cpu 时间总是比 wall 时间大得多(正如我所料),但是当使用 PGI 时,cpu 和 wall 时间总是相同的,那么程序也使用了多个线程。
我怎样才能从这些结果中获得一些意义?
compiler-construction - PGI Flang github消失了
有谁知道 Flang 或 PGI/LLNL/Nvidia 的 Fortran for LLVM(不是 Dragonegg)去了哪里?我在一个不再存在的 github 页面上找到了一些文档。
parallel-processing - 使用 CUDA Fortran 的设备无法正确返回主机发送的值
我以 CUDA Fortran 的主机和设备之间的数据传输为例,发现:
主机代码:
设备代码:
预期的结果是控制台显示“成功”,但这并没有发生。屏幕上什么也没有出现,没有任何错误或消息。发生这种情况是因为不要输入 if,因为 a_d 与调用 inc 子程序之前的值相同。
我正在使用:
操作系统:Linux - Ubuntu 16
库达 8
PGI 编译
编译命令:
我尝试了其他示例,但它们也不起作用。
我尝试使用具有相同命令的简单 Fortran (.f90) 代码进行编译,它可以工作!
我该如何解决这个问题?
c++ - PGI 编译器:macOSX 上的编译时错误
我的macOS是10.12.4,我已经在我的macbook上安装了PGI(只需通过从PGI官网下载的安装程序安装,激活自己的控制台,没有其他操作,在这个控制台中,有类似“pgcc pgc++和等等”),版本是 16.10,我用 CLion 编辑了一个测试代码:
当我编译它时,我遇到了一些问题:
并且无论使用 pgc++ 执行哪个部分(第 1 部分或第 2 部分),错误信息可能是相同的,我不知道从哪里开始解决这个问题,我是 macbook 上的新手,真的希望你帮助~
openacc - 如何找到用于 OpenACC 的特定 PGI 函数的签名?
如何找到 PGI 编译器用于 OpenACC 的特定函数的签名?
例如,__pgi_uacc_enter
或__pgi_uacc_launch
函数。
是否有任何文档或头文件可以找到签名。甚至一些文档不仅涉及其签名,还涉及其功能。
c - OpenACC必有例行信息错误
我正在尝试并行化一个简单的 mandelbrot c 程序,但我得到了这个错误,它与不包括 acc 例程信息有关。另外,我不确定是否应该将数据复制进和复制出并行部分。PS我对并行编程比较陌生,所以任何关于学习它的建议都将不胜感激。
(编译时警告)
这是我的代码:
random - 使用 PGI Fortran 生成许多随机数时出现分段错误
我需要生成大量随机数(从零到1,均匀分布)。
我最初有一个 Do 循环,并且正在动态生成随机数,如下所示:
但是,我在生成数字时遇到了分段错误(如果我注释掉了“call random_number(RandomN)”行,它工作正常)。
然后在阅读 PGI 论坛 ( http://www.pgroup.com/userforum/viewtopic.php?t=713&highlight=randomseed ) 上的帖子后。我决定首先生成所有数字并将它们放入一个数组中。
但是,这立即给了我一个段错误。我尝试了没有种子的简化版本:
这适用于我的代码的几次迭代,然后也会产生分段错误。我是否正在使用某种内存?有没有办法清除它?或防止它被用完?
我也试过:
但这也给出了段错误。
c - MPI_Irecv 类型转换需要错误
我的代码可以在我的 github 上找到: https ://github.com/chrismunley/ParallelProgramming/tree/master
我得到的错误是: PGC-W-0095-Type cast required for this conversion (my_laplace.c: 112) PGC-W-0095-Type cast required for this conversion (my_laplace.c: 120) PGC/x86-64 Linux 17.5-0:编译完成但出现警告
有人知道我在 Irecv 上做错了什么吗?我认为这与参数有关。非常感谢!