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

2024-05-23 17:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个功能,计数我的cuda设备的核心数。我知道每个微处理器都有特定的内核,我的cuda设备有两个微处理器。

我搜索了很多,找到了一个属性函数,可以计算每个微处理器的核数,但我不能。我使用下面的代码,但我仍然需要核数?

  • 库达7.0
  • 程序语言C
  • visual studio 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;
}

Tags: of代码功能numberrevisionblockamountcuda
3条回答

每个多处理器的核心是唯一“丢失”的数据。该数据不是在cudaDeviceProp结构中直接提供的,但可以根据devProp.majordevProp.minor条目中的published datamore published data来推断,这两个条目共同构成了设备的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和cuda7.5中不再受支持

也许这能帮上忙。

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

“有一个library helper_cuda.h包含一个例程 _ConvertSMVer2Cores(int major,int minor)采用计算能力级别 并返回每个SM或SMX中的核心(流处理器)数。” -从岗位上。

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

nvidia-settings -q CUDACores -t

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

相关问题 更多 >