如何获得cuda设备中的核心数? [英] How can I get number of Cores in cuda device?
问题描述
我正在寻找一个函数来计算我的cuda设备的核心数。我知道每个微处理器都有特定的内核,而我的cuda设备有两个微处理器。
I am looking for a function that count number of core of my cuda device. I know each microprocessor have specific cores, and my cuda device has 2 microprocessors.
我搜索了很多,找到一个属性函数来计算每个微处理器的内核数, 't。我使用下面的代码,但我仍然需要核心数量?
I searched a lot to find a property function that count number of cores per microprocessor but I couldn't. I use the code below but I still need number of cores?
- 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;
}
推荐答案
只有丢失的数据。该数据不是直接在 cudaDeviceProp
结构中提供的,但可以基于发布的数据和 devProp.major 和 devProp.minor
条目中的更多发布数据一起构成设备的CUDA 计算能力
The cores per multiprocessor is the only "missing" piece of data. That data is not provided directly in the cudaDeviceProp
structure, but it can be inferred based on published data and more published data from the devProp.major
and devProp.minor
entries, which together make up the CUDA compute capability of the device.
这样应该可以工作:
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;
default:
printf("Unknown device type\n");
break;
}
return cores;
}
(在浏览器中编码)
核心是一个营销术语。我认为最常见的内涵是把它与SM中的SP单位相等。这就是我在这里所说的意思。我也省略了cc 1.x设备,因为这些设备类型不再支持CUDA 7.0和CUDA 7.5
"cores" is a bit of a marketing term. The most common connotation in my opinion is to equate it with SP units in the SM. That is the meaning I have demonstrated here. I've also omitted cc 1.x devices from this, as those device types are no longer supported in CUDA 7.0 and CUDA 7.5
这篇关于如何获得cuda设备中的核心数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!