Áttekintés
A CUDA programok futtatásakor néha nem árt tisztában lenni azzal, hogy milyen GPU-n is futtatjuk a programunkat. Ehhez különböző lekérdező függvények segítségével deríthetjük ki a GPU-nk tulajdonságait, és paramétereit.
Az első dolog amit érdemes lekérdezni, az a paraméterek száma. Ehhez használhatjuk a cudaGetDeviceCount(...) függvényt az alábbi módon.
int count;
cudaGetDeviceCount( &count );
A függvény bemenetül egy referenciát vár egy int változóra. A változó értékébe pedig beleteszi az elérhető CUDA GPU-k számát.
Ha tudjuk hány GPU van as zámítógépben, akkor részletesebb információkat is kérhetünk róluk. Ehhez használhatjuk a cudaGetDeviceProperties(...) függvényt.
cudaDeviceProp prop;
cudaGetDeviceProperties( &prop, i );
Ahogy láthatjuk a kódban is a függvény két paramétert vár. Az első egy referencia egy cudaDeviceProp típusú struktúrára. Ebben fogjuk visszakapni a paramétereket. A másik paraméter pedig annak a GPU-nak a sorszáma (0-tól kezdődően), amit le akarunk kérdezni.
Ha a lekérdezés kész, akkor a struktúrából kiolvashatjuka GPU paramétereit.
printf( " --- General Information for device %d ---\n", i );
printf( "Name: %s\n", prop.name );
printf( "Compute capability: %d.%d\n", prop.major, prop.minor );
printf( "Clock rate: %d\n", prop.clockRate );
printf( "Device copy overlap: " );
if (prop.deviceOverlap)
printf( "Enabled\n" );
else
printf( "Disabled\n");
printf( "Kernel execution timeout : " );
if (prop.kernelExecTimeoutEnabled)
printf( "Enabled\n" );
else
printf( "Disabled\n" );
printf( " --- Memory Information for device %d ---\n", i );
printf( "Total global mem: %ld\n", prop.totalGlobalMem );
printf( "Total constant Mem: %ld\n", prop.totalConstMem );
printf( "Max mem pitch: %ld\n", prop.memPitch );
printf( "Texture Alignment: %ld\n", prop.textureAlignment );
printf( " --- MP Information for device %d ---\n", i );
printf( "Multiprocessor count: %d\n",
prop.multiProcessorCount );
printf( "Shared mem per mp: %ld\n", prop.sharedMemPerBlock );
printf( "Registers per mp: %d\n", prop.regsPerBlock );
printf( "Threads in warp: %d\n", prop.warpSize );
printf( "Max threads per block: %d\n",
prop.maxThreadsPerBlock );
printf( "Max thread dimensions: (%d, %d, %d)\n",
prop.maxThreadsDim[0], prop.maxThreadsDim[1],
prop.maxThreadsDim[2] );
printf( "Max grid dimensions: (%d, %d, %d)\n",
prop.maxGridSize[0], prop.maxGridSize[1],
prop.maxGridSize[2] );