问题标签 [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.
openacc - 具有相同数组的不同子部分的嵌套数据环境
这是我关于openacc的问题。我阅读了 API(v1 和 v2),我不清楚具有同一数组的不同子部分的嵌套数据环境的行为。
代码示例:
我的理解是这应该有效(或至少两个 acc 数据部分):
- 第一个编译指示检查 a[0,20] 是否在加速器上
- 否 -> 数据在设备上分配并传输
- 第二个编译指示检查 a[100,120] 是否在加速器上
- 指针 a 在加速器上,但不是来自 a[100,120] 的数据
- 数据在设备上分配并传输
我用 CAPS 编译器(v3.3.0,这是我的测试机器上现在唯一可用的)尝试了这种事情,第二个 pragma acc 数据返回了一个错误(我的第二个子数组没有正确的形状)。所以我的测试(我想)发生的事情是在加速器上找到了指针“a”,但与它相关的形状([0:20])在我的第二个编译指示([100:20] )。
这是 API 中计划的正常行为,还是我的示例应该有效?
此外,如果这应该起作用,同一数组的子部分之间是否存在某种连贯性(不知何故,它们将像在主机上一样定位,我将能够放置 a[i] += a[100+ i] 在我的内核中)?
openacc - 使用 openacc 在 GPU 集群上优化 nbody
我们正在尝试为多个节点提供通用的 nbody 算法。一个节点有 2 个 GPU 和 1 个 CPU。
我们只想在 GPU 上使用 openacc 计算 n-body。在对 openacc 做了一些研究之后,我不确定如何将计算扩展到多个 GPU。
是否可以使用只有一个线程和 openacc 的 2 个 GPU?如果没有,什么是合适的方法,使用 openMP 在一个节点上使用两个 GPU 并通过 MPI 与其他节点通信?
cublas - 是否可以将 CUBLAS 与 OpenACC 一起使用?
我必须使用 OpenACC 指令实现我在 CUDA-C 中已有的功能(我必须进行比较)。在原始代码中有 cubasSgemv 调用,有什么方法可以在 openacc 下使用 cublas 库?
gpu - 打开 ACC:PGI 编译器没有输出
我是本科生,正在实习中学习开放式 ACC。
我自己制作了基本示例代码,用于测试 PGI 工作站编译器(14.1 版)运行良好,它与命令行指令“pgcc -acc lab04.c -Minfo”配合使用
但是我有一个奇怪的问题。@@ 任何地方都没有输出!!@@
我确信编译器运行良好,内核也是如此。但我猜肯定有错误。
你们能帮帮我吗?
我将发布整个代码。
fortran - 任何现有的 OpenACC 编译器都支持包含可分配数组的派生类型吗?
是否有任何 OpenAcc 编译器支持将包含可分配数组的派生类型复制到 GPU 或从 GPU 复制以及它们在加速代码中的使用?
OpenACC 规范 (v2.0) 声明这是可能的,但我无法在任何地方的编译器中找到它。PGI 编译器支持派生类型,但似乎不支持那些包含可分配数组的类型(请参阅PGI 论坛上的此页面)。虽然自他们以来这可能已经改变,但它似乎并没有在任何地方被宣传(很好)。
openacc - 带有 OpenACC 的 GPU 上的嵌套循环返回分段错误
有几个星期我对 OpenACC 失去了理智!例如我必须并行化代码
为此,我尝试了几种方法,最后一种是在阅读Nvidia Technology Group之后很好地解释了gang和vector的功能。所以我尝试:
编译器说
但是当我尝试执行时:
与 cuda-memcheck 相同,它只回答分段错误。以前我以“并行”方式而不是“内核”插入编译指示,但我遇到了“大小为 8 的无效全局写入(...)越界”的问题。
显然有些东西我不明白,所以如果有人能告诉我并行化这些代码的方法,我会试着理解我的错误
非常非常感谢你
c - OpenACC 感知 CAPS 编译器的限制
我目前正在编写一份关于编译器级别自动并行化技术状态的报告。关于 OpenACC 标准,有几种编译器可用,例如 PGI 编译器、CAPS 或 CRAY 编译器。但是,我想知道 CAPS 编译器是否有特定的限制,OpenACC 标准中没有记录这些限制?我知道,2.0a 可能存在限制,因为该标准尚未完全实施,但我应该注意哪些陷阱?
multithreading - 是否存在 OpenMP 指令 THREADPRIVATE 的 OpenACC 对应项?
在我的 OpenMP 项目中,我在线程子例程“工具”上使用 do 循环,并且仅限于将单变量函数传递给线程子例程“工具”。但是,在我的数学模型中,该函数必须再接受一个参数,因此我需要将第二个线程相关变量提供给各个线程。
对于我需要的函数,我只需添加指令“!$OMP THREADPRIVATE(i)”,它就可以完美运行。我想知道如何将此代码移植到 OpenACC。
在我看来,新的 OpenACC 2.0 标准可以处理这个问题,但是我在 Internet 上找不到任何详细的示例代码教程来说明如何使用新指令(例如“例程”)来调用线程相关的函数或子例程平行区内。
谢谢。
李
主.F90
/li>型号.F90
/li>
cuda - 如何在 Fortran 中将 OpenACC 与 cublasDgetrfBatched 接口?
我一直在研究一个 Fortran 代码,它使用 cuBLAS 批处理 LU 和 cuSPARSE 批处理三对角求解器作为带有 ADI 预处理器的 BiCG 迭代求解器的一部分。我使用的是计算能力为 3.5 和 CUDA 5.5 的 Kepler K20X。我在没有 PGI 的 CUDA Fortran 的情况下这样做,所以我正在编写自己的接口:
我使用 cudaHostAlloc 在主机上分配固定内存,为矩阵和包含指向矩阵的设备指针的设备数组分配设备内存,将每个矩阵异步复制到设备,执行操作,然后异步复制分解的矩阵和枢轴返回主机以使用单个右侧执行反向替换:
我宁愿不必做最后一步,但 cublasDtrsmBatched 例程将矩阵大小限制为 32,而我的大小为 80(批处理 Dtrsv 会更好,但这不存在)。启动多个单独的 cublasDtrsv 内核的成本使得在设备上执行备份是站不住脚的。
在对 cublasDgetrfBatched 和 cusparseDgtsvStriedBatch 的调用之间,我还需要执行其他操作。其中大部分当前在主机上执行,OpenMP 用于在批处理级别并行化循环。一些运算,例如每个被分解的矩阵的矩阵向量乘法,正在使用 OpenACC 的设备上进行计算:
我想用 OpenACC 将更多的计算放在 GPU 上,但要做到这一点,我需要能够将两者连接起来。类似于以下内容:
我知道在大多数情况下,带有 host_device 子句的 host_data 构造是合适的,但由于我实际上需要将一个包含指向设备上矩阵的指针的设备数组传递给 cuBLAS,所以我不确定如何继续。
任何人都可以提供任何见解吗?
谢谢
performance - OpenACC 是否脱离了正常的 GPU 渲染?
我试图弄清楚是否可以使用 OpenACC 代替正常的 CPU 串行执行调用。通常我的编程都是关于 3D 编程,或者以某种方式正常使用 GPU。IE 图像处理或其他需要使用着色器的渲染类型。我试图弄清楚这个图书馆是否对我有益。
我问这个的原因是因为如果我正在渲染 3D 图形(尽可能快),它会减慢这个过程吗?或者它是否能够保持(理论上)“高帧率”。
如果是这样,权衡是什么,多少钱?我不愿意放弃 3D 图形(显示)性能来增强可以在 CPU 上串行完成的操作。
编辑:这是一个 C++ 上下文。