diff options
| author | ruki <[email protected]> | 2025-08-13 23:16:16 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-13 23:16:16 +0800 |
| commit | 73909cc64059f30c56c3fb2d24451ccc60de3ebd (patch) | |
| tree | f8b6036dddf02e5059507f026c7c7dea51962f9e | |
| parent | 7ab1594d2578a0b31d0d09ed2ac813a8be0ee680 (diff) | |
| parent | 7d808cdf1fcae9115f461295cdb27d46d01d4057 (diff) | |
Merge pull request #6706 from xq114/dev
fix find_cudadevices for CUDA 13
| -rw-r--r-- | xmake/modules/lib/detect/find_cudadevices.lua | 6 | ||||
| -rw-r--r-- | xmake/scripts/find_cudadevices.cpp | 43 |
2 files changed, 39 insertions, 10 deletions
diff --git a/xmake/modules/lib/detect/find_cudadevices.lua b/xmake/modules/lib/detect/find_cudadevices.lua index 2b75d725a..c780bf311 100644 --- a/xmake/modules/lib/detect/find_cudadevices.lua +++ b/xmake/modules/lib/detect/find_cudadevices.lua @@ -130,7 +130,7 @@ function _find_devices(verbose, opt) local results, errors = try { function () - local args = { sourcefile, "-run", "-o", outfile , '-DPRINT_SUFFIX="' .. _PRINT_SUFFIX .. '"' } + local args = { sourcefile, "-run", "-lcuda", "-o", outfile , '-DPRINT_SUFFIX="' .. _PRINT_SUFFIX .. '"' } if opt.arch == "x86" then table.insert(args, "-m32") elseif opt.arch == "x64" or opt.arch == "x86_64" then @@ -247,6 +247,8 @@ function _order_by_flops(devices) , [80] = 64 , [86] = 128 , [87] = 128 + , [89] = 128 + , [90] = 128 } for _, dev in ipairs(devices) do @@ -254,7 +256,7 @@ function _order_by_flops(devices) if dev.major == 9999 and dev.minor == 9999 then sm_per_multiproc = 1 else - sm_per_multiproc = ngpu_arch_cores_per_sm[dev.major * 10 + dev.minor] or 64; + sm_per_multiproc = ngpu_arch_cores_per_sm[dev.major * 10 + dev.minor] or 128; end dev["$flops"] = dev.multiProcessorCount * sm_per_multiproc * dev.clockRate end diff --git a/xmake/scripts/find_cudadevices.cpp b/xmake/scripts/find_cudadevices.cpp index fd002cc84..c8f082555 100644 --- a/xmake/scripts/find_cudadevices.cpp +++ b/xmake/scripts/find_cudadevices.cpp @@ -1,4 +1,5 @@ #include <cuda_runtime.h> +#include <cuda.h> #include <stdio.h> #include <stdlib.h> @@ -19,6 +20,19 @@ inline void check(cudaError_t result) } } +inline void check_driver(CUresult result) +{ + static char unknown[] = "unknown"; + if (result != CUDA_SUCCESS) + { + const char *name = NULL, *msg = NULL; + cuGetErrorName(result, &name); + cuGetErrorString(result, &msg); + fprintf(stderr, PRINT_SUFFIX "%s (%s)", name ? name : unknown, msg ? msg : unknown); + exit(0); + } +} + inline void print_value(unsigned long long value) { printf("%llu", value); @@ -115,21 +129,16 @@ inline void print_device(int id) PRINT_PROPERTY(maxThreadsPerBlock); PRINT_PROPERTY(maxThreadsDim); PRINT_PROPERTY(maxGridSize); - PRINT_PROPERTY(clockRate); PRINT_PROPERTY(totalConstMem); PRINT_PROPERTY(major); PRINT_PROPERTY(minor); PRINT_PROPERTY(textureAlignment); PRINT_PROPERTY(texturePitchAlignment); - PRINT_BOOL_PROPERTY(deviceOverlap); PRINT_PROPERTY(multiProcessorCount); - PRINT_BOOL_PROPERTY(kernelExecTimeoutEnabled); PRINT_BOOL_PROPERTY(integrated); PRINT_BOOL_PROPERTY(canMapHostMemory); - PRINT_PROPERTY(computeMode); PRINT_PROPERTY(maxTexture1D); PRINT_PROPERTY(maxTexture1DMipmap); - PRINT_PROPERTY(maxTexture1DLinear); PRINT_PROPERTY(maxTexture2D); PRINT_PROPERTY(maxTexture2DMipmap); PRINT_PROPERTY(maxTexture2DLinear); @@ -156,7 +165,6 @@ inline void print_device(int id) PRINT_BOOL_PROPERTY(tccDriver); PRINT_PROPERTY(asyncEngineCount); PRINT_BOOL_PROPERTY(unifiedAddressing); - PRINT_PROPERTY(memoryClockRate); PRINT_PROPERTY(memoryBusWidth); PRINT_PROPERTY(l2CacheSize); PRINT_PROPERTY(maxThreadsPerMultiProcessor); @@ -167,18 +175,37 @@ inline void print_device(int id) PRINT_PROPERTY(regsPerMultiprocessor); PRINT_BOOL_PROPERTY(isMultiGpuBoard); PRINT_PROPERTY(multiGpuBoardGroupID); - PRINT_PROPERTY(singleToDoublePrecisionPerfRatio); PRINT_BOOL_PROPERTY(pageableMemoryAccess); PRINT_BOOL_PROPERTY(concurrentManagedAccess); PRINT_BOOL_PROPERTY(managedMemory); +#if MY_CUDA_VER < 1300 + PRINT_PROPERTY(clockRate); + PRINT_PROPERTY(memoryClockRate); + PRINT_BOOL_PROPERTY(deviceOverlap); + PRINT_BOOL_PROPERTY(kernelExecTimeoutEnabled); + PRINT_PROPERTY(computeMode); + PRINT_PROPERTY(maxTexture1DLinear); + PRINT_PROPERTY(singleToDoublePrecisionPerfRatio); +#else + int clockRate, memoryClockRate, computeMode; + check_driver(cuDeviceGetAttribute(&clockRate, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, id)); + check_driver(cuDeviceGetAttribute(&memoryClockRate, CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE, id)); + check_driver(cuDeviceGetAttribute(&computeMode, CU_DEVICE_ATTRIBUTE_COMPUTE_MODE, id)); + print_property("clockRate", clockRate); + print_property("memoryClockRate", memoryClockRate); + print_property("computeMode", computeMode); +#endif + #if MY_CUDA_VER >= 900 // Added in cuda 9.0 PRINT_BOOL_PROPERTY(computePreemptionSupported); PRINT_BOOL_PROPERTY(canUseHostPointerForRegisteredMem); PRINT_BOOL_PROPERTY(cooperativeLaunch); - PRINT_BOOL_PROPERTY(cooperativeMultiDeviceLaunch); PRINT_PROPERTY(sharedMemPerBlockOptin); +#if MY_CUDA_VER < 1300 + PRINT_BOOL_PROPERTY(cooperativeMultiDeviceLaunch); +#endif #endif #if MY_CUDA_VER >= 902 |
