----------------a.c---------------------
variable *XX;
func1(){
for(...){
for(i = 0; i < 4; i++)
cutStartThread(func2,args)
}
}
---------------b.cu-------------------
func2(args){
cudaSetDevice(i);
xx = cudaMalloc();
mykernel<<<...>>>(xx);
}
--------------------------------------
最近,我想为我的程序使用多个 GPU 设备。我的节点上有四张 Tesla C2075 卡。我使用四个线程来管理四个 GPU。更重要的是,每个线程中的内核都会被启动多次。一个简单的伪代码如上。我有两个问题:
变量
XX
是一个很长的字符串,在内核中是只读的。我想在mykernel
. 是否可以仅在 首次启动时调用cudaMalloc
并将指针传递给?或者我应该使用限定符?mykernel
mykernel
__device__
XX
在四个线程中使用,因此我将其声明为 file 中的全局变量a.c
。cudaMalloc
是正确的倍数XX
还是应该使用数组,例如variable *xx[4]
?