diff options
author | Andrzej Janik <[email protected]> | 2020-11-23 22:24:56 +0100 |
---|---|---|
committer | Andrzej Janik <[email protected]> | 2020-11-23 22:24:56 +0100 |
commit | b62b4ab6dcf51deae548a57276f706cf9424cbe1 (patch) | |
tree | b0cb5e49091d32dc8bba754aacd7ca587fcdb36c | |
parent | 690f4f3ad2e1daf255749aa65ba14996ada51bbf (diff) | |
download | ZLUDA-geekbench.tar.gz ZLUDA-geekbench.zip |
Support -nolocalra hackgeekbench
-rw-r--r-- | zluda/src/impl/function.rs | 4 | ||||
-rw-r--r-- | zluda/src/impl/module.rs | 15 |
2 files changed, 19 insertions, 0 deletions
diff --git a/zluda/src/impl/function.rs b/zluda/src/impl/function.rs index 27bf9b6..a03e010 100644 --- a/zluda/src/impl/function.rs +++ b/zluda/src/impl/function.rs @@ -26,6 +26,7 @@ pub struct FunctionData { pub arg_size: Vec<usize>, pub use_shared_mem: bool, pub properties: Option<Box<l0::sys::ze_kernel_properties_t>>, + pub do_nothing_hack: bool, } impl FunctionData { @@ -61,6 +62,9 @@ pub fn launch_kernel( } GlobalState::lock_stream(hstream, |stream| { let func: &mut FunctionData = unsafe { &mut *f }.as_result_mut()?; + if func.do_nothing_hack { + return Ok(()); + } for (i, arg_size) in func.arg_size.iter().enumerate() { unsafe { func.base diff --git a/zluda/src/impl/module.rs b/zluda/src/impl/module.rs index cba030e..d4bc91b 100644 --- a/zluda/src/impl/module.rs +++ b/zluda/src/impl/module.rs @@ -110,6 +110,20 @@ pub fn get_function( return Err(CUresult::CUDA_ERROR_INVALID_VALUE); } let name = unsafe { CStr::from_ptr(name) }.to_owned(); + let name_string = name.to_string_lossy(); + let visa_options = std::env::var("IGC_VISAOptions"); + let should_not_run_in_presence_of_hacks = match ( + visa_options.as_ref().map(|s| s.as_str()), + name_string.as_ref(), + ) { + (Ok("-nolocalra"), "square_image") // Face Detection + | (Ok("-nolocalra"), "sum_horizontal") // Face Detection + | (Ok("-nolocalra"), "sum_vertical") // Face Detection + | (Ok("-nolocalra"), "detect") // Face Detection + | (Ok("-nolocalra"), "particle") // Particle Physics + => true, + _ => false, + }; let function: *mut Function = GlobalState::lock_current_context(|ctx| { let module = unsafe { &mut *hmod }.as_result_mut()?; let device = unsafe { &mut *ctx.device }; @@ -145,6 +159,7 @@ pub fn get_function( arg_size: kernel_info.arguments_sizes.clone(), use_shared_mem: kernel_info.uses_shared_mem, properties: None, + do_nothing_hack: should_not_run_in_presence_of_hacks, }))) } }; |