/** * Prints the device properties. * @param file the file to print out the properties. */ void printDevProp(FILE* file) { cudaDeviceProp devProp = getDeviceProperties(); fprintf(file, "Major revision number: %d\n", devProp.major); fprintf(file, "Minor revision number: %d\n", devProp.minor); fprintf(file, "Name: %s\n", devProp.name); fprintf(file, "Total global memory: %lu\n", (unsigned long) devProp.totalGlobalMem); fprintf(file, "Total shared memory per block: %lu\n", (unsigned long) devProp.sharedMemPerBlock); fprintf(file, "Total registers per block: %d\n", devProp.regsPerBlock); fprintf(file, "Warp size: %d\n", devProp.warpSize); fprintf(file, "Maximum memory pitch: %lu\n", (unsigned long) devProp.memPitch); fprintf(file, "Maximum threads per block: %d\n", devProp.maxThreadsPerBlock); for (int i = 0; i < 3; ++i) fprintf(file, "Maximum dimension %d of block: %d\n", i, devProp.maxThreadsDim[i]); for (int i = 0; i < 3; ++i) fprintf(file, "Maximum dimension %d of grid: %d\n", i, devProp.maxGridSize[i]); fprintf(file, "Clock rate: %d\n", devProp.clockRate); fprintf(file, "Total constant memory: %lu\n", (unsigned long) devProp.totalConstMem); fprintf(file, "Texture alignment: %lu\n", (unsigned long) devProp.textureAlignment); fprintf(file, "Concurrent copy and execution: %s\n", (devProp.deviceOverlap ? "Yes" : "No")); fprintf(file, "Number of multiprocessors: %d\n", devProp.multiProcessorCount); fprintf(file, "Kernel execution timeout: %s\n", (devProp.kernelExecTimeoutEnabled ? "Yes" : "No")); fflush(file); return; }
const cudaDeviceProp& getCurrentDeviceProperties() { int device = 0; auto err = cudaGetDevice(&device); checkCuda(err, std::string("CUDA ERROR: cudaGetDeviceCount ")); return getDeviceProperties(device); }
/** * Returns the number of multiprocessors in the selected GPU. * @return the number of multiprocessors in the selected GPU. */ int getGPUMultiprocessors() { cudaDeviceProp prop = getDeviceProperties(); return prop.multiProcessorCount; }