Skip to content

Commit 4cb6ffe

Browse files
authored
GPU: Prevent CUDA 13 from breaking the GPUbenchmark
Some features are moved out from the `cudaDeviceProp` struct starting from CUDA 13.
1 parent 7948f41 commit 4cb6ffe

File tree

1 file changed

+89
-69
lines changed

1 file changed

+89
-69
lines changed

GPU/GPUbenchmark/cuda/Kernels.cu

Lines changed: 89 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -301,82 +301,102 @@ void printDeviceProp(int32_t deviceId)
301301
cudaDeviceProp props;
302302
GPUCHECK(cudaGetDeviceProperties(&props, deviceId));
303303

304-
std::cout << std::setw(w1) << "Name: " << props.name << std::endl;
305-
std::cout << std::setw(w1) << "pciBusID: " << props.pciBusID << std::endl;
306-
std::cout << std::setw(w1) << "pciDeviceID: " << props.pciDeviceID << std::endl;
307-
std::cout << std::setw(w1) << "pciDomainID: " << props.pciDomainID << std::endl;
308-
std::cout << std::setw(w1) << "multiProcessorCount: " << props.multiProcessorCount << std::endl;
309-
std::cout << std::setw(w1) << "maxThreadsPerMultiProcessor: " << props.maxThreadsPerMultiProcessor
310-
<< std::endl;
311-
std::cout << std::setw(w1) << "isMultiGpuBoard: " << props.isMultiGpuBoard << std::endl;
312-
std::cout << std::setw(w1) << "clockRate: " << (float)props.clockRate / 1000.0 << " Mhz" << std::endl;
313-
std::cout << std::setw(w1) << "memoryClockRate: " << (float)props.memoryClockRate / 1000.0 << " Mhz"
314-
<< std::endl;
315-
std::cout << std::setw(w1) << "memoryBusWidth: " << props.memoryBusWidth << std::endl;
316-
std::cout << std::setw(w1) << "clockInstructionRate: " << (float)props.clockRate / 1000.0
317-
<< " Mhz" << std::endl;
318-
std::cout << std::setw(w1) << "totalGlobalMem: " << std::fixed << std::setprecision(2)
319-
<< bytesToGB(props.totalGlobalMem) << " GB" << std::endl;
304+
int32_t clockRateKHz = 0;
305+
int32_t memoryClockRateKHz = 0;
306+
int32_t computeMode = 0;
307+
308+
#if (CUDART_VERSION >= 13000)
309+
GPUCHECK(cudaDeviceGetAttribute(&clockRateKHz, cudaDevAttrClockRate, deviceId));
310+
GPUCHECK(cudaDeviceGetAttribute(&memoryClockRateKHz, cudaDevAttrMemoryClockRate, deviceId));
311+
GPUCHECK(cudaDeviceGetAttribute(&computeMode, cudaDevAttrComputeMode, deviceId));
312+
#else
313+
clockRateKHz = props.clockRate;
314+
memoryClockRateKHz = props.memoryClockRate;
315+
computeMode = props.computeMode;
316+
cooperativeMultiDevice = props.cooperativeMultiDeviceLaunch;
317+
#endif
318+
std::cout << std::setw(w1) << "Name: " << props.name << std::endl;
319+
std::cout << std::setw(w1) << "pciBusID: " << props.pciBusID << std::endl;
320+
std::cout << std::setw(w1) << "pciDeviceID: " << props.pciDeviceID << std::endl;
321+
std::cout << std::setw(w1) << "pciDomainID: " << props.pciDomainID << std::endl;
322+
std::cout << std::setw(w1) << "multiProcessorCount: " << props.multiProcessorCount << std::endl;
323+
std::cout << std::setw(w1) << "maxThreadsPerMultiProcessor: " << props.maxThreadsPerMultiProcessor
324+
<< std::endl;
325+
std::cout << std::setw(w1) << "isMultiGpuBoard: " << props.isMultiGpuBoard << std::endl;
326+
327+
// Use the variables we populated above for the moved properties
328+
std::cout << std::setw(w1) << "clockRate: " << (float)clockRateKHz / 1000.0 << " Mhz" << std::endl;
329+
std::cout << std::setw(w1) << "memoryClockRate: " << (float)memoryClockRateKHz / 1000.0 << " Mhz"
330+
<< std::endl;
331+
332+
std::cout << std::setw(w1) << "memoryBusWidth: " << props.memoryBusWidth << std::endl;
333+
334+
// clockInstructionRate is just another name for clockRate in this context
335+
std::cout << std::setw(w1) << "clockInstructionRate: " << (float)clockRateKHz / 1000.0
336+
<< " Mhz" << std::endl;
337+
std::cout << std::setw(w1) << "totalGlobalMem: " << std::fixed << std::setprecision(2)
338+
<< bytesToGB(props.totalGlobalMem) << " GB" << std::endl;
320339
#if !defined(__CUDACC__)
321-
std::cout << std::setw(w1) << "maxSharedMemoryPerMultiProcessor: " << std::fixed << std::setprecision(2)
322-
<< bytesToconfig(props.sharedMemPerMultiprocessor) << " config" << std::endl;
340+
std::cout << std::setw(w1) << "maxSharedMemoryPerMultiProcessor: " << std::fixed << std::setprecision(2)
341+
<< bytesToconfig(props.sharedMemPerMultiprocessor) << " config" << std::endl;
323342
#endif
324343
#if defined(__HIPCC__)
325-
std::cout << std::setw(w1) << "maxSharedMemoryPerMultiProcessor: " << std::fixed << std::setprecision(2)
326-
<< bytesToconfig(props.maxSharedMemoryPerMultiProcessor) << " config" << std::endl;
344+
std::cout << std::setw(w1) << "maxSharedMemoryPerMultiProcessor: " << std::fixed << std::setprecision(2)
345+
<< bytesToconfig(props.maxSharedMemoryPerMultiProcessor) << " config" << std::endl;
327346
#endif
328-
std::cout << std::setw(w1) << "totalConstMem: " << props.totalConstMem << std::endl;
329-
std::cout << std::setw(w1) << "sharedMemPerBlock: " << (float)props.sharedMemPerBlock / 1024.0 << " config"
330-
<< std::endl;
331-
std::cout << std::setw(w1) << "canMapHostMemory: " << props.canMapHostMemory << std::endl;
332-
std::cout << std::setw(w1) << "regsPerBlock: " << props.regsPerBlock << std::endl;
333-
std::cout << std::setw(w1) << "warpSize: " << props.warpSize << std::endl;
334-
std::cout << std::setw(w1) << "l2CacheSize: " << props.l2CacheSize << std::endl;
335-
std::cout << std::setw(w1) << "computeMode: " << props.computeMode << std::endl;
336-
std::cout << std::setw(w1) << "maxThreadsPerBlock: " << props.maxThreadsPerBlock << std::endl;
337-
std::cout << std::setw(w1) << "maxThreadsDim.x: " << props.maxThreadsDim[0] << std::endl;
338-
std::cout << std::setw(w1) << "maxThreadsDim.y: " << props.maxThreadsDim[1] << std::endl;
339-
std::cout << std::setw(w1) << "maxThreadsDim.z: " << props.maxThreadsDim[2] << std::endl;
340-
std::cout << std::setw(w1) << "maxGridSize.x: " << props.maxGridSize[0] << std::endl;
341-
std::cout << std::setw(w1) << "maxGridSize.y: " << props.maxGridSize[1] << std::endl;
342-
std::cout << std::setw(w1) << "maxGridSize.z: " << props.maxGridSize[2] << std::endl;
343-
std::cout << std::setw(w1) << "major: " << props.major << std::endl;
344-
std::cout << std::setw(w1) << "minor: " << props.minor << std::endl;
345-
std::cout << std::setw(w1) << "concurrentKernels: " << props.concurrentKernels << std::endl;
346-
std::cout << std::setw(w1) << "cooperativeLaunch: " << props.cooperativeLaunch << std::endl;
347-
std::cout << std::setw(w1) << "cooperativeMultiDeviceLaunch: " << props.cooperativeMultiDeviceLaunch << std::endl;
347+
std::cout << std::setw(w1) << "totalConstMem: " << props.totalConstMem << std::endl;
348+
std::cout << std::setw(w1) << "sharedMemPerBlock: " << (float)props.sharedMemPerBlock / 1024.0 << " config"
349+
<< std::endl;
350+
std::cout << std::setw(w1) << "canMapHostMemory: " << props.canMapHostMemory << std::endl;
351+
std::cout << std::setw(w1) << "regsPerBlock: " << props.regsPerBlock << std::endl;
352+
std::cout << std::setw(w1) << "warpSize: " << props.warpSize << std::endl;
353+
std::cout << std::setw(w1) << "l2CacheSize: " << props.l2CacheSize << std::endl;
354+
355+
// Use the variable for computeMode
356+
std::cout << std::setw(w1) << "computeMode: " << computeMode << std::endl;
357+
358+
std::cout << std::setw(w1) << "maxThreadsPerBlock: " << props.maxThreadsPerBlock << std::endl;
359+
std::cout << std::setw(w1) << "maxThreadsDim.x: " << props.maxThreadsDim[0] << std::endl;
360+
std::cout << std::setw(w1) << "maxThreadsDim.y: " << props.maxThreadsDim[1] << std::endl;
361+
std::cout << std::setw(w1) << "maxThreadsDim.z: " << props.maxThreadsDim[2] << std::endl;
362+
std::cout << std::setw(w1) << "maxGridSize.x: " << props.maxGridSize[0] << std::endl;
363+
std::cout << std::setw(w1) << "maxGridSize.y: " << props.maxGridSize[1] << std::endl;
364+
std::cout << std::setw(w1) << "maxGridSize.z: " << props.maxGridSize[2] << std::endl;
365+
std::cout << std::setw(w1) << "major: " << props.major << std::endl;
366+
std::cout << std::setw(w1) << "minor: " << props.minor << std::endl;
367+
std::cout << std::setw(w1) << "concurrentKernels: " << props.concurrentKernels << std::endl;
348368
#if defined(__HIPCC__)
349-
std::cout << std::setw(w1) << "arch.hasGlobalInt32Atomics: " << props.arch.hasGlobalInt32Atomics << std::endl;
350-
std::cout << std::setw(w1) << "arch.hasGlobalFloatAtomicExch: " << props.arch.hasGlobalFloatAtomicExch
351-
<< std::endl;
352-
std::cout << std::setw(w1) << "arch.hasSharedInt32Atomics: " << props.arch.hasSharedInt32Atomics << std::endl;
353-
std::cout << std::setw(w1) << "arch.hasSharedFloatAtomicExch: " << props.arch.hasSharedFloatAtomicExch
354-
<< std::endl;
355-
std::cout << std::setw(w1) << "arch.hasFloatAtomicAdd: " << props.arch.hasFloatAtomicAdd << std::endl;
356-
std::cout << std::setw(w1) << "arch.hasGlobalInt64Atomics: " << props.arch.hasGlobalInt64Atomics << std::endl;
357-
std::cout << std::setw(w1) << "arch.hasSharedInt64Atomics: " << props.arch.hasSharedInt64Atomics << std::endl;
358-
std::cout << std::setw(w1) << "arch.hasDoubles: " << props.arch.hasDoubles << std::endl;
359-
std::cout << std::setw(w1) << "arch.hasWarpVote: " << props.arch.hasWarpVote << std::endl;
360-
std::cout << std::setw(w1) << "arch.hasWarpBallot: " << props.arch.hasWarpBallot << std::endl;
361-
std::cout << std::setw(w1) << "arch.hasWarpShuffle: " << props.arch.hasWarpShuffle << std::endl;
362-
std::cout << std::setw(w1) << "arch.hasFunnelShift: " << props.arch.hasFunnelShift << std::endl;
363-
std::cout << std::setw(w1) << "arch.hasThreadFenceSystem: " << props.arch.hasThreadFenceSystem << std::endl;
364-
std::cout << std::setw(w1) << "arch.hasSyncThreadsExt: " << props.arch.hasSyncThreadsExt << std::endl;
365-
std::cout << std::setw(w1) << "arch.hasSurfaceFuncs: " << props.arch.hasSurfaceFuncs << std::endl;
366-
std::cout << std::setw(w1) << "arch.has3dGrid: " << props.arch.has3dGrid << std::endl;
367-
std::cout << std::setw(w1) << "arch.hasDynamicParallelism: " << props.arch.hasDynamicParallelism << std::endl;
368-
std::cout << std::setw(w1) << "gcnArchName: " << props.gcnArchName << std::endl;
369+
std::cout << std::setw(w1) << "arch.hasGlobalInt32Atomics: " << props.arch.hasGlobalInt32Atomics << std::endl;
370+
std::cout << std::setw(w1) << "arch.hasGlobalFloatAtomicExch: " << props.arch.hasGlobalFloatAtomicExch
371+
<< std::endl;
372+
std::cout << std::setw(w1) << "arch.hasSharedInt32Atomics: " << props.arch.hasSharedInt32Atomics << std::endl;
373+
std::cout << std::setw(w1) << "arch.hasSharedFloatAtomicExch: " << props.arch.hasSharedFloatAtomicExch
374+
<< std::endl;
375+
std::cout << std::setw(w1) << "arch.hasFloatAtomicAdd: " << props.arch.hasFloatAtomicAdd << std::endl;
376+
std::cout << std::setw(w1) << "arch.hasGlobalInt64Atomics: " << props.arch.hasGlobalInt64Atomics << std::endl;
377+
std::cout << std::setw(w1) << "arch.hasSharedInt64Atomics: " << props.arch.hasSharedInt64Atomics << std::endl;
378+
std::cout << std::setw(w1) << "arch.hasDoubles: " << props.arch.hasDoubles << std::endl;
379+
std::cout << std::setw(w1) << "arch.hasWarpVote: " << props.arch.hasWarpVote << std::endl;
380+
std::cout << std::setw(w1) << "arch.hasWarpBallot: " << props.arch.hasWarpBallot << std::endl;
381+
std::cout << std::setw(w1) << "arch.hasWarpShuffle: " << props.arch.hasWarpShuffle << std::endl;
382+
std::cout << std::setw(w1) << "arch.hasFunnelShift: " << props.arch.hasFunnelShift << std::endl;
383+
std::cout << std::setw(w1) << "arch.hasThreadFenceSystem: " << props.arch.hasThreadFenceSystem << std::endl;
384+
std::cout << std::setw(w1) << "arch.hasSyncThreadsExt: " << props.arch.hasSyncThreadsExt << std::endl;
385+
std::cout << std::setw(w1) << "arch.hasSurfaceFuncs: " << props.arch.hasSurfaceFuncs << std::endl;
386+
std::cout << std::setw(w1) << "arch.has3dGrid: " << props.arch.has3dGrid << std::endl;
387+
std::cout << std::setw(w1) << "arch.hasDynamicParallelism: " << props.arch.hasDynamicParallelism << std::endl;
388+
std::cout << std::setw(w1) << "gcnArchName: " << props.gcnArchName << std::endl;
369389
#endif
370-
std::cout << std::setw(w1) << "isIntegrated: " << props.integrated << std::endl;
371-
std::cout << std::setw(w1) << "maxTexture1D: " << props.maxTexture1D << std::endl;
372-
std::cout << std::setw(w1) << "maxTexture2D.width: " << props.maxTexture2D[0] << std::endl;
373-
std::cout << std::setw(w1) << "maxTexture2D.height: " << props.maxTexture2D[1] << std::endl;
374-
std::cout << std::setw(w1) << "maxTexture3D.width: " << props.maxTexture3D[0] << std::endl;
375-
std::cout << std::setw(w1) << "maxTexture3D.height: " << props.maxTexture3D[1] << std::endl;
376-
std::cout << std::setw(w1) << "maxTexture3D.depth: " << props.maxTexture3D[2] << std::endl;
390+
std::cout << std::setw(w1) << "isIntegrated: " << props.integrated << std::endl;
391+
std::cout << std::setw(w1) << "maxTexture1D: " << props.maxTexture1D << std::endl;
392+
std::cout << std::setw(w1) << "maxTexture2D.width: " << props.maxTexture2D[0] << std::endl;
393+
std::cout << std::setw(w1) << "maxTexture2D.height: " << props.maxTexture2D[1] << std::endl;
394+
std::cout << std::setw(w1) << "maxTexture3D.width: " << props.maxTexture3D[0] << std::endl;
395+
std::cout << std::setw(w1) << "maxTexture3D.height: " << props.maxTexture3D[1] << std::endl;
396+
std::cout << std::setw(w1) << "maxTexture3D.depth: " << props.maxTexture3D[2] << std::endl;
377397
#if defined(__HIPCC__)
378-
std::cout << std::setw(w1) << "isLargeBar: " << props.isLargeBar << std::endl;
379-
std::cout << std::setw(w1) << "asicRevision: " << props.asicRevision << std::endl;
398+
std::cout << std::setw(w1) << "isLargeBar: " << props.isLargeBar << std::endl;
399+
std::cout << std::setw(w1) << "asicRevision: " << props.asicRevision << std::endl;
380400
#endif
381401

382402
int32_t deviceCnt;

0 commit comments

Comments
 (0)