aboutsummaryrefslogtreecommitdiffhomepage
path: root/zluda/src/impl
diff options
context:
space:
mode:
authorAndrzej Janik <[email protected]>2020-11-23 22:24:56 +0100
committerAndrzej Janik <[email protected]>2020-11-23 22:24:56 +0100
commitb62b4ab6dcf51deae548a57276f706cf9424cbe1 (patch)
treeb0cb5e49091d32dc8bba754aacd7ca587fcdb36c /zluda/src/impl
parent690f4f3ad2e1daf255749aa65ba14996ada51bbf (diff)
downloadZLUDA-b62b4ab6dcf51deae548a57276f706cf9424cbe1.tar.gz
ZLUDA-b62b4ab6dcf51deae548a57276f706cf9424cbe1.zip
Support -nolocalra hackgeekbench
Diffstat (limited to 'zluda/src/impl')
-rw-r--r--zluda/src/impl/function.rs4
-rw-r--r--zluda/src/impl/module.rs15
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,
})))
}
};