From dd6a22f47de6479781a8e876fdfb02a9c59b5d9c Mon Sep 17 00:00:00 2001 From: kradchen Date: Mon, 30 Oct 2023 13:34:51 +0800 Subject: [PATCH] Add cuda compile define and cmake setting --- CMakeLists.txt | 10 +++++++++- src/CudaMatrix.cpp | 6 +++++- src/CudaMatrix.h | 4 ++-- src/Function.cpp | 6 +++++- src/Matrix.cpp | 5 ++++- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 835a70a..7ccf00e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,14 @@ project(Aurora) set(CMAKE_CXX_STANDARD 14) set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(Aurora_USE_CUDA ON) + +if (Aurora_USE_CUDA) set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc) enable_language(CUDA) find_package(CUDAToolkit REQUIRED) +add_definitions(-DUSE_CUDA) +endif(Aurora_USE_CUDA) find_package (OpenMP REQUIRED) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") @@ -30,13 +35,14 @@ target_include_directories(Aurora PUBLIC $) target_link_libraries(Aurora PUBLIC OpenMP::OpenMP_CXX) target_link_libraries(Aurora PUBLIC matio) - +if (Aurora_USE_CUDA) target_include_directories(Aurora PRIVATE ./src /usr/local/cuda/include) set_target_properties(Aurora PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_compile_options(Aurora PRIVATE $<$: -arch=sm_75 >) target_link_libraries(Aurora PRIVATE ${CUDA_RUNTIME_LIBRARY} CUDA::cufft CUDA::cudart) +endif(Aurora_USE_CUDA) find_package(GTest REQUIRED) INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS}) @@ -55,11 +61,13 @@ target_link_libraries(Aurora_Test PUBLIC OpenMP::OpenMP_CXX) target_link_libraries(Aurora_Test PUBLIC matio) target_link_libraries(Aurora_Test PUBLIC ${GTEST_BOTH_LIBRARIES} ) +if (Aurora_USE_CUDA) target_include_directories(Aurora_Test PRIVATE ./src /usr/local/cuda/include) set_target_properties(Aurora_Test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_compile_options(Aurora_Test PRIVATE $<$: -arch=sm_75 >) target_link_libraries(Aurora_Test PRIVATE ${CUDA_RUNTIME_LIBRARY} CUDA::cufft CUDA::cudart) +endif(Aurora_USE_CUDA) gtest_discover_tests(Aurora_Test ) #target_link_libraries(CreateMatchedFilter PRIVATE TBB::tbb) \ No newline at end of file diff --git a/src/CudaMatrix.cpp b/src/CudaMatrix.cpp index 682da72..9562f57 100644 --- a/src/CudaMatrix.cpp +++ b/src/CudaMatrix.cpp @@ -1,3 +1,4 @@ +#ifdef USE_CUDA #include "CudaMatrix.h" #include "Function.h" @@ -218,6 +219,7 @@ CudaMatrix CudaMatrix::block(int aDim,int aBeginIndex, int aEndIndex) const return CudaMatrix::fromRawData(dataOutput,getDimSize(0),dimLength,getDimSize(2),getValueType()); } case 2: + default: { int copySize = dimLength*sliceStride; cudaMemcpy(dataOutput, @@ -235,4 +237,6 @@ bool CudaMatrix::setBlockValue(int aDim,int aBeginIndx, int aEndIndex,float valu std::cerr<<"CudaMatrix block only support 1D-3D data!"< mInfo; }; } - +#endif // USE_CUDA #endif diff --git a/src/Function.cpp b/src/Function.cpp index 2f2957e..f16ed6a 100644 --- a/src/Function.cpp +++ b/src/Function.cpp @@ -13,7 +13,10 @@ #include #include #include + +#ifdef USE_CUDA #include +#endif namespace Aurora { @@ -26,9 +29,10 @@ namespace Aurora { void free(void* ptr){ mkl_free(ptr); } - +#ifdef USE_CUDA void gpuFree(void* ptr) { cudaFree(ptr); } +#endif } \ No newline at end of file diff --git a/src/Matrix.cpp b/src/Matrix.cpp index cee197a..0fe5884 100644 --- a/src/Matrix.cpp +++ b/src/Matrix.cpp @@ -17,7 +17,9 @@ #include "Eigen/src/Core/Matrix.h" #include "Function.h" +#ifdef USE_CUDA #include +#endif namespace Aurora{ typedef void(*CalcFuncD)(const MKL_INT n, const float a[], const MKL_INT inca, const float b[], @@ -394,6 +396,7 @@ namespace Aurora { return ret; } +#ifdef USE_CUDA CudaMatrix Matrix::toDeviceMatrix() const { float* deviceData = nullptr; @@ -401,7 +404,7 @@ namespace Aurora { cudaMemcpy(deviceData, mData.get(), sizeof(float) * getDataSize() * getValueType(), cudaMemcpyHostToDevice); return CudaMatrix::fromRawData(deviceData, mInfo[0], mInfo[1], mInfo[2], getValueType()); } - +#endif Matrix Matrix::New(float *data, const Matrix &shapeMatrix) { return New(data, shapeMatrix.getDimSize(0),