问题标签 [openacc]

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 回答
325 浏览

c++ - 使用 PGI 编译器链接犰狳时出错

我想使用 OpenACC 加速我的一部分代码以允许它在 GPU 上运行,但我的大部分代码使用 Armadillo 库进行线性代数。我发现加速代码的最简单方法依赖于 PGI 编译器集,但似乎让 PGI 编译器链接到 Armadillo 并不那么容易。我尝试遵循此处的建议,但对于帖子中的简化示例,它对我不起作用:

它应该使用pgc++ -U__GNUG__ -o test.x test.cpp. 但是,我收到很多错误和警告。我不知道这是怎么回事,任何建议将不胜感激。

我得到的错误消息是:

0 投票
1 回答
284 浏览

makefile - 使用 PGI 编译器链接到犰狳库的 Makefile

我正在尝试在 Makefile 中使用 PGI 编译器的 -U__GNUG__ 标志,尝试编译文件夹中的所有 .cpp 文件,链接到犰狳(使用 g++ 编译器,代码编译并运行。)我拥有的 Makefile如下:

似乎对象文件的编译正在工作,但无法编译最终的可执行文件。这个 Makefile 有什么问题?

使用以下代码编译代码:

我收到以下错误:

这应该通过包含标志 -U__GNUG__ 来解决。

任何建议将不胜感激。

0 投票
1 回答
113 浏览

cuda - 控制从 OpenACC 计算区域进入 CUDA 函数的线程

我从 OpenACC 计算区域调用了一个 cuda 函数,我想指定应该进入 cuda 函数的线程数,但似乎我不知道如何控制它。

编译很好。但是无论我使用什么向量长度,进入 cuda 函数的线程数始终是 32。有没有办法指定它?

我使用“cuda/7.0.28”和“pgi/15.10”

谢谢

0 投票
2 回答
1040 浏览

linker - 使用 gcc 链接器链接 pgi 编译库

我想知道如何将 pgc++ 编译代码 (blabla.a) 与使用 c++ 或 g++ GNU 编译器编译的主代码链接起来。目前与默认 gnu c++ 链接器链接会出现如下错误: undefined reference to `__pgio_initu'

0 投票
1 回答
853 浏览

cuda - 减少 OpenACC

这是矩阵向量乘法的 Fortran 子程序。它可能在许多方面都过时且效率低下,但现在我只是想让它与 OpenACC 指令一起使用,并且我试图弄清楚减少是如何工作的:

这段代码实际上给出了正确的结果。但是当我在最后一个循环上尝试一个 gang/vector 组合时,就像这样:

结果回来都错了。看起来,对于 的大多数(但不是全部)元素的求和是不完整的outvec。无论我将reduction条款放在哪里,无论是帮派还是向量,都是这种情况。更改位置会更改结果,但永远不会给出正确的结果。

我在一个简单的测试中得到的结果如下。 matrix是 10x10 和全 1,并且invec是 1,2,3,...10。所以outvec每个元素都应该是invec, 55 中元素的总和。如果我运行代码的 gang/vector 版本,每个元素outvec都是 1,而不是 55。如果我用向量进行归约,那么我得到了正确的答案,55。这将继续有效,直到我超过 90 个元素。当我到达 91 时,每个元素都outvec应该等于 4186。但只有最后一个是,其余的都等于 4095(1 到 90 的总和)。随着元素数量的增加,值的变化以及与正确答案的差异会变得更糟。

我显然不明白减少是如何工作的。谁能解释一下?

0 投票
0 回答
556 浏览

openacc - 加速器数据区域无效:不允许分支进出区域?

pgcc 显示“无效的加速器数据区域:不允许分支进或出区域”对于我放置我的 acc 编译指示的行,但我不明白为什么。

我正在为循环将使用的所有数组使用复制、复制和创建。

我错过了什么?谢谢!

0 投票
1 回答
179 浏览

cublas - 在 OpenAcc 中使用 cuBLAS

我想用 cublasDgemm() 替换对“cblas_dgemm()”的调用。这是 Shark 机器学习库的原始包装器:

这是使用 OpenAcc 编译指示修改后的代码:

问题是当我用 OpenAcc 标志编译代码时,结果矩阵的元素,即 C,在内核执行之前和之后都是零。我不确定我在这里缺少什么。我很感激任何帮助。

0 投票
1 回答
312 浏览

compilation - 使用 Cray 编译器编译 OpenACC Fortran 代码

我尝试使用 Cray Fortran 编译器编译 OpenACC Fortan 代码...

失败并显示错误消息

所以显然我必须指定目标加速器。问题是,我在任何地方都找不到有关如何执行此操作的任何文档,而不是在 Bing 搜索中,尤其是在 crayftn 手册页中。任何人都知道使用什么标志?

顺便说一句,我正在尝试为 nvidia Tesla K40 进行编译。我现在被 Cray 编译器困住了。即使我现在可以使用另一个编译器,我最终也必须为 crayftn 解决这个问题。谢谢。

0 投票
0 回答
121 浏览

fortran - 在fortran77项目中使用OpenACC,但是没有效果,不输出内核信息

我有一个fortran77水库模拟项目,想用openacc指令加速实现,编译器是PGI visual fortran,子程序如下:

子程序 jbild(a, b, impl, [ ia, ja, neqa, kvst, ka, ibkmax, nja, ndima, nbmxc, [ isymm)

但是当我添加 openacc 指令时,我看不到输出信息和数据复制信息,在控制台中也没有输出内核执行时间信息。我已经设置了环境变量和命令行参数,以确保信息输出。:

数组存储在 .com 文件中。不知道为什么openacc没有努力,goto-statement有什么影响,我想删除goto-statement程序修改使用openacc的程序

0 投票
1 回答
514 浏览

c++ - OpenACC 现在子句更新数据

我正在尝试对许多身体模拟进行 openACC 优化。目前,我面临一个导致以下内存问题的问题

调用cuStreamSynchronize返回的错误 700:内核执行期间的非法地址
调用cuMemFreeHost返回的错误 700:内核执行期间的非法地址
srun:错误:jrc0017:任务 0:以退出代码 1 退出

我正在使用pgc++编译器,我的编译器标志是-acc -Minfo=accel -ta=tesla -fast -std=c++11并且我不想使用-ta=tesla:managed,因为我想自己组织内存。

如果我删除下面的代码

我的代码能够毫无问题地运行。但是,如果我取消注释它们,我会遇到内存问题。似乎sim.part.vx正在尝试更新数据,但编译器不知道导致内存问题的原因。

有谁知道如何解决这个问题?