----------------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。更重要的是,每个线程中的内核都会多次启动。一个简单的伪代码如上。我有两个问题:如何在多个内核和多个GPU中共享全局内存?
可变
XX
是一个很长的字符串,只有在内核中读取。我想在mykernel
的多次发布期间保留它。只有在mykernel
第一次启动时才可以致电cudaMalloc
并将指针传递给mykernel
?或者我应该使用__device__
限定符?XX
在四个线程中使用,所以我将其声明为文件a.c
中的全局变量。XX
的多个cudaMalloc
是否正确,还是应该使用数组,例如variable *xx[4]
?
请勿在自己的代码中使用'cuStartThread()'。 – talonmies 2013-03-22 06:49:16