问题标签 [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.
c++ - 使用 PGI 编译器链接犰狳时出错
我想使用 OpenACC 加速我的一部分代码以允许它在 GPU 上运行,但我的大部分代码使用 Armadillo 库进行线性代数。我发现加速代码的最简单方法依赖于 PGI 编译器集,但似乎让 PGI 编译器链接到 Armadillo 并不那么容易。我尝试遵循此处的建议,但对于帖子中的简化示例,它对我不起作用:
它应该使用pgc++ -U__GNUG__ -o test.x test.cpp
. 但是,我收到很多错误和警告。我不知道这是怎么回事,任何建议将不胜感激。
我得到的错误消息是:
makefile - 使用 PGI 编译器链接到犰狳库的 Makefile
我正在尝试在 Makefile 中使用 PGI 编译器的 -U__GNUG__ 标志,尝试编译文件夹中的所有 .cpp 文件,链接到犰狳(使用 g++ 编译器,代码编译并运行。)我拥有的 Makefile如下:
似乎对象文件的编译正在工作,但无法编译最终的可执行文件。这个 Makefile 有什么问题?
使用以下代码编译代码:
我收到以下错误:
这应该通过包含标志 -U__GNUG__ 来解决。
任何建议将不胜感激。
cuda - 控制从 OpenACC 计算区域进入 CUDA 函数的线程
我从 OpenACC 计算区域调用了一个 cuda 函数,我想指定应该进入 cuda 函数的线程数,但似乎我不知道如何控制它。
编译很好。但是无论我使用什么向量长度,进入 cuda 函数的线程数始终是 32。有没有办法指定它?
我使用“cuda/7.0.28”和“pgi/15.10”
谢谢
linker - 使用 gcc 链接器链接 pgi 编译库
我想知道如何将 pgc++ 编译代码 (blabla.a) 与使用 c++ 或 g++ GNU 编译器编译的主代码链接起来。目前与默认 gnu c++ 链接器链接会出现如下错误: undefined reference to `__pgio_initu'
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 的总和)。随着元素数量的增加,值的变化以及与正确答案的差异会变得更糟。
我显然不明白减少是如何工作的。谁能解释一下?
openacc - 加速器数据区域无效:不允许分支进出区域?
pgcc 显示“无效的加速器数据区域:不允许分支进或出区域”对于我放置我的 acc 编译指示的行,但我不明白为什么。
我正在为循环将使用的所有数组使用复制、复制和创建。
我错过了什么?谢谢!
cublas - 在 OpenAcc 中使用 cuBLAS
我想用 cublasDgemm() 替换对“cblas_dgemm()”的调用。这是 Shark 机器学习库的原始包装器:
这是使用 OpenAcc 编译指示修改后的代码:
问题是当我用 OpenAcc 标志编译代码时,结果矩阵的元素,即 C,在内核执行之前和之后都是零。我不确定我在这里缺少什么。我很感激任何帮助。
compilation - 使用 Cray 编译器编译 OpenACC Fortran 代码
我尝试使用 Cray Fortran 编译器编译 OpenACC Fortan 代码...
失败并显示错误消息
所以显然我必须指定目标加速器。问题是,我在任何地方都找不到有关如何执行此操作的任何文档,而不是在 Bing 搜索中,尤其是在 crayftn 手册页中。任何人都知道使用什么标志?
顺便说一句,我正在尝试为 nvidia Tesla K40 进行编译。我现在被 Cray 编译器困住了。即使我现在可以使用另一个编译器,我最终也必须为 crayftn 解决这个问题。谢谢。
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的程序
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
正在尝试更新数据,但编译器不知道导致内存问题的原因。
有谁知道如何解决这个问题?