----------------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