【发布时间】:2013-03-22 02:28:28
【问题描述】:
----------------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的多次启动期间保留它。仅在首次启动mykernel时调用cudaMalloc并将指针传递给mykernel是否可以?或者我应该使用__device__限定符?XX在四个线程中使用,所以我在文件a.c中将其声明为全局变量。多个cudaMalloc和XX是否正确,或者我应该使用variable *xx[4]之类的数组?
【问题讨论】:
-
不要在自己的代码中使用
cuStartThread()。
标签: cuda qualifiers