web-dev-qa-db-ja.com

cudaデバイスのコア数を取得するにはどうすればよいですか?

Cudaデバイスのコア数をカウントする機能を探しています。各マイクロプロセッサには特定のコアがあり、私のcudaデバイスには2つのマイクロプロセッサがあります。

マイクロプロセッサあたりのコア数をカウントするプロパティ関数を見つけるためにたくさん検索しましたが、できませんでした。以下のコードを使用していますが、それでもコアの数が必要ですか?

  • cuda 7.0
  • プログラム言語C
  • ビジュアルスタジオ2013

コード:

void printDevProp(cudaDeviceProp devProp)
{   printf("%s\n", devProp.name);
printf("Major revision number:         %d\n", devProp.major);
printf("Minor revision number:         %d\n", devProp.minor);
printf("Total global memory:           %u", devProp.totalGlobalMem);
printf(" bytes\n");
printf("Number of multiprocessors:     %d\n", devProp.multiProcessorCount);
printf("Total amount of shared memory per block: %u\n",devProp.sharedMemPerBlock);
printf("Total registers per block:     %d\n", devProp.regsPerBlock);
printf("Warp size:                     %d\n", devProp.warpSize);
printf("Maximum memory pitch:          %u\n", devProp.memPitch);
printf("Total amount of constant memory:         %u\n",   devProp.totalConstMem);
return;
}
17
Alsphere

マルチプロセッサあたりのコアは、「欠けている」唯一のデータです。そのデータはcudaDeviceProp構造で直接提供されていませんが、 公開されたデータより公開されたデータdevProp.majorエントリとdevProp.minorエントリから、デバイスのCUDA計算機能を構成します。

このようなものはうまくいくはずです:

int getSPcores(cudaDeviceProp devProp)
{  
    int cores = 0;
    int mp = devProp.multiProcessorCount;
    switch (devProp.major){
     case 2: // Fermi
      if (devProp.minor == 1) cores = mp * 48;
      else cores = mp * 32;
      break;
     case 3: // Kepler
      cores = mp * 192;
      break;
     case 5: // Maxwell
      cores = mp * 128;
      break;
     case 6: // Pascal
      if ((devProp.minor == 1) || (devProp.minor == 2)) cores = mp * 128;
      else if (devProp.minor == 0) cores = mp * 64;
      else printf("Unknown device type\n");
      break;
     case 7: // Volta and Turing
      if ((devProp.minor == 0) || (devProp.minor == 5)) cores = mp * 64;
      else printf("Unknown device type\n");
      break;
     default:
      printf("Unknown device type\n"); 
      break;
      }
    return cores;
}

(ブラウザでコード化)

「コア」はマーケティング用語の少しです。私の意見で最も一般的な意味合いは、SMのSPユニットと同等にすることです。これは、ここで示した意味です。これから、cc 1.xデバイスも省略しました。これらのデバイスタイプは、CUDA 7.0およびCUDA 7.5ではサポートされなくなりました

17
Robert Crovella

Linuxでは、次のコマンドを実行して、CUDAコアの数を取得できます。

nvidia-settings -q CUDACores -t

このコマンドの出力をCで取得するには、 popen 関数を使用します。

5
Bas Van Assche

多分これはもう少し役立つかもしれません。

https://devtalk.nvidia.com/default/topic/470848/cuda-programming-and-performance/what-39-s-the-proper-way-to-detect-sp-cuda-cores- count-per-sm-/post/4414371 /#4414371

「GPUの計算機能レベルを取得し、各SMまたはSMXのコア(ストリームプロセッサ)の数を返すルーチン_ConvertSMVer2Cores(int major、int minor)を含むライブラリhelper_cuda.hがあります」-投稿から。

1
Vraj Pandya