diff --git a/CMakeLists.txt b/CMakeLists.txt index 06c0cff61..585314c27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set(PROJECT_VERSION_BUILD dev) # Append local cmake module path list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cpp/cmake/modules") -project(libcucim VERSION ${VERSION} DESCRIPTION "libcucim" LANGUAGES CXX CUDA) +project(libcucim VERSION ${VERSION} DESCRIPTION "libcucim" LANGUAGES CXX) ################################################################################ # Include utilities @@ -62,19 +62,7 @@ endif () find_package(CUDAToolkit REQUIRED) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CUDA_STANDARD 17) # Clion issue: https://youtrack.jetbrains.com/issue/CPP-19165 (fixed) -set(CMAKE_CUDA_STANDARD_REQUIRED YES) set(CMAKE_CXX_STANDARD_REQUIRED YES) -cucim_define_cuda_architectures(60;70;75;80;86) -# https://github.com/Kitware/CMake/blob/master/Modules/Compiler/NVIDIA-CUDA.cmake#L11 -# https://gitlab.kitware.com/cmake/cmake/-/issues/19017 -# For CUDA >= 10.2, we cannot use --compiler-options as '-forward-unknown-to-host-compiler' wouldbe added by default to nvcc options. -# For the reason, we add "${CMAKE_CXX_FLAGS}" instead of "--compiler-options ${CMAKE_CXX_FLAGS}" here. -# ==> We changed to use "${CMAKE_CUDA_FLAGS}" instead of "${CMAKE_CXX_FLAGS}" ${CMAKE_CXX_FLAGS} can have wrong options such as '-march=nocona' -set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -use_fast_math -Xptxas=-v") -set(CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -G") -set(CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -lineinfo") -set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "${CMAKE_CUDA_FLAGS_RELWITHDEBINFO} -lineinfo") # Include CUDA headers explicitly for VSCode intelli-sense include_directories(AFTER SYSTEM ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) @@ -113,14 +101,23 @@ option(CUCIM_SUPPORT_NVTX "Support NVTX" ON) # whether added before or after this command is invoked, and for the ones in sub-directories added after. add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) # TODO: create two library, one with CXX11 ABI and one without it. +################################################################################ +# Define basic dependencies +################################################################################ +# Include pthread +# (https://cmake.org/cmake/help/v3.18/module/FindThreads.html) +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG TRUE) +find_package(Threads REQUIRED) + ################################################################################ # Define dependencies ################################################################################ superbuild_depend(fmt) #superbuild_depend(boost) superbuild_depend(abseil) -superbuild_depend(rmm) # this imports googletest internally -#superbuild_depend(googletest) +# superbuild_depend(rmm) # this imports googletest internally +superbuild_depend(googletest) superbuild_depend(googlebenchmark) superbuild_depend(openslide) superbuild_depend(catch2) @@ -156,13 +153,8 @@ configure_file(${CMAKE_CURRENT_LIST_DIR}/examples/cpp/CMakeLists.txt.examples.re ################################################################################ set(INSTALL_TARGETS ${CUCIM_PACKAGE_NAME} -# ${CUCIM_PACKAGE_NAME}-header-only -# rmm fmt-header-only -# spdlog_header_only # required by rmm cucim_benchmarks -# cufile_stub -# cucim_tests ) install(TARGETS ${INSTALL_TARGETS} diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index d7f9edcf1..0b6fa8d42 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -18,18 +18,12 @@ ################################################################################ add_executable(cucim_benchmarks main.cpp config.h) -#set_source_files_properties(main.cpp PROPERTIES LANGUAGE CUDA) # failed with CLI11 library set_target_properties(cucim_benchmarks PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cucim_benchmarks PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` @@ -63,11 +57,6 @@ set_target_properties(cucim_primitives_benchmarks CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cucim_primitives_benchmarks PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index fc139eb23..f6670c982 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -100,7 +100,7 @@ add_library(${CUCIM_PACKAGE_NAME} src/io/format/image_format.cpp src/logger/logger.cpp src/logger/timer.cpp - src/memory/memory_manager.cu + src/memory/memory_manager.cpp src/plugin/image_format.cpp src/plugin/plugin_config.cpp src/profiler/profiler.cpp @@ -114,17 +114,12 @@ set_target_properties(${CUCIM_PACKAGE_NAME} CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION} ) # Note: Looks like the following line causes error on CMake 3.18.4 (it is working on 3.18.2). Keeping it for now. -set(CUCIM_REQUIRED_FEATURES cxx_std_17 cuda_std_17) +set(CUCIM_REQUIRED_FEATURES cxx_std_17) target_compile_features(${CUCIM_PACKAGE_NAME} PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` target_compile_options(${CUCIM_PACKAGE_NAME} @@ -150,13 +145,7 @@ target_link_libraries(${CUCIM_PACKAGE_NAME} PUBLIC ${CMAKE_DL_LIBS} $ -# $ -# $ -# $ $ -## $ - # $ -## $ PRIVATE CUDA::cudart deps::abseil @@ -179,8 +168,6 @@ target_include_directories(${CUCIM_PACKAGE_NAME} PUBLIC $ $ -# $ # for GDS header -# $ $ $ # for 3rdparty libraries such as dlpack, nvtx3, and fmt PRIVATE diff --git a/cpp/cmake/deps/nvtx3.cmake b/cpp/cmake/deps/nvtx3.cmake index bc56c6ca8..f079181ab 100644 --- a/cpp/cmake/deps/nvtx3.cmake +++ b/cpp/cmake/deps/nvtx3.cmake @@ -30,6 +30,9 @@ if (NOT TARGET deps::nvtx3) # Create shared library cucim_set_build_shared_libs(ON) # since nvtx3 is header-only library, this may not needed. + set(BUILD_TESTS OFF) + set(BUILD_BENCHMARKS OFF) + add_subdirectory(${deps-nvtx3_SOURCE_DIR}/cpp ${deps-nvtx3_BINARY_DIR} EXCLUDE_FROM_ALL) cucim_restore_build_shared_libs() diff --git a/cpp/include/cucim/io/device.h b/cpp/include/cucim/io/device.h index c1bd03784..7e1e5c7cc 100644 --- a/cpp/include/cucim/io/device.h +++ b/cpp/include/cucim/io/device.h @@ -38,6 +38,7 @@ class EXPORT_VISIBLE Device public: explicit Device(); Device(const Device& device); + Device& operator=(const Device& device) = default; explicit Device(const std::string& device_name); Device(const char* device_name); Device(DeviceType type, DeviceIndex index); diff --git a/cpp/include/cucim/memory/memory_manager.h b/cpp/include/cucim/memory/memory_manager.h index d2246e9e1..47a567207 100644 --- a/cpp/include/cucim/memory/memory_manager.h +++ b/cpp/include/cucim/memory/memory_manager.h @@ -77,7 +77,7 @@ CUCIM_API void get_pointer_attributes(PointerAttributes& attr, const void* ptr); * @param dst_device Destination device of the memory. * @return `true` if succeed. */ -bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& dst_device); +CUCIM_API bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& dst_device); /** * @brief Move device memory of `size` bytes to a new memory in `out_device`. @@ -90,7 +90,7 @@ bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& * @param dst_device Destination device of the memory. * @return `true` if succeed. */ -bool move_raster_from_device(void** target, size_t size, const cucim::io::Device& dst_device); +CUCIM_API bool move_raster_from_device(void** target, size_t size, const cucim::io::Device& dst_device); } // namespace cucim::memory #endif // CUCIM_MEMORY_MANAGER_H diff --git a/cpp/plugins/cucim.kit.cumed/CMakeLists.txt b/cpp/plugins/cucim.kit.cumed/CMakeLists.txt index 1415ade8d..3917bb571 100644 --- a/cpp/plugins/cucim.kit.cumed/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cumed/CMakeLists.txt @@ -28,7 +28,7 @@ file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/VERSION VERSION) # Append local cmake module path list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules") -project(cumed VERSION ${VERSION} DESCRIPTION "cumed" LANGUAGES CXX CUDA) +project(cumed VERSION ${VERSION} DESCRIPTION "cumed" LANGUAGES CXX) set(CUCIM_PLUGIN_NAME "cucim.kit.cumed") ################################################################################ @@ -72,19 +72,7 @@ endif() find_package(CUDAToolkit REQUIRED) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CUDA_STANDARD 17) # Clion issue: https://youtrack.jetbrains.com/issue/CPP-19165 (fixed) -set(CMAKE_CUDA_STANDARD_REQUIRED YES) set(CMAKE_CXX_STANDARD_REQUIRED YES) -cucim_define_cuda_architectures(60;70;75;80;86) -# https://github.com/Kitware/CMake/blob/master/Modules/Compiler/NVIDIA-CUDA.cmake#L11 -# https://gitlab.kitware.com/cmake/cmake/-/issues/19017 -# For CUDA >= 10.2, we cannot use --compiler-options as '-forward-unknown-to-host-compiler' would be added by default to nvcc options. -# For the reason, we add "${CMAKE_CXX_FLAGS}" instead of "--compiler-options ${CMAKE_CXX_FLAGS}" here. -# ==> We changed to use "${CMAKE_CUDA_FLAGS}" instead of "${CMAKE_CXX_FLAGS}" ${CMAKE_CXX_FLAGS} can have wrong options such as '-march=nocona' -set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -use_fast_math -Xptxas=-v") -set(CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -G") -set(CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -lineinfo") -set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "${CMAKE_CUDA_FLAGS_RELWITHDEBINFO} -lineinfo") # Include CUDA headers explicitly for VSCode intelli-sense include_directories(AFTER SYSTEM ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) @@ -169,11 +157,6 @@ set_target_properties(${CUCIM_PLUGIN_NAME} CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION} ) diff --git a/cpp/plugins/cucim.kit.cumed/benchmarks/CMakeLists.txt b/cpp/plugins/cucim.kit.cumed/benchmarks/CMakeLists.txt index 43044a9b5..ade52265f 100644 --- a/cpp/plugins/cucim.kit.cumed/benchmarks/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cumed/benchmarks/CMakeLists.txt @@ -17,18 +17,12 @@ # Add executable: cumed_benchmarks ################################################################################ add_executable(cumed_benchmarks main.cpp config.h) -#set_source_files_properties(main.cpp PROPERTIES LANGUAGE CUDA) # failed with CLI11 library set_target_properties(cumed_benchmarks PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cumed_benchmarks PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` diff --git a/cpp/plugins/cucim.kit.cumed/tests/CMakeLists.txt b/cpp/plugins/cucim.kit.cumed/tests/CMakeLists.txt index 25ae8cffd..95df56068 100644 --- a/cpp/plugins/cucim.kit.cumed/tests/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cumed/tests/CMakeLists.txt @@ -24,18 +24,12 @@ add_executable(cumed_tests main.cpp test_basic.cpp ) -set_source_files_properties(test_basic.cpp PROPERTIES LANGUAGE CUDA) # failed with CLI11 library set_target_properties(cumed_tests PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cumed_tests PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` diff --git a/cpp/plugins/cucim.kit.cuslide/CMakeLists.txt b/cpp/plugins/cucim.kit.cuslide/CMakeLists.txt index 94e654ace..ce4314677 100644 --- a/cpp/plugins/cucim.kit.cuslide/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cuslide/CMakeLists.txt @@ -28,7 +28,7 @@ file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/VERSION VERSION) # Append local cmake module path list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules") -project(cuslide VERSION ${VERSION} DESCRIPTION "cuslide" LANGUAGES C CXX CUDA) +project(cuslide VERSION ${VERSION} DESCRIPTION "cuslide" LANGUAGES C CXX) set(CUCIM_PLUGIN_NAME "cucim.kit.cuslide") ################################################################################ @@ -72,19 +72,7 @@ endif() find_package(CUDAToolkit REQUIRED) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CUDA_STANDARD 17) # Clion issue: https://youtrack.jetbrains.com/issue/CPP-19165 (fixed) -set(CMAKE_CUDA_STANDARD_REQUIRED YES) set(CMAKE_CXX_STANDARD_REQUIRED YES) -cucim_define_cuda_architectures(60;70;75;80;86) -# https://github.com/Kitware/CMake/blob/master/Modules/Compiler/NVIDIA-CUDA.cmake#L11 -# https://gitlab.kitware.com/cmake/cmake/-/issues/19017 -# For CUDA >= 10.2, we cannot use --compiler-options as '-forward-unknown-to-host-compiler' would be added by default to nvcc options. -# For the reason, we add "${CMAKE_CXX_FLAGS}" instead of "--compiler-options ${CMAKE_CXX_FLAGS}" here. -# ==> We changed to use "${CMAKE_CUDA_FLAGS}" instead of "${CMAKE_CXX_FLAGS}" ${CMAKE_CXX_FLAGS} can have wrong options such as '-march=nocona' -set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -use_fast_math -Xptxas=-v") -set(CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS_DEBUG} -G") -set(CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS_RELEASE} -lineinfo") -set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "${CMAKE_CUDA_FLAGS_RELWITHDEBINFO} -lineinfo") # Include CUDA headers explicitly for VSCode intelli-sense include_directories(AFTER SYSTEM ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) @@ -123,7 +111,6 @@ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) # TODO: create two library, one with ################################################################################ # Define dependencies ################################################################################ -#superbuild_depend(cucim) superbuild_depend(fmt) superbuild_depend(libjpeg-turbo) # libjpeg-turbo should be located before libtiff as libtiff depends on libjpeg-turbo superbuild_depend(libopenjpeg) @@ -211,11 +198,6 @@ set_target_properties(${CUCIM_PLUGIN_NAME} CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION} ) @@ -228,7 +210,6 @@ target_link_libraries(${CUCIM_PLUGIN_NAME} PRIVATE CUDA::cudart deps::fmt - #cucim::rmm cucim::cucim deps::libtiff deps::libjpeg-turbo diff --git a/cpp/plugins/cucim.kit.cuslide/benchmarks/CMakeLists.txt b/cpp/plugins/cucim.kit.cuslide/benchmarks/CMakeLists.txt index d0a405c37..490860c39 100644 --- a/cpp/plugins/cucim.kit.cuslide/benchmarks/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cuslide/benchmarks/CMakeLists.txt @@ -24,11 +24,6 @@ set_target_properties(cuslide_benchmarks CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cuslide_benchmarks PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` diff --git a/cpp/plugins/cucim.kit.cuslide/tests/CMakeLists.txt b/cpp/plugins/cucim.kit.cuslide/tests/CMakeLists.txt index e998219b2..c779d63b8 100644 --- a/cpp/plugins/cucim.kit.cuslide/tests/CMakeLists.txt +++ b/cpp/plugins/cucim.kit.cuslide/tests/CMakeLists.txt @@ -26,18 +26,11 @@ add_executable(cuslide_tests test_read_rawtiff.cpp test_philips_tiff.cpp ) -set_source_files_properties(test_read_rawtiff.cpp PROPERTIES LANGUAGE CUDA) # failed with CLI11 library - set_target_properties(cuslide_tests PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cuslide_tests PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` @@ -52,6 +45,7 @@ target_compile_definitions(cuslide_tests ) target_link_libraries(cuslide_tests PRIVATE + CUDA::cudart cucim::cucim ${CUCIM_PLUGIN_NAME} deps::catch2 diff --git a/cpp/plugins/cucim.kit.cuslide/tests/test_read_rawtiff.cpp b/cpp/plugins/cucim.kit.cuslide/tests/test_read_rawtiff.cpp index f76b83db6..54f4801ac 100644 --- a/cpp/plugins/cucim.kit.cuslide/tests/test_read_rawtiff.cpp +++ b/cpp/plugins/cucim.kit.cuslide/tests/test_read_rawtiff.cpp @@ -59,7 +59,7 @@ static void shuffle_offsets(uint32_t count, uint64_t* offsets, uint64_t* bytecounts) { // Fisher-Yates shuffle - for (int i = 0; i < count; ++i) + for (uint32_t i = 0; i < count; ++i) { int j = (std::rand() % (count - i)) + i; std::swap(offsets[i], offsets[j]); @@ -172,7 +172,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") { cucim::logger::Timer timer("- read whole : {:.7f}\n", true, false); - ssize_t read_cnt = fd->pread(aligned_host, test_file_size, 0); + fd->pread(aligned_host, test_file_size, 0); double elapsed_time = timer.stop(); if (iter >= skip_count) @@ -194,7 +194,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") for (uint32_t i = 0; i < image_piece_count_; ++i) { - ssize_t read_cnt = fd->pread(aligned_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); + fd->pread(aligned_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); } double elapsed_time = timer.stop(); @@ -220,7 +220,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") { cucim::logger::Timer timer("- read whole : {:.7f}\n", true, false); - ssize_t read_cnt = fd->pread(aligned_host, test_file_size, 0); + fd->pread(aligned_host, test_file_size, 0); double elapsed_time = timer.stop(); if (iter >= skip_count) @@ -242,7 +242,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") for (uint32_t i = 0; i < image_piece_count_; ++i) { - ssize_t read_cnt = fd->pread(buffer_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); + fd->pread(buffer_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); } double elapsed_time = timer.stop(); @@ -274,7 +274,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") { cucim::logger::Timer timer("- preload : {:.7f}\n", true, false); - ssize_t read_cnt = fd->pread(aligned_host, large_block_size, file_start_offset); + fd->pread(aligned_host, large_block_size, file_start_offset); double elapsed_time = timer.stop(); if (iter >= skip_count) @@ -358,7 +358,7 @@ TEST_CASE("Verify raw tiff read", "[test_read_rawtiff.cpp]") for (uint32_t i = 0; i < image_piece_count_; ++i) { // 3.441 => 3.489 - ssize_t read_cnt = fd->pread(buffer_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); + fd->pread(buffer_host, image_piece_bytecounts_[i], image_piece_offsets_[i]); // memcpy(buffer_host, static_cast(mmap_host) + // image_piece_offsets_[i], image_piece_bytecounts_[i]); } diff --git a/cpp/src/memory/memory_manager.cu b/cpp/src/memory/memory_manager.cpp similarity index 86% rename from cpp/src/memory/memory_manager.cu rename to cpp/src/memory/memory_manager.cpp index 54ad52c1d..cb77d2bd8 100644 --- a/cpp/src/memory/memory_manager.cu +++ b/cpp/src/memory/memory_manager.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#define CUCIM_EXPORTS // For exporting functions globally + #include "cucim/memory/memory_manager.h" #include @@ -25,7 +27,6 @@ #include "cucim/profiler/nvtx3.h" #include "cucim/util/cuda.h" - CUCIM_API void* cucim_malloc(size_t size) { PROF_SCOPED_RANGE(PROF_EVENT_P(cucim_malloc, size)); @@ -71,13 +72,13 @@ void get_pointer_attributes(PointerAttributes& attr, const void* ptr) } } -bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& dst_device) +CUCIM_API bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& dst_device) { switch (dst_device.type()) { case cucim::io::DeviceType::kCPU: break; - case cucim::io::DeviceType::kCUDA: + case cucim::io::DeviceType::kCUDA: { cudaError_t cuda_status; void* host_mem = *target; void* cuda_mem; @@ -93,11 +94,15 @@ bool move_raster_from_host(void** target, size_t size, const cucim::io::Device& } cucim_free(host_mem); *target = cuda_mem; + break; + } + default: + throw std::runtime_error("Unsupported device type"); } return true; } -bool move_raster_from_device(void** target, size_t size, const cucim::io::Device& dst_device) +CUCIM_API bool move_raster_from_device(void** target, size_t size, const cucim::io::Device& dst_device) { switch (dst_device.type()) { @@ -116,6 +121,8 @@ bool move_raster_from_device(void** target, size_t size, const cucim::io::Device } case cucim::io::DeviceType::kCUDA: break; + default: + throw std::runtime_error("Unsupported device type"); } return true; } diff --git a/cpp/tests/CMakeLists.txt b/cpp/tests/CMakeLists.txt index 32b082bdd..eb5910e33 100644 --- a/cpp/tests/CMakeLists.txt +++ b/cpp/tests/CMakeLists.txt @@ -25,18 +25,12 @@ add_executable(cucim_tests test_cufile.cpp test_metadata.cpp ) -set_source_files_properties(main.cpp test_read_region.cpp test_cufile.cpp test_metadata.cpp PROPERTIES LANGUAGE CUDA) set_target_properties(cucim_tests PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(cucim_tests PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` @@ -51,6 +45,7 @@ target_compile_definitions(cucim_tests ) target_link_libraries(cucim_tests PRIVATE + CUDA::cudart ${CUCIM_PACKAGE_NAME} deps::catch2 deps::openslide diff --git a/cpp/tests/test_cufile.cpp b/cpp/tests/test_cufile.cpp index be037fcff..a1330d52b 100644 --- a/cpp/tests/test_cufile.cpp +++ b/cpp/tests/test_cufile.cpp @@ -64,6 +64,7 @@ static void create_test_file(const char* file_name, int size) test_data[i] = ::rand() % 256; // or i % 256; } ssize_t write_cnt = write(fd, test_data, size); + (void)write_cnt; assert(write_cnt == size); close(fd); } @@ -125,8 +126,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# unaligned_host"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -185,8 +186,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# aligned_host"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -245,8 +246,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# unaligned_device"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -306,8 +307,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# aligned_device"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -368,8 +369,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# unaligned_device (pinned host)"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -431,8 +432,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# aligned_device (pinned host)"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -496,8 +497,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# unaligned_device (managed)"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, @@ -560,8 +561,8 @@ TEST_CASE("Verify libcufile usage", "[test_cufile.cpp]") INFO("# aligned_device (managed)"); size_t reference_whole_hash = 0; size_t reference_hash = 0; - size_t reference_write_cnt = 0; - size_t reference_read_cnt = 0; + ssize_t reference_write_cnt = 0; + ssize_t reference_read_cnt = 0; for (int flag_idx = 0; flag_idx < W_FLAG_LEN; ++flag_idx) { INFO(fmt::format("flag_index: {} ({})\n count: {}\n file_offset: {} buf_offset: {}\n", flag_idx, diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 827921447..9988e985f 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -18,18 +18,12 @@ ################################################################################ add_executable(tiff_image tiff_image/main.cpp) -set_source_files_properties(tiff_image/main.cpp PROPERTIES LANGUAGE CUDA) set_target_properties(tiff_image PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared ) target_compile_features(tiff_image PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` diff --git a/gds/CMakeLists.txt b/gds/CMakeLists.txt index b8a959840..019f9f891 100644 --- a/gds/CMakeLists.txt +++ b/gds/CMakeLists.txt @@ -32,27 +32,18 @@ add_library(cufile_stub src/cufile_stub.cpp ) -set_source_files_properties(src/cufile_stub.cpp PROPERTIES LANGUAGE CUDA) - # Compile options set_target_properties(cufile_stub PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO - CUDA_STANDARD 17 - CUDA_STANDARD_REQUIRED YES - CUDA_EXTENSIONS NO - CUDA_SEPARABLE_COMPILATION ON - CUDA_RUNTIME_LIBRARY Shared # To prevent the error message: /usr/bin/ld: ../lib/libcufile_stub.a(cufile_stub.cpp.o): relocation R_X86_64_PC32 against symbol `__fatbinwrap_46_tmpxft_00005869_00000000_6_cufile_stub_cpp1_ii_1e2ddd49' can not be used when making a shared object; recompile with -fPIC POSITION_INDEPENDENT_CODE ON -# SOVERSION ${PROJECT_VERSION_MAJOR} -# VERSION ${PROJECT_VERSION} ) # Note: Looks like the following line causes error on CMake 3.18.4 (it is working on 3.18.2). Keeping it for now. -set(CUCIM_REQUIRED_FEATURES cxx_std_17 cuda_std_17) +set(CUCIM_REQUIRED_FEATURES cxx_std_17) target_compile_features(cufile_stub PRIVATE ${CUCIM_REQUIRED_FEATURES}) # Use generator expression to avoid `nvcc fatal : Value '-std=c++17' is not defined for option 'Werror'` target_compile_options(cufile_stub @@ -64,6 +55,8 @@ target_compile_options(cufile_stub target_link_libraries(cufile_stub PUBLIC ${CMAKE_DL_LIBS} + PRIVATE + CUDA::cudart ) # Set GDS include path (cufile.h)