Как я могу получить количество ядер в устройстве cuda?
Я ищу функцию, которая подсчитывает количество ядер моего устройства cuda. Я знаю, что каждый микропроцессор имеет определенные ядра, а мое устройство cuda имеет 2 микропроцессора.
Я много искал, чтобы найти функцию свойства, которая подсчитывает количество ядер на микропроцессор, но я не мог. Я использую код ниже, но мне все еще нужно количество ядер?
- cuda 7.0
- язык программы C
- visual studio
код:
void printDevProp(cudaDeviceProp devProp)
{ printf("%sn", devProp.name);
printf("Major revision number: %dn", devProp.major);
printf("Minor revision number: %dn", devProp.minor);
printf("Total global memory: %u", devProp.totalGlobalMem);
printf(" bytesn");
printf("Number of multiprocessors: %dn", devProp.multiProcessorCount);
printf("Total amount of shared memory per block: %un",devProp.sharedMemPerBlock);
printf("Total registers per block: %dn", devProp.regsPerBlock);
printf("Warp size: %dn", devProp.warpSize);
printf("Maximum memory pitch: %un", devProp.memPitch);
printf("Total amount of constant memory: %un", devProp.totalConstMem);
return;
}
2 ответов
ядра на мультипроцессор-это единственная "недостающая" часть данных. Эти данные не предоставляются непосредственно в 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) cores = mp * 128;
else if (devProp.minor == 0) cores = mp * 64;
else printf("Unknown device type\n");
break;
case 7: // Volta
if (devProp.minor == 0) cores = mp * 64;
else printf("Unknown device type\n");
break;
default:
printf("Unknown device type\n");
break;
}
return cores;
}
(кодировка в браузере)
"ядра" немного маркетингового термина. Наиболее распространенной коннотацией, на мой взгляд, является приравнивание ее к единицам SP в SM. Вот смысл, который я здесь продемонстрировал. Я также опустил cc 1.X устройства из этого, поскольку эти типы устройств больше не поддерживаются в CUDA 7.0 и CUDA 7.5
возможно, это может помочь немного больше.
" есть библиотека helper_cuda.h который содержит процедуру _ConvertSMVer2Cores (int major, int minor), который принимает уровень вычислительных возможностей GPU и возвращает количество ядер (потоковых процессоров) в каждом SM или SMX" -от должность.