我正在尝试使用 OpenACC 并行化一些 Fortran 90 代码,其中并行化循环调用顺序例程。 当我尝试使用 PGI Fortran 编译器 (2020.4) 运行代码时,我收到一条错误消息,指出传递引用参数会阻止并行化。 我的理解是,这可能是因为一个例程存在于主机上,而另一个例程存在于设备 ...
我正在尝试使用 OpenACC 并行化一些 Fortran 90 代码,其中并行化循环调用顺序例程。 当我尝试使用 PGI Fortran 编译器 (2020.4) 运行代码时,我收到一条错误消息,指出传递引用参数会阻止并行化。 我的理解是,这可能是因为一个例程存在于主机上,而另一个例程存在于设备 ...
我正在尝试编译一个简单的 OpenACC 基准测试: 使用 Nvidia HPC SDK 21.5 并遇到错误 知道什么可能导致这种情况吗? 据我所知,我的vector(128)语法是合法的。 ...
在 Fortran 程序中,我有一个大循环,在循环内生成的小向量上有几个dot_product调用: 当使用 PGI 编译器编译时,似乎dot_product的加速实现使用了加速循环,因此可以更好地防止主循环加速(在 gang 和 vector 上): 从日志中可以看出,它对循环私有向量使用隐式缩减 ...
使用 PGI 编译器通过 OpenACC 加速 Fortran 代码,我在加速循环中遇到了matmul调用问题。 在简化示例中,我将单位矩阵应用于两个向量,因此输入和 output 值应该相同: 使用 PGI 编译器 20.9 版进行编译时,我得到了以下信息: 运行代码会给出以下值: 第二行应该和 ...
我有一个 GPU 代码,在每次迭代时,它决定是否可以将迭代卸载到加速器。 OpenACC 成为最好的工具:void module(struct my_aos *aos, int n_aos){ int criteria = /* check either that n_aos is l ...
我目前正在加速 Fortran 代码,其中我在子程序sub中有一个主加速循环。 在循环中,我想用acc routine调用设备上的子程序subsub 。 子例程有一个intent(out)参数val ,它在循环中是私有的。 由于subsub本身有一个循环,我想使用vector子句:module ca ...
我目前正在加速 Fortran 代码,其中包含的子例程 ( subsub ) 访问和修改父子例程 ( sub ) 中声明的变量:module mod implicit none contains subroutine sub integer :: var(10) intege ...
我已经为加速器 (20.9) 安装了 PGI 编译器,但是一个应用程序的编译找不到 3 个库nvhpcatm.so 、 nvcpumath.so和nvc.so 。 我想知道是否有人熟悉这些库中的任何一个或它们应该如何构建。 谢谢。 ...
我在 OpenACC 内核中遇到数组问题。 这是演示代码: 当我用nvfortran -acc -Minfo=accel test.f90编译它并运行时,它显示在设备上数组中的值为 0.0,而不是我在主机端设置的正确值 1.0。 这仅发生在数组中:标量,如示例中所示,具有正确的值。 我想知道这 ...
在阅读了这个how-can-a-fortran-openacc-routine-call-another-fortran-openacc-routine 之后,我仍然对这个 OpenACC 函数调用限制感到困惑。 以下是来自上述链接帖子的修改后的废话代码: 当我用nvfortran 20.7 ...
更新 09/07/2020 我在https://gitlab.com/lisanhu2016/rust-openacc-example.git添加了一个小例子 这是一个带有 README 的公共存储库,您应该可以在那里尝试示例。 我一直链接到的库是:nvc、achost、pgm,你可以在buil ...
我有以下简单的代码,由 4 个文件组成: 它在带有 PGI 19.4 编译器的 CPU 上正常工作。 但我的任务是在 GPU 上启动代码。 我使用 PGI 19.4 + OpenAcc。 使用一个简单的CMakeLists.txt文件和编译行(GPU Nvidia GeForce 650 Ti, ...
这是头文件DataHolder.h: 我在main.cpp文件中使用它: 该程序可以编译,但是失败: sizeof(DataHolder)= 7 MB hostptr = 0x501520000,stride = 1,size = 2000000,eltsize = 4 ...
尊敬的StackOverflow社区, 为了使用OpenACC使用GPU加速,我在pgi编译器中遇到“ -ta”标志。 我没有找到任何全面的答案。 是的,我知道使用有关硬件的信息来增强它称为目标加速器。 因此,如果我的GPU硬件为:-ta,我应该设置什么? 用于pgi编译器( ...
我在C ++中有一个相当大的代码,我必须将一些新类集成到基类中,如下所示。 我认为我正在遇到深度复制问题,因为类B的指针无效,因此未定义GPU上代码的行为。 对于在不涉及深层复制问题的情况下如何将类包含在另一个类中的反馈,我将不胜感激。 我怀疑更新设备(此)是由某种原因引起的。 ...
关于#pragma例程seq,从PGi版本18.1到18.4有什么变化,我使用的代码在版本18.1上工作正常,但在使用较新版本时却出错。 我使用数学库生成内核。 使用名称空间std; #pragma acc例程double myfunc(double x){return(fabs(x) ...
我正在将代码带入GPU。 此代码具有使用私有数组的内核。 这意味着该数组在内核循环内声明。 当我将代码移植到OpenACC时,会得到错误的结果。 对我来说,该数组似乎在GPU向量线程之间共享,这会导致一些竞争情况。 我用外部调用来组织下面的示例,因为这就是我的原始代码的样子。 ...
如何解决pgcc&openacc链接器错误“ __pgi_uacc_multicorestart”,“ __ pgi_uacc_multicoreend” 这是上述问题之后的后续问题。 在“将lbe.c编译为lbe.o消息:”中,我总是看到“ PGC-I-0222-冗余定义”消息。 ...
我正在尝试在Ubuntu 16.04 LTS上使用OpenACC 2.5将C中的程序并行化。 经过简单的修改(仅添加一行),我可以将所有.c文件编译为.o文件。 在链接步骤中,pgcc编译器显示 未定义对__pgi_uacc_multicorestart的引用 和 ...
我正在尝试运行一个简单的测试用例,其中动态分配的数组A被外部定义,并使用OpenACC上传到GPU。 全部带有PGI编译器。 我的header.h文件: 然后,我的header.c实现: 然后,在main.c我有 我使用以下命令编译代码: 我的PGI编译器 ...