如何获得cuda设备中的核心数量?

Als*_*ere 16 c cuda nvidia

我正在寻找一个计算我的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;
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*lla 16

每个多处理器的核心是唯一"缺失"的数据.该数据不是直接在cudaDeviceProp结构中提供的,但可以根据发布的数据和来自和条目的更多发布数据来推断,这些数据共同构成了设备的CUDA 计算能力.devProp.majordevProp.minor

这样的事情应该有效:

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) 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;
}
Run Code Online (Sandbox Code Playgroud)

(在浏览器中编码)

"核心"是一个营销术语.我认为最常见的含义是将其与SM中的SP单位等同起来.这就是我在这里所展示的意义.我也省略了cc 1.x设备,因为CUDA 7.0和CUDA 7.5不再支持这些设备类型

  • 我在答案(点击它!)中用"已发布数据"字样链接的文档解释了这些数字.这不是一句话,所以你需要阅读几个部分/段落.[这里]描述了32和48号码(http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capability-2-x),表示192号码[这里](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capability-3-0)并且[这里]显示了128号码(http:// docs .nvidia.com/CUDA/CUDA-C的编程导/ index.html中#计算-能力-5-X). (3认同)

小智 5

在linux中,您可以运行以下命令来获取CUDA内核数:

nvidia-settings -q CUDACores -t
Run Code Online (Sandbox Code Playgroud)

要在C语言中获取此命令的输出,请使用popen函数。