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.
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?
Code:
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; }
If you have the nvidia-settings utilities installed, you can query the number of CUDA cores of your gpus by running nvidia-settings -q CUDACores -t .
To open it, press Windows+R, type “dxdiag” into the Run dialog that appears, and press Enter. Click the “Display” tab and look at the “Name” field in the “Device” section. Other statistics, such as the amount of video memory (VRAM) built into your GPU, are also listed here.
CUDA Streaming Multiprocessor executes threads in warps (32 threads) There is a maximum of 1024 threads per block (for our GPU) There is a maximum of 1536 threads per multiprocessor (for our GPU)
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.
Something like this should work:
#include "cuda_runtime_api.h" // you must first call the cudaGetDeviceProperties() function, then pass // the devProp structure returned to this function: 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; case 8: // Ampere if (devProp.minor == 0) cores = mp * 64; else if (devProp.minor == 6) cores = mp * 128; else printf("Unknown device type\n"); break; default: printf("Unknown device type\n"); break; } return cores; }
(coded in browser)
"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
A pythonic version is here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With