问题标签 [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 投票
4 回答
8870 浏览

kernel - 在 OpenCL 上使用 OpenACC?

我是 OpenACC 的新手,它是 GPU 加速和 CPU 的新编程标准。据我所知,OpenACC 是一种编译器指令语言,我们可以直接在任何我们想要的地方加速代码,而无需更改整个代码。与 OpenMP 不同,此编程标准也适用于 GPU。

现在我的疑问在这里提出..

我们有用于加速的 OpenCL,现在是 OpenACC(非常易于使用,只需提供编译器提示即可)。对于宿主程序加速,我们可以简单地放置编译器指令,那么如果我们有内核呢?即现在我想为GPU(c语言)编写我的代码,我必须做什么?像 OpenCL 一样,我需要编写 example.c 和 example.cl 吗?那么需要添加OpenACC编译指令吗?或者以哪种方式?如果是这样,那么在这里使用 OpenACC 有什么用,因为我们正在编写 *.c 和 *.cl 文件,(我们需要检查所有内存限制以及所有用于编写 OpenCL 的内容,这是一项艰巨的工作)。

0 投票
1 回答
300 浏览

openacc - 主机数据应该分配给 create 和 pcreate 子句吗?

我目前正在研究openacc API,我想知道是否可以在设备上创建一个数组,而主机上没有任何相应的分配数组。

假设我想使用我的旧的cuda kernel,并且只通过openacc API. 我需要一些仅在设备上使用的 256 个元素的数组。如果我只在主机上声明我的指针而不分配,它们可能有顺序地址。

如果我present_or_create在这些指针上使用了一个子句,我的大小为 256 个元素,我会在设备上以不同的数组结尾吗?或者主机上的连续地址,加上我的数组的长度,会被认为是同一个数组的一部分?

这里是一个例子:指针 A 的地址是 0,指针 B 的地址是 4。

如果我pcreateA[0:256]and上执行两个操作B[0:256],因为主机上的数据范围是[0 , 1024]and [4 , 1028],我最终会在设备上使用两个不同的 256 个元素数组,还是最终只有一个具有 range 的数组[0 , 1028]

我是否必须首先在主机上分配我的两个数组以确保有两个不同的数组,或者这种方法应该可以正常工作吗?

0 投票
1 回答
174 浏览

openmp - openAcc : openMP 中是否有任何与 THREADPRIVATE 对应的指令

我正在尝试将openMp程序转换为openAcc程序。我遇到了threadprivate指令。如果openAcc中没有这样的指令,我需要知道openAcc中是否有这样的指令,如何处理这种情况..

0 投票
1 回答
606 浏览

parallel-processing - OpenAcc:如何并行化函数调用

我正在做一个项目,我正在尝试并行化应用程序。我正在尝试并行化一些函数,但问题是这些函数非常频繁地调用其他函数。循环仅用于计算,一个函数体中有许多循环。我知道 OpenACC 在其指令中不支持函数调用(仅内联调用),所以我想出了两种方法:a)要么将 OpenAcc 指令放在循环周围并获得所需的并行性并忽略函数调用(不仅仅是忽略它只是保持原样)(在每个函数体中都这样做)b)或者我可以将被调用的函数体放在调用函数中,然后在输入 acc 指令时多次创建线程的开销被最小化(通过包括一个块中的大量循环)。

我不知道如何处理这种情况。

总之,我需要找到一种有效的方法来并行化 OpenACC 中的函数调用

0 投票
2 回答
886 浏览

gpu - OpenACC 使用 math.h 库

嗨,我使用的是 CAPS OpenACC 编译器,但编译器似乎无法将函数链接到标准 math.h。

实际上,在我的例子中,我在加速循环中的代码中使用了 sqrt 函数。当我编译代码时,抛出以下错误:

有人得到一些解决方案吗?

谢谢!

0 投票
1 回答
184 浏览

gpu - openAcc 如何配置文件

嗨,我使用的是 CAPS OpenACC 编译器,但是当我尝试获得一些初步的配置文件结果时发生了一些意外。

起初,我通过声明 HMPPRT_LOG_LEVEL="info" 运行代码,这会生成一些带有时间戳的配置文件结果。

所以我猜内核执行时间计算为 2.614367-2.613485=0.000882 s。

但是当我声明 CUDA_PROFILE=1 时,会显示以下配置文件

所以我对这两个结果很困惑,这是真的吗???

有人得到一些解决方案吗?

谢谢!

0 投票
1 回答
361 浏览

openacc - 创建后的 pcopyin

我问这个问题是为了明确这两个子句在嵌套数据环境中的行为。

当我第一次阅读 openACC API 时,我想如果我有以下代码:

第一个子句在加速器上分配必要的内存,然后pcopyin子句将数据从主机复制到加速器(不分配)。

现在阅读第 2 版 API 的草稿,我的理解是第二个pcopyin子句完全没有做任何事情,因为数据已经在加速器上分配,并且由于数据已经存在于加速器上,所以不应该进行分配或传输. 是对的吗?

当我用这种示例测试 CAPS 编译器时,我认为我获得了预期的行为。是不是因为 API 中的一些歧义?对于 v2,如果我想做这类事情,我应该用更新替换我的 copyin 子句吗?

0 投票
1 回答
148 浏览

c++ - 使用函数参数重塑动态数组

今天我发现这是在一家公司给我的示例文件中:

调用:

我无法编译自己的类似示例,坦率地说,我什至从未见过有人采用动态数组并使用函数参数本身对其进行整形。

这是合法电话吗?


令我惊讶的是,在mySgemm他们访问的函数中ab,c作为双数组,所以数组本质上是被重塑的!?

0 投票
1 回答
289 浏览

cuda - openacc 在拆分大数据时说分段错误

由于我在 GPU 中有要 malloc 的大数据,因此我必须将其拆分。如下所示,将 temp1 和 temp2 从头到尾拆分一次:

但是当第一个循环完成并开始运行第二个循环时,我总是被告知分段错误。索引 var 应该是 [0:end-start] 吗?还是应该在循环完成时进行一些同步?

谢谢!!

0 投票
2 回答
1145 浏览

cuda - openACC:内存管理

我正在使用 caps openacc 编译器。我想知道我可以自己管理内存吗?

例如,带有 CUDA 的常规 openacc 代码是:

我想以这种方式改变