gpt4 book ai didi

c - openACC 内核中的所有线路总是在 GPU 上工作吗?

转载 作者:行者123 更新时间:2023-11-30 15:48:05 24 4
gpt4 key购买 nike

我想知道一些与内核结构相关的东西。难道内核中的每一行都不能在 GPU 上工作吗?

例如我有这个代码:

#pragma acc kernels copy(a[0:n],b[0:n])
{
#pragma acc loop
for (i = 0; i < n; i++)
a[i] = i+10;
a[1] = 10;
a[3] = 5;
#pragma acc loop
for (i = 0; i < n; i++)
b[i] = i+20;
}

另外acc并行结构的情况也是一样吗?

最佳答案

引用规范,关于内核构造:

The compiler will break the code in the kernels region into a sequence of accelerator kernels. Typically, each loop nest will be a distinct kernel. When the program encounters a kernels construct, it will launch the sequence of kernels in order on the device.

所以顺序

a[1] = 10;
a[3] = 5;

您放在两个循环之间的内容可以在设备上执行。问题是,由于此代码不在循环中,OpenACC 编译器必须创建一个“假”循环,仅进行一次迭代才能在 GPU 上执行它。由于执行此操作通常速度较慢,因此某些 OpenACC 编译器更喜欢在下载数据后在主机上执行此类连续行。

对于并行部分,答案更简单:所有代码始终在设备上执行。

关于c - openACC 内核中的所有线路总是在 GPU 上工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com