From cf3f919f9cf4ad177383d11e4e329a2406b2ad56 Mon Sep 17 00:00:00 2001 From: pelesh Date: Thu, 29 May 2025 22:49:32 -0400 Subject: [PATCH] Fix memory access errors in CPU build. --- resolve/vector/Vector.cpp | 4 ++-- tests/functionality/CMakeLists.txt | 4 ++-- tests/functionality/testKlu.cpp | 5 +---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/resolve/vector/Vector.cpp b/resolve/vector/Vector.cpp index 368bbe131..d83abaa1e 100644 --- a/resolve/vector/Vector.cpp +++ b/resolve/vector/Vector.cpp @@ -38,8 +38,8 @@ namespace ReSolve { namespace vector { */ Vector::~Vector() { - if (owns_cpu_data_) delete [] h_data_; - if (owns_gpu_data_) mem_.deleteOnDevice(d_data_); + if (owns_cpu_data_ && h_data_) delete [] h_data_; + if (owns_gpu_data_ && d_data_) mem_.deleteOnDevice(d_data_); } diff --git a/tests/functionality/CMakeLists.txt b/tests/functionality/CMakeLists.txt index e3d39f7c4..92d389fc6 100644 --- a/tests/functionality/CMakeLists.txt +++ b/tests/functionality/CMakeLists.txt @@ -112,8 +112,8 @@ add_test(NAME rand_gmres_test COMMAND $) if(RESOLVE_USE_KLU) # Using KLU as refactorization solver - add_test(NAME klu_klu_test COMMAND $ "${test_data_dir}" "-d" "${test_data_dir}") - add_test(NAME klu_klu_ir_test COMMAND $ "${test_data_dir}" "-d" "${test_data_dir}" "-i") + add_test(NAME klu_klu_test COMMAND $ "-d" "${test_data_dir}") + add_test(NAME klu_klu_ir_test COMMAND $ "-d" "${test_data_dir}" "-i") # CUDA-SDK specific tests if(RESOLVE_USE_CUDA) diff --git a/tests/functionality/testKlu.cpp b/tests/functionality/testKlu.cpp index e12a559d3..c5ac880e0 100644 --- a/tests/functionality/testKlu.cpp +++ b/tests/functionality/testKlu.cpp @@ -95,7 +95,6 @@ int runTest(int argc, char *argv[], std::string& solver_name) return -1; } ReSolve::matrix::Csr* A = ReSolve::io::createCsrFromFile(mat1); - A->syncData(ReSolve::memory::DEVICE); mat1.close(); // Read first rhs vector @@ -108,7 +107,6 @@ int runTest(int argc, char *argv[], std::string& solver_name) real_type* rhs = ReSolve::io::createArrayFromFile(rhs1_file); vector_type vec_rhs(A->getNumRows()); vec_rhs.copyDataFrom(rhs, ReSolve::memory::HOST, ReSolve::memory::HOST); - vec_rhs.syncData(ReSolve::memory::DEVICE); rhs1_file.close(); // Allocate the solution vector @@ -162,7 +160,6 @@ int runTest(int argc, char *argv[], std::string& solver_name) return -1; } ReSolve::io::updateMatrixFromFile(mat2, A); - A->syncData(ReSolve::memory::DEVICE); mat2.close(); // Load the second rhs vector @@ -174,7 +171,7 @@ int runTest(int argc, char *argv[], std::string& solver_name) } ReSolve::io::updateArrayFromFile(rhs2_file, &rhs); rhs2_file.close(); - vec_rhs.copyDataFrom(rhs, ReSolve::memory::HOST, ReSolve::memory::DEVICE); + vec_rhs.copyDataFrom(rhs, ReSolve::memory::HOST, ReSolve::memory::HOST); status = KLU.refactorize(); error_sum += status;