【发布时间】:2017-06-26 05:06:30
【问题描述】:
我是 cuda 的新手,所以我希望我的问题不是完全离题。 我想在全局设备内存上创建一个数组,但我只会知道它在我的主要功能中间有多大(但在我访问设备之前)。
因为我不知道我不能在我的代码之前声明的大小: 设备 myArr[]
所以我想在 main 中创建一个指针 d_myArr,然后使用 cudaMalloc(d_myArr, arrSize) 在设备上分配内存,但我从未真正在设备上声明变量。
我看不到将 d_Arr 发送到我的内核的理由,因为它只会存在于该内核中(我认为?),我只是希望该变量首先作为全局变量存在于我的设备上,并且可以被不同的内核访问。
我可以在 main 中声明一个设备变量吗?如:
int main(){
.
.
__device__ myArr[size];
.
.
}
如果是这样,它是否因某种原因而沮丧(因为我找不到这样做的人)。如果不允许这样做,我该怎么办?我看到有人提到 cudaMemcpyToSymbol,但我不知道它是否与我想要的完全相关,如果有人能准确解释如何使用它来实现我的需要,我会很高兴。
在一个附带问题上,我还有一个常量变量,我想在我的设备和主机上都存在。现在我只声明了两次,一次使用 device,一次没有,有没有更好的方法来做到这一点?
【问题讨论】: