Skip to content

Commit 5fc53a6

Browse files
authored
[backport] Compile with CTK13. (dmlc#11610) (dmlc#11670)
1 parent 17f711a commit 5fc53a6

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

src/common/cuda_dr_utils.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@ CuDriverApi::CuDriverApi() {
2222
// similar to dlopen, but without the need to release a handle.
2323
auto safe_load = [](xgboost::StringView name, auto **fnptr) {
2424
cudaDriverEntryPointQueryResult status;
25+
#if (CUDA_VERSION / 1000) >= 13
26+
dh::safe_cuda(cudaGetDriverEntryPointByVersion(name.c_str(), reinterpret_cast<void **>(fnptr),
27+
12080, cudaEnablePerThreadDefaultStream,
28+
&status));
29+
#else
2530
dh::safe_cuda(cudaGetDriverEntryPoint(name.c_str(), reinterpret_cast<void **>(fnptr),
2631
cudaEnablePerThreadDefaultStream, &status));
32+
#endif // (CUDA_VERSION / 1000) >= 13
2733
CHECK(status == cudaDriverEntryPointSuccess) << name;
2834
CHECK(*fnptr);
2935
};

src/common/resource.cu

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2024, XGBoost Contributors
2+
* Copyright 2024-2025, XGBoost Contributors
33
*/
44
#include "device_helpers.cuh" // for CurrentDevice
55
#include "resource.cuh"
@@ -18,14 +18,26 @@ CudaMmapResource::CudaMmapResource(StringView path, std::size_t offset, std::siz
1818
}},
1919
n_{length} {
2020
auto device = dh::CurrentDevice();
21+
#if (CUDA_VERSION / 1000) >= 13
22+
cudaMemLocation loc;
23+
loc.type = cudaMemLocationTypeDevice;
24+
loc.id = device;
25+
#else
26+
auto loc = device;
27+
#endif // (CUDA_VERSION / 1000) >= 13
2128
dh::safe_cuda(
22-
cudaMemAdvise(handle_->base_ptr, handle_->base_size, cudaMemAdviseSetReadMostly, device));
23-
dh::safe_cuda(cudaMemAdvise(handle_->base_ptr, handle_->base_size,
24-
cudaMemAdviseSetPreferredLocation, device));
29+
cudaMemAdvise(handle_->base_ptr, handle_->base_size, cudaMemAdviseSetReadMostly, loc));
2530
dh::safe_cuda(
26-
cudaMemAdvise(handle_->base_ptr, handle_->base_size, cudaMemAdviseSetAccessedBy, device));
31+
cudaMemAdvise(handle_->base_ptr, handle_->base_size, cudaMemAdviseSetPreferredLocation, loc));
32+
dh::safe_cuda(
33+
cudaMemAdvise(handle_->base_ptr, handle_->base_size, cudaMemAdviseSetAccessedBy, loc));
34+
#if (CUDA_VERSION / 1000) >= 13
35+
dh::safe_cuda(
36+
cudaMemPrefetchAsync(handle_->base_ptr, handle_->base_size, loc, 0, dh::DefaultStream()));
37+
#else
2738
dh::safe_cuda(
2839
cudaMemPrefetchAsync(handle_->base_ptr, handle_->base_size, device, dh::DefaultStream()));
40+
#endif // (CUDA_VERSION / 1000) >= 13
2941
}
3042

3143
[[nodiscard]] void* CudaMmapResource::Data() {

tests/cpp/common/test_cuda_host_allocator.cu

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2024, XGBoost Contributors
2+
* Copyright 2024-2025, XGBoost Contributors
33
*/
44
#include <gtest/gtest.h>
55
#include <xgboost/context.h> // for Context
@@ -28,8 +28,16 @@ TEST(CudaHostMalloc, Managed) {
2828
std::vector<float, common::cuda_impl::ManagedAllocator<float>> vec;
2929
vec.resize(10);
3030
#if defined(__linux__)
31+
#if (CUDA_VERSION / 1000) >= 13
32+
cudaMemLocation loc;
33+
loc.type = cudaMemLocationTypeDevice;
34+
loc.id = 0;
35+
dh::safe_cuda(
36+
cudaMemPrefetchAsync(vec.data(), vec.size() * sizeof(float), loc, 0, dh::DefaultStream()));
37+
#else
3138
dh::safe_cuda(
3239
cudaMemPrefetchAsync(vec.data(), vec.size() * sizeof(float), 0, dh::DefaultStream()));
40+
#endif // (CUDA_VERSION / 1000) >= 13
3341
#endif
3442
dh::DefaultStream().Sync();
3543
}

0 commit comments

Comments
 (0)