----------------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 デバイスを使用したいと考えています。私のノードには 4 枚の Tesla C2075 カードがあります。4 つのスレッドを使用して 4 つの GPU を管理します。さらに、各スレッドのカーネルは数回起動されます。上記のような単純な擬似コード。2 つの質問があります。
変数
XX
は非常に長い文字列で、カーネルでのみ読み取られます。の複数回の起動中にそれを保持したいmykernel
。が最初に起動されたときだけにcudaMalloc
ポインタを呼び出して渡すことはできますか? または、修飾子を使用する必要がありますか?mykernel
mykernel
__device__
XX
は 4 つのスレッドで使用されるため、 file でグローバル変数として宣言しますa.c
。の倍数cudaMalloc
はXX
正しいですか、または次のような配列を使用する必要がありますvariable *xx[4]
か?