OpenMPを用いてマルチGPU†OpenMPを用いて、複数のGPUによりCUDAで計算します。 デバイスの数を取得†まず、GPUの数がわからない場合は、以下のようにして取得できます。 int GPU_N; cudaGetDeviceCount(&GPU_N); printf("GPU Device Count:%d\n",GPU_N); OpenMPで計算†ここでは、GPUが二つの場合の例を示します。 float *d_f0,*d_f1; //スレッド数指定 #pragma omp parallel num_threads(2) #pragma omp sections { #pragma omp section //GPU0 { cudaSetDevice(0); cudaMalloc( (void**)&d_f0, sizeof(float)*512); //処理1(GPU0) #pragma omp barrier //処理2(GPU0) #pragma omp barrier //処理3(GPU0) } #pragma omp section //GPU1 { cudaSetDevice(1); cudaMalloc( (void**)&d_f1, sizeof(float)*512); //処理1(GPU1) #pragma omp barrier //処理2(GPU1) #pragma omp barrier //処理3(GPU1) } } ただし、確保したメモリへのポインタは確保したGPUのみで使いましょう。 他の方法†NVIDIA SDKにSimple multi-GPUというサンプルがあるのでOpenMP以外の場合はそちらも参考にしましょう。 |