cufile.hpp
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #pragma once
6 
7 #include <kvikio/shim/cufile_h_wrapper.hpp>
8 #include <kvikio/shim/utils.hpp>
9 
10 namespace kvikio {
11 
19 class cuFileAPI {
20  public:
21  decltype(cuFileHandleRegister)* HandleRegister{nullptr};
22  decltype(cuFileHandleDeregister)* HandleDeregister{nullptr};
23  decltype(cuFileRead)* Read{nullptr};
24  decltype(cuFileWrite)* Write{nullptr};
25  decltype(cuFileBufRegister)* BufRegister{nullptr};
26  decltype(cuFileBufDeregister)* BufDeregister{nullptr};
27  decltype(cuFileDriverGetProperties)* DriverGetProperties{nullptr};
28  decltype(cuFileDriverSetPollMode)* DriverSetPollMode{nullptr};
29  decltype(cuFileDriverSetMaxCacheSize)* DriverSetMaxCacheSize{nullptr};
30  decltype(cuFileDriverSetMaxPinnedMemSize)* DriverSetMaxPinnedMemSize{nullptr};
31  decltype(cuFileBatchIOSetUp)* BatchIOSetUp{nullptr};
32  decltype(cuFileBatchIOSubmit)* BatchIOSubmit{nullptr};
33  decltype(cuFileBatchIOGetStatus)* BatchIOGetStatus{nullptr};
34  decltype(cuFileBatchIOCancel)* BatchIOCancel{nullptr};
35  decltype(cuFileBatchIODestroy)* BatchIODestroy{nullptr};
36  decltype(cuFileReadAsync)* ReadAsync{nullptr};
37  decltype(cuFileWriteAsync)* WriteAsync{nullptr};
38  decltype(cuFileStreamRegister)* StreamRegister{nullptr};
39  decltype(cuFileStreamDeregister)* StreamDeregister{nullptr};
40 
41  private:
42  // Don't call driver open and close directly, use `.driver_open()` and `.driver_close()`.
43  decltype(cuFileDriverOpen)* DriverOpen{nullptr};
44  decltype(cuFileDriverClose)* DriverClose{nullptr};
45 
46  // Don't call `GetVersion` directly, use `cuFileAPI::instance().version`.
47  decltype(cuFileGetVersion)* GetVersion{nullptr};
48 
49  public:
50  int version{0};
51 
52  private:
53  cuFileAPI();
54 
55  public:
56  cuFileAPI(cuFileAPI const&) = delete;
57  void operator=(cuFileAPI const&) = delete;
58  cuFileAPI(cuFileAPI const&&) = delete;
59  void operator=(cuFileAPI const&&) = delete;
60 
61  KVIKIO_EXPORT static cuFileAPI& instance();
62 
69  void driver_open();
70 
74  void driver_close();
75 };
76 
84 #ifdef KVIKIO_CUFILE_FOUND
85 bool is_cufile_library_available() noexcept;
86 #else
87 constexpr bool is_cufile_library_available() noexcept { return false; }
88 #endif
89 
98 bool is_cufile_available() noexcept;
99 
111 int cufile_version() noexcept;
112 
122 bool is_batch_api_available() noexcept;
123 
133 bool is_stream_api_available() noexcept;
134 
135 } // namespace kvikio
Shim layer of the cuFile C-API.
Definition: cufile.hpp:19
void driver_open()
Open the cuFile driver.
void driver_close()
Close the cuFile driver.
KvikIO namespace.
Definition: batch.hpp:16
constexpr bool is_cufile_library_available() noexcept
Check if the cuFile library is available.
Definition: cufile.hpp:87
bool is_cufile_available() noexcept
Check if the cuFile is available and expected to work.
bool is_stream_api_available() noexcept
Check if cuFile's stream (async) API is available.
bool is_batch_api_available() noexcept
Check if cuFile's batch API is available.
int cufile_version() noexcept
Get cufile version (or zero if older than v1.8).