From 8388040f18d5315cfddd4956bcd575f5d74ee49a Mon Sep 17 00:00:00 2001 From: Josh Romero Date: Fri, 23 Jul 2021 13:33:27 -0700 Subject: [PATCH] Limit managed memory usage to platforms that support it. Compile for cc75. --- CMakeLists.txt | 2 +- cuslines/cuslines.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 229ea23..ed4fe23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ endif() #decide whether to use CUDA or not #find_package(CUDAToolkit REQUIRED) if(NOT CUDA_COMPUTE_CAPABILITY) - set(CUDA_COMPUTE_CAPABILITY 70 80) + set(CUDA_COMPUTE_CAPABILITY 70 75 80) endif() #Find OpenMP diff --git a/cuslines/cuslines.cpp b/cuslines/cuslines.cpp index c190019..d614e33 100644 --- a/cuslines/cuslines.cpp +++ b/cuslines/cuslines.cpp @@ -141,8 +141,14 @@ class GPUTracker { //#pragma omp parallel for for (int n = 0; n < ngpus_; ++n) { CHECK_CUDA(cudaSetDevice(n)); - CHECK_CUDA(cudaMallocManaged(&dataf_d[n], sizeof(*dataf_d[n]) * dataf_info.size)); - CHECK_CUDA(cudaMemAdvise(dataf_d[n], sizeof(*dataf_d[n]) * dataf_info.size, cudaMemAdviseSetPreferredLocation, n)); + int managed_supported; + CHECK_CUDA(cudaDeviceGetAttribute(&managed_supported, cudaDevAttrConcurrentManagedAccess, n)); + if (managed_supported) { + CHECK_CUDA(cudaMallocManaged(&dataf_d[n], sizeof(*dataf_d[n]) * dataf_info.size)); + CHECK_CUDA(cudaMemAdvise(dataf_d[n], sizeof(*dataf_d[n]) * dataf_info.size, cudaMemAdviseSetPreferredLocation, n)); + } else { + CHECK_CUDA(cudaMalloc(&dataf_d[n], sizeof(*dataf_d[n]) * dataf_info.size)); + } CHECK_CUDA(cudaMalloc(&H_d[n], sizeof(*H_d[n]) * H_info.size)); CHECK_CUDA(cudaMalloc(&R_d[n], sizeof(*R_d[n]) * R_info.size)); CHECK_CUDA(cudaMalloc(&delta_b_d[n], sizeof(*delta_b_d[n]) * delta_b_info.size));