26 #include <level_zero/ze_api.h>
34 std::vector<std::shared_ptr<L0Device>>
devices_;
37 ze_context_handle_t context_;
38 ze_driver_handle_t driver_;
43 explicit L0Driver(ze_driver_handle_t handle);
44 ze_context_handle_t ctx()
const;
45 ze_driver_handle_t driver()
const;
49 const std::vector<std::shared_ptr<L0Device>>&
devices()
const;
60 ze_device_handle_t device_;
72 bool log =
false)
const;
76 ze_device_handle_t device()
const;
77 ze_context_handle_t ctx()
const;
85 ze_module_handle_t handle_;
94 explicit L0Module(ze_module_handle_t handle);
95 ze_module_handle_t handle()
const;
102 void set_kernel_args(ze_kernel_handle_t kernel) {}
104 template <
int Index,
typename Head>
105 void set_kernel_args(ze_kernel_handle_t kernel, Head&& head) {
107 kernel, Index,
sizeof(std::remove_reference_t<Head>), head));
110 template <
int Index,
typename Head,
typename... Tail>
111 void set_kernel_args(ze_kernel_handle_t kernel, Head&& head, Tail&&... tail) {
112 set_kernel_args<Index>(kernel, head);
113 set_kernel_args<Index + 1>(kernel, std::forward<Tail>(tail)...);
120 ze_kernel_handle_t handle_;
121 ze_group_count_t group_size_;
125 L0Kernel(ze_kernel_handle_t handle, uint32_t x, uint32_t y, uint32_t z);
126 ze_group_count_t& group_size();
127 ze_kernel_handle_t handle()
const;
135 ze_command_queue_handle_t handle_;
139 ze_command_queue_handle_t handle()
const;
147 ze_command_list_handle_t handle_;
151 void copy(
void* dst,
const void* src,
const size_t num_bytes);
153 template <
typename... Args>
156 set_kernel_args<0>(kernel.handle(), std::forward<Args>(
args)...);
159 handle_, kernel.handle(), &kernel.group_size(),
nullptr, 0,
nullptr));
161 L0_SAFE_CALL(zeCommandListAppendBarrier(handle_,
nullptr, 0,
nullptr));
168 ze_command_list_handle_t handle()
const;
181 const int8_t* host_ptr,
182 const size_t num_bytes,
183 const int device_num);
185 const int8_t* device_ptr,
186 const size_t num_bytes,
187 const int device_num);
190 const size_t num_bytes,
191 const int dest_device_num,
192 const int src_device_num);
198 void zeroDeviceMem(int8_t* device_ptr,
const size_t num_bytes,
const int device_num);
200 const unsigned char uc,
201 const size_t num_bytes,
202 const int device_num);
206 const std::vector<std::shared_ptr<L0Driver>>&
drivers()
const;
void freeDeviceMem(int8_t *device_ptr)
void zeroDeviceMem(int8_t *device_ptr, const size_t num_bytes, const int device_num)
#define L0_SAFE_CALL(call)
void copyHostToDevice(int8_t *device_ptr, const int8_t *host_ptr, const size_t num_bytes, const int device_num)
void setDeviceMem(int8_t *device_ptr, const unsigned char uc, const size_t num_bytes, const int device_num)
std::unique_ptr< L0CommandList > create_command_list() const
std::shared_ptr< L0Module > create_module(uint8_t *code, size_t len, bool log=false) const
void launch(L0Kernel &kernel, Args &&...args)
void copy(void *dst, const void *src, const size_t num_bytes)
void submit(L0CommandQueue &queue)
std::shared_ptr< L0CommandQueue > command_queue() const
void copyDeviceToDevice(int8_t *dest_ptr, int8_t *src_ptr, const size_t num_bytes, const int dest_device_num, const int src_device_num)
std::vector< std::shared_ptr< L0Device > > devices_
void synchronizeDevices() const
std::shared_ptr< L0CommandQueue > command_queue_
void copyDeviceToHost(int8_t *host_ptr, const int8_t *device_ptr, const size_t num_bytes, const int device_num)
void freePinnedHostMem(int8_t *host_ptr)
const std::vector< std::shared_ptr< L0Driver > > & drivers() const
int8_t * allocatePinnedHostMem(const size_t num_bytes)
std::vector< std::shared_ptr< L0Driver > > drivers_
void * allocate_device_mem(const size_t num_bytes, L0Device &device)
int8_t * allocateDeviceMem(const size_t num_bytes, const int device_num)
const std::vector< std::shared_ptr< L0Device > > & devices() const
std::shared_ptr< L0Kernel > create_kernel(const char *name, uint32_t x, uint32_t y, uint32_t z) const