问题标签 [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 - 使用 OpenACC 并行化嵌套循环
我对 openacc 非常陌生,并且只有高级知识,因此我将不胜感激任何对我做错的帮助和解释。
我正在尝试加速(并行化)一个不那么简单的嵌套循环,该循环使用 openacc 指令更新扁平(3D 到 1D)数组。我在下面发布了一个简化的示例代码,使用
pgcc -acc -Minfo=accel test.c
给出以下错误:
call to cuStreamSynchronize returned error 700: Illegal address during kernel execution
代码:
代替使用region
andloop
指令,使用
产生以下错误:
我正在运行此代码
memory - 在 OpenACC 中高效使用内存
我正在开发一个 OpenACC 计算流体动力学代码,通过将整体计算分解为一堆小操作来增加循环内计算的粒度。我的最终目标是通过将原始复杂任务拆分为 GPU 上更简单的一系列任务来减少每个威胁的寄存器数量。
例如,对于计算域的特定节点,我有许多公式要计算:
如您所见,我可以将计算分散到一个块的线程中,最后将结果(通过归约)汇总到 R。因此,我定义了一个内部并行循环,如下所示:
但是,我需要将 D 定义为所有线程的共享内存,但实际上我不知道 OpenACC 的最佳方式是什么?(我使用了 !$acc 缓存,但性能更差)。此外,我需要将一些未更改的数据发送到常量内存,但我不知道该怎么做。
有没有什么有效的方法可以将这个想法实施到 OpenACC 中?我真的很感谢你的帮助。
非常感谢,贝扎德
cuda - 我可以在 C 源代码级别分析 OpenACC 内核吗?
我正在尝试使用带有 PGI 15.7 编译器的 openacc 来加速我的代码。
我想在 C 源代码级别分析我的代码。我正在使用 CUDA 7.0 中的“nvvp”分析器当我运行 nvvp 时,我可以使用“分析抽头”,并且可以了解哪个延迟是我的代码变慢的原因。(数据依赖,条件分支和带宽......等)
但是,我无法获得基于行的分析,而只能获得“内核”级别的分析。(例如 main_300_gpu 内核使用了 10 秒)。所以我很难知道我必须在哪里修复代码。
有没有办法在源代码级别分析我的代码?
我在用着
PGI 15.7(使用 pgcc)
CUDA 7.0
英伟达 GTX 960
Ubuntu 14.04 LTS x86_64
cuda - NVIDIA GPU 支持分支预测?(使用 OpenACC)
我正在使用带有 OpenACC 的 NVIDIA GPU(NVIDIA GeForce960,编译器:PGI 15.7)
NVIDIA GPU 是否支持分支预测?我的代码在长循环中有条件执行代码。但是当我在 GPU 上运行我的代码时,它需要很长时间。
下面是示例代码。
如果这段代码在 CPU 上编译并运行,CPU 将对条件执行循环进行分支预测。NVIDIA GPU 是否具有与 CPU 的分支预测相同或相似的技能?
如果有,我该如何启用它?
附加问题:
PGI 15.7 编译器是否可以为 GPU 编译优化代码?我知道通常的编译器(gcc ...等)可以使用优化技能进行编译,例如更改条件代码执行顺序。
windows - Windows 环境 OpenACC
我想开始开发 OpenACC 程序,我有几个问题要问:是否可以在 AMD gpu 上执行 OpenACC 代码?
如果是这样,我正在寻找可用于 Windows 环境的编译器。我花了大约一个小时什么都没找到,我急切地想找到任何可以让我编译 Openacc 指令的东西。
c - 删除 C 中的数据依赖项
我有一个具有数据依赖性的代码。
代码示例:
我想删除数据依赖性以并行化此代码。我知道我必须编辑我的代码,但不知道如何修复它。
我该如何修复此代码?
cuda - PGI openACC:目标特定的 gpu 设备
我有两张 NVIDIA 卡:
使用 pgcc,我如何定位特定的卡?如何确保为 nvidia0 (device=0) 或 nvidia1 (device=1) 生成代码?
预先感谢您的帮助。
c - 编写混合 MPI/OpenACC 程序
我正在尝试编写混合 MPI/OpenACC 代码,其中代码需要执行 8 个不同的工作(在本例中为 8 个不同的扫描)。这 8 个作业使用 MPI 划分为 [1-8] 个进程/节点,并且需要在 8 个作业中完成的计算使用 OpenACC 并行化。
在每个过程完成计算后,我减少解决方案并将最小值传递给作为最终解决方案的过程 0。
下面是生成 .txt 输出文件的完整代码 (test.c) 的 MCVE
当我丢弃 openacc 指令并使用 [1-8] 进程运行它时,该代码有效,但是当使用 open acc 编译器时,我得到一个 cudaError。
call to cuStreamSynchronize returned error 700: Illegal address during kernel execution
MPI编译:
OpenACC 编译:
要运行可执行文件,您需要传入一个输入 vti 文件和输出文件名。
链接到输入文件input.vti
我希望这段代码非常灵活,我想让它可以在具有 1 个 GPU 的单个节点上运行,同时运行 [1-8] 进程,也可以在 [1-8] 节点上运行,每个节点都有 [1- 2] GPU。而且我没有使用 CUDA MPS。
我的规格
对此的任何帮助或建议将不胜感激。
编辑:
memory - 如何通过 OpenACC 复制用户定义的类型
我正在使用 PGI 15.7 编译器。我想知道如何通过 OpenACC 将定义的结构从 CPU 复制到 GPU。
非常感谢。
cuda - PGI 编译器能否将生成的 Cuda 代码输出到文件中
我希望将生成的 CUDA 代码保存在文件中以供检查。OpenAcc 和 PGI 编译器可以做到这一点吗?