Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace FindcuFile with upstream FindCUDAToolkit support #542

Merged
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
ead08a1
Replace FindcuFile with upstream FindCUDAToolkit support
KyleFromNVIDIA Nov 6, 2024
39a0fea
Always link cufile
KyleFromNVIDIA Nov 6, 2024
9177a0e
Style
KyleFromNVIDIA Nov 6, 2024
4ab436e
Remove more references to FindcuFile
KyleFromNVIDIA Nov 6, 2024
318fb2a
Check existence of cufile
KyleFromNVIDIA Nov 6, 2024
b7df22e
Style
KyleFromNVIDIA Nov 6, 2024
2ddd138
Use include instead of link
KyleFromNVIDIA Nov 6, 2024
c406c88
Style
KyleFromNVIDIA Nov 6, 2024
ec2b31d
Debugging
KyleFromNVIDIA Nov 7, 2024
de822f3
Try CUDAToolkit_TARGET_DIR
KyleFromNVIDIA Nov 7, 2024
75c982e
Style
KyleFromNVIDIA Nov 7, 2024
5c5b717
Debugging
KyleFromNVIDIA Nov 7, 2024
7aba8be
List everything in $PREFIX
KyleFromNVIDIA Nov 7, 2024
b05b644
More debugging
KyleFromNVIDIA Nov 7, 2024
7a23320
Debug
KyleFromNVIDIA Nov 7, 2024
a8ffca7
Debug
KyleFromNVIDIA Nov 8, 2024
ab59966
Debug
KyleFromNVIDIA Nov 8, 2024
71a7da5
Oops
KyleFromNVIDIA Nov 8, 2024
7dbbe3d
Trace
KyleFromNVIDIA Nov 8, 2024
d1ab48b
Quote
KyleFromNVIDIA Nov 8, 2024
52519c1
Debug
KyleFromNVIDIA Nov 8, 2024
c834ea6
Style
KyleFromNVIDIA Nov 8, 2024
eefb784
Try LOCATION instead
KyleFromNVIDIA Nov 8, 2024
45126b8
Fix target name
KyleFromNVIDIA Nov 8, 2024
e9278f6
Relative to libcufile.so location
KyleFromNVIDIA Nov 8, 2024
35a1d05
Debug
KyleFromNVIDIA Nov 8, 2024
1cf7e4d
try_compile
KyleFromNVIDIA Nov 8, 2024
0025fbf
Debug
KyleFromNVIDIA Nov 8, 2024
e7435b9
noexist
KyleFromNVIDIA Nov 8, 2024
e44a56c
Style
KyleFromNVIDIA Nov 8, 2024
250517b
try_compile()
KyleFromNVIDIA Nov 8, 2024
15be9f3
Style
KyleFromNVIDIA Nov 8, 2024
8179714
Arg order
KyleFromNVIDIA Nov 8, 2024
6e0f3ca
Style
KyleFromNVIDIA Nov 8, 2024
1b80099
Capitalization
KyleFromNVIDIA Nov 8, 2024
a87fc27
Set try_compile() target type
KyleFromNVIDIA Nov 8, 2024
945df21
Use LINK_LIBRARIES instead
KyleFromNVIDIA Nov 8, 2024
f167cdd
Remove debugging
KyleFromNVIDIA Nov 8, 2024
0b08581
Debug
KyleFromNVIDIA Nov 8, 2024
0c90b46
Order
KyleFromNVIDIA Nov 8, 2024
afd0177
CMAKE_DL_LIBS
KyleFromNVIDIA Nov 8, 2024
4e1a2f0
librt
KyleFromNVIDIA Nov 8, 2024
c3969e5
Add include directories in export
KyleFromNVIDIA Nov 8, 2024
ca98a53
Style
KyleFromNVIDIA Nov 8, 2024
ef57e52
Add back CUDA def
KyleFromNVIDIA Nov 8, 2024
b10771f
Make cufile dynamic too
KyleFromNVIDIA Nov 8, 2024
1881a9b
Fix
KyleFromNVIDIA Nov 8, 2024
1155069
Style
KyleFromNVIDIA Nov 8, 2024
11d4786
Fix
KyleFromNVIDIA Nov 8, 2024
57883d0
Oops
KyleFromNVIDIA Nov 8, 2024
f7de341
Make CUDA dirs public
KyleFromNVIDIA Nov 8, 2024
5f15a1d
include
KyleFromNVIDIA Nov 8, 2024
389bdfe
required
KyleFromNVIDIA Nov 9, 2024
12ffb0d
Review feedback
KyleFromNVIDIA Nov 9, 2024
05c9297
Review feedback
KyleFromNVIDIA Nov 9, 2024
cefdd5b
Oops
KyleFromNVIDIA Nov 9, 2024
da65d01
Oops
KyleFromNVIDIA Nov 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 64 additions & 38 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,41 +64,56 @@ if(KvikIO_REMOTE_SUPPORT)
include(cmake/thirdparty/get_libcurl.cmake)
endif()

if(KvikIO_CUDA_SUPPORT)
rapids_find_package(
CUDAToolkit REQUIRED
BUILD_EXPORT_SET kvikio-exports
INSTALL_EXPORT_SET kvikio-exports
)
include(cmake/thirdparty/get_nvtx.cmake)
endif()

rapids_find_package(
cuFile
CUDAToolkit
BUILD_EXPORT_SET kvikio-exports
INSTALL_EXPORT_SET kvikio-exports
)

if(NOT cuFile_FOUND)
if(KvikIO_CUDA_SUPPORT)
if(NOT CUDAToolkit_FOUND)
message(FATAL_ERROR "CUDA support requested but CUDA toolkit not found")
endif()

include(cmake/thirdparty/get_nvtx.cmake)
endif()

if(NOT TARGET CUDA::cuFile)
set(cuFile_FOUND 0)
message(
WARNING "Cannot find cuFile - KvikIO will still work but won't use GPUDirect Storage (GDS)"
)
else()
set(cuFile_FOUND 1)

# Check batch and stream API support (cuFile_BATCH_API_FOUND and cuFile_STREAM_API_FOUND)
file(READ "${cuFile_INCLUDE_DIRS}/cufile.h" CUFILE_H_STR)
string(FIND "${CUFILE_H_STR}" "cuFileBatchIOSetUp" cuFileBatchIOSetUp_location)
if(cuFileBatchIOSetUp_location EQUAL "-1")
set(cuFile_BATCH_API_FOUND FALSE)
else()
set(cuFile_BATCH_API_FOUND TRUE)
endif()
try_compile(
cuFile_BATCH_API_FOUND SOURCE_FROM_CONTENT
batch.cpp
[[#include <cufile.h>
int main() {
cuFileBatchIOSetUp(nullptr, 0);
return 0;
}
]]
LINK_LIBRARIES CUDA::cuFile rt ${CMAKE_DL_LIBS}
OUTPUT_VARIABLE batch_output
)
message(STATUS "Found cuFile Batch API: ${cuFile_BATCH_API_FOUND}")
string(FIND "${CUFILE_H_STR}" "cuFileReadAsync" cuFileReadAsync_location)
if(cuFileReadAsync_location EQUAL "-1")
set(cuFile_STREAM_API_FOUND FALSE)
else()
set(cuFile_STREAM_API_FOUND TRUE)
endif()
try_compile(
cuFile_STREAM_API_FOUND SOURCE_FROM_CONTENT
stream.cpp
[[#include <cufile.h>
int main() {
CUfileHandle_t fh;
CUstream stream;
cuFileReadAsync(fh, nullptr, nullptr, nullptr, nullptr, nullptr, stream);
return 0;
}
]]
LINK_LIBRARIES CUDA::cuFile rt ${CMAKE_DL_LIBS}
OUTPUT_VARIABLE stream_output
)
message(STATUS "Found cuFile Stream API: ${cuFile_STREAM_API_FOUND}")
endif()

Expand Down Expand Up @@ -126,18 +141,14 @@ add_library(kvikio::kvikio ALIAS kvikio)
target_include_directories(
kvikio
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<BUILD_INTERFACE:${CUDAToolkit_INCLUDE_DIRS}>"
INTERFACE "$<INSTALL_INTERFACE:include>"
)

# Notice, we do not link to cuda or cufile since KvikIO opens them manually using `dlopen()`.
target_link_libraries(
kvikio
PUBLIC Threads::Threads
BS::thread_pool
${CMAKE_DL_LIBS}
$<TARGET_NAME_IF_EXISTS:nvtx3::nvtx3-cpp>
$<COMPILE_ONLY:$<TARGET_NAME_IF_EXISTS:CUDA::cudart>>
$<COMPILE_ONLY:$<TARGET_NAME_IF_EXISTS:cufile::cufile>>
PUBLIC Threads::Threads BS::thread_pool ${CMAKE_DL_LIBS} $<TARGET_NAME_IF_EXISTS:nvtx3::nvtx3-cpp>
PRIVATE $<TARGET_NAME_IF_EXISTS:CURL::libcurl>
)

Expand Down Expand Up @@ -200,26 +211,40 @@ install(
install(DIRECTORY include/kvikio/ DESTINATION include/kvikio)
install(FILES ${KvikIO_BINARY_DIR}/include/kvikio/version_config.hpp DESTINATION include/kvikio)

include("${rapids-cmake-dir}/export/find_package_file.cmake")
rapids_export_find_package_file(
BUILD "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindcuFile.cmake" EXPORT_SET kvikio-exports
)
rapids_export_find_package_file(
INSTALL "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindcuFile.cmake" EXPORT_SET kvikio-exports
)

set(doc_string
[=[
Provide targets for KvikIO.
]=]
)

set(final_code_string
"
set(KvikIO_CUDA_SUPPORT [=[${KvikIO_CUDA_SUPPORT}]=])
set(KvikIO_CUFILE_SUPPORT [=[${cuFile_FOUND}]=])
"
)
string(
APPEND
final_code_string
[=[
if(KvikIO_CUDA_SUPPORT OR KvikIO_CUFILE_SUPPORT)
find_package(CUDAToolkit REQUIRED QUIET)
target_include_directories(kvikio::kvikio INTERFACE ${CUDAToolkit_INCLUDE_DIRS})
endif()

if(KvikIO_CUFILE_SUPPORT AND NOT TARGET CUDA::cuFile)
message(FATAL_ERROR "Compiled with cuFile support but cuFile not found")
endif()
]=]
)

rapids_export(
INSTALL kvikio
EXPORT_SET kvikio-exports
GLOBAL_TARGETS kvikio
NAMESPACE kvikio::
DOCUMENTATION doc_string
FINAL_CODE_BLOCK final_code_string
)

rapids_export(
Expand All @@ -228,4 +253,5 @@ rapids_export(
GLOBAL_TARGETS kvikio
NAMESPACE kvikio::
DOCUMENTATION doc_string
FINAL_CODE_BLOCK final_code_string
)
120 changes: 0 additions & 120 deletions cpp/cmake/Modules/FindcuFile.cmake

This file was deleted.

3 changes: 0 additions & 3 deletions python/kvikio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ project(

option(USE_NVCOMP_RUNTIME_WHEEL "Use the nvcomp wheel at runtime instead of the system library" OFF)

# TODO: Should we symlink FindcuFile.cmake into python/cmake? find cuFile
include(../../cpp/cmake/Modules/FindcuFile.cmake)

find_package(kvikio REQUIRED "${RAPIDS_VERSION}")

find_package(CUDAToolkit REQUIRED)
Expand Down