From ecc33f7b105373264807d09f6bdcadb93e59f1f0 Mon Sep 17 00:00:00 2001 From: Andrzej Janik Date: Sun, 4 Jul 2021 15:40:08 +0200 Subject: [PATCH] Make everything async --- level_zero-sys/lib/ze_loader.def | Bin 15760 -> 8043 bytes level_zero-sys/lib/ze_loader.lib | Bin 77220 -> 78754 bytes level_zero/src/ze.rs | 20 ++++++++++++++++++++ zluda/src/impl/function.rs | 13 +++++-------- zluda/src/impl/memory.rs | 28 +++++++++++----------------- zluda/src/impl/mod.rs | 10 +++------- 6 files changed, 39 insertions(+), 32 deletions(-) diff --git a/level_zero-sys/lib/ze_loader.def b/level_zero-sys/lib/ze_loader.def index 71bc4df4bb6534e42585f407e4fb5f256b561449..d95ffad9d45f2a0abb960182a8e683e1ac114bca 100644 GIT binary patch literal 8043 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 R0OxNMb3A>fm@(m{;{TcJwhRCO literal 15760 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 literal 77220 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 BTgLzZ diff --git a/level_zero/src/ze.rs b/level_zero/src/ze.rs index 16a98a0..30146a2 100644 --- a/level_zero/src/ze.rs +++ b/level_zero/src/ze.rs @@ -781,6 +781,26 @@ impl<'a> CommandList<'a> { Ok(unsafe { Self::from_ffi(result) }) } + pub fn new_immediate(ctx: &'a Context, dev: Device) -> Result { + let queue_desc = sys::ze_command_queue_desc_t { + stype: sys::ze_structure_type_t::ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC, + pNext: ptr::null(), + ordinal: 0, + index: 0, + flags: sys::ze_command_queue_flags_t(0), + mode: sys::ze_command_queue_mode_t::ZE_COMMAND_QUEUE_MODE_DEFAULT, + priority: sys::ze_command_queue_priority_t::ZE_COMMAND_QUEUE_PRIORITY_NORMAL, + }; + let mut result: sys::ze_command_list_handle_t = ptr::null_mut(); + check!(sys::zeCommandListCreateImmediate( + ctx.as_ffi(), + dev.as_ffi(), + &queue_desc, + &mut result + )); + Ok(unsafe { Self::from_ffi(result) }) + } + pub unsafe fn append_memory_copy< 'dep, T: 'a + 'dep + Copy + Sized, diff --git a/zluda/src/impl/function.rs b/zluda/src/impl/function.rs index 2aaab22..2a35512 100644 --- a/zluda/src/impl/function.rs +++ b/zluda/src/impl/function.rs @@ -81,7 +81,7 @@ pub fn launch_kernel( { return Err(CUresult::CUDA_ERROR_INVALID_VALUE); } - GlobalState::lock_stream(hstream, |stream| { + GlobalState::lock_enqueue(hstream, |cmd_list, signal, wait| { let func: &mut FunctionData = unsafe { &mut *f }.as_result_mut()?; if kernel_params != ptr::null_mut() { for (i, arg_size) in func.arg_size.iter().enumerate() { @@ -144,19 +144,16 @@ pub fn launch_kernel( func.base .set_group_size(block_dim_x, block_dim_y, block_dim_z)?; func.legacy_args.reset(); - let cmd_list = stream.command_list()?; unsafe { cmd_list.append_launch_kernel( &mut func.base, &[grid_dim_x, grid_dim_y, grid_dim_z], - None, - &mut [], + Some(signal), + wait, )?; } - cmd_list.close()?; - stream.queue.execute_and_synchronize(cmd_list)?; - Ok(()) - })? + Ok::<_, CUresult>(()) + }) } fn round_up_to_multiple(x: usize, multiple: usize) -> usize { diff --git a/zluda/src/impl/memory.rs b/zluda/src/impl/memory.rs index 81b4f31..56821d1 100644 --- a/zluda/src/impl/memory.rs +++ b/zluda/src/impl/memory.rs @@ -13,7 +13,7 @@ pub fn alloc_v2(dptr: *mut *mut c_void, bytesize: usize) -> Result<(), CUresult> pub fn copy_v2(dst: *mut c_void, src: *const c_void, bytesize: usize) -> Result<(), CUresult> { GlobalState::lock_enqueue(stream::CU_STREAM_LEGACY, |cmd_list, signal, wait| { unsafe { cmd_list.append_memory_copy_raw(dst, src, bytesize, Some(signal), wait)? }; - Ok::<_, l0::sys::ze_result_t>(()) + Ok(()) }) } @@ -26,41 +26,35 @@ pub fn free_v2(ptr: *mut c_void) -> Result<(), CUresult> { } pub(crate) fn set_d32_v2(dst: *mut c_void, mut ui: u32, n: usize) -> Result<(), CUresult> { - GlobalState::lock_stream(stream::CU_STREAM_LEGACY, |stream| { - let cmd_list = stream.command_list()?; + GlobalState::lock_enqueue(stream::CU_STREAM_LEGACY, |cmd_list, signal, wait| { unsafe { cmd_list.append_memory_fill_raw( dst, &mut ui as *mut _ as *mut _, mem::size_of::(), mem::size_of::() * n, - None, - &mut [], + Some(signal), + wait, ) }?; - cmd_list.close()?; - stream.queue.execute_and_synchronize(cmd_list)?; - Ok::<_, CUresult>(()) - })? + Ok(()) + }) } pub(crate) fn set_d8_v2(dst: *mut c_void, mut uc: u8, n: usize) -> Result<(), CUresult> { - GlobalState::lock_stream(stream::CU_STREAM_LEGACY, |stream| { - let cmd_list = stream.command_list()?; + GlobalState::lock_enqueue(stream::CU_STREAM_LEGACY, |cmd_list, signal, wait| { unsafe { cmd_list.append_memory_fill_raw( dst, &mut uc as *mut _ as *mut _, mem::size_of::(), mem::size_of::() * n, - None, - &mut [], + Some(signal), + wait, ) }?; - cmd_list.close()?; - stream.queue.execute_and_synchronize(cmd_list)?; - Ok::<_, CUresult>(()) - })? + Ok(()) + }) } #[cfg(test)] diff --git a/zluda/src/impl/mod.rs b/zluda/src/impl/mod.rs index 2bdd613..f12e964 100644 --- a/zluda/src/impl/mod.rs +++ b/zluda/src/impl/mod.rs @@ -275,17 +275,13 @@ impl GlobalState { fn lock_enqueue( stream: *mut stream::Stream, - f: impl FnOnce( - &mut l0::CommandList, - &l0::Event<'static>, - &[&l0::Event<'static>], - ) -> l0::Result<()>, + f: impl FnOnce(&l0::CommandList, &l0::Event<'static>, &[&l0::Event<'static>]) -> Result<(), CUresult>, ) -> Result<(), CUresult> { Self::lock_stream(stream, |stream_data| { let l0_dev = unsafe { (*(*stream_data.context).device).base }; let l0_ctx = unsafe { &mut (*(*stream_data.context).device).l0_context }; let event_pool = unsafe { &mut (*(*stream_data.context).device).event_pool }; - let mut cmd_list = unsafe { mem::transmute(stream_data.command_list()?) }; + let cmd_list = unsafe { mem::transmute(stream_data.command_list()?) }; stream_data .process_finished_events(&mut |(_, marker)| event_pool.mark_as_free(marker))?; let prev_event = stream_data.get_last_event(); @@ -293,7 +289,7 @@ impl GlobalState { let empty = []; let prev_event_slice = prev_event_array.as_ref().map_or(&empty[..], |arr| &arr[..]); let (new_event, new_marker) = event_pool.get(l0_dev, l0_ctx)?; - f(&mut cmd_list, &new_event, prev_event_slice)?; + f(&cmd_list, &new_event, prev_event_slice)?; cmd_list.close()?; unsafe { stream_data.queue.execute(&cmd_list, None)? }; stream_data.push_event((new_event, new_marker));