From 3289d92f598da0c50f3fa9ea8a028ca9bebd9eca Mon Sep 17 00:00:00 2001 From: Andrzej Janik Date: Fri, 19 Sep 2025 02:07:59 +0000 Subject: [PATCH] Filter enqueues to be saved --- zluda_trace/src/lib.rs | 16 ++++++++++++++++ zluda_trace/src/replay.rs | 4 ++++ zluda_trace/src/trace.rs | 2 ++ 3 files changed, 22 insertions(+) diff --git a/zluda_trace/src/lib.rs b/zluda_trace/src/lib.rs index 8aa78bc..46ef901 100644 --- a/zluda_trace/src/lib.rs +++ b/zluda_trace/src/lib.rs @@ -1280,6 +1280,7 @@ struct Settings { dump_dir: Option, libcuda_path: String, override_cc: Option<(u32, u32)>, + kernel_name_filter: Option, } impl Settings { @@ -1328,10 +1329,25 @@ impl Settings { }) }), }; + let kernel_name_filter = match env::var("ZLUDA_SAVE_KERNELS") { + Err(env::VarError::NotPresent) => None, + Err(e) => { + logger.log(log::ErrorEntry::ErrorBox(Box::new(e) as _)); + None + } + Ok(env_string) => logger.try_return(|| { + regex::Regex::new(&env_string).map_err(|e| ErrorEntry::InvalidEnvVar { + var: "ZLUDA_SAVE_KERNELS", + pattern: "valid regex", + value: format!("{} ({})", env_string, e), + }) + }), + }; Settings { dump_dir, libcuda_path, override_cc, + kernel_name_filter, } } diff --git a/zluda_trace/src/replay.rs b/zluda_trace/src/replay.rs index 8056e07..74fe292 100644 --- a/zluda_trace/src/replay.rs +++ b/zluda_trace/src/replay.rs @@ -27,6 +27,10 @@ pub(crate) fn pre_kernel_launch( .get(&f) .ok_or(ErrorEntry::UnknownFunctionHandle(f)) })?; + let kernel_name_filter = state.kernel_name_filter.as_ref()?; + if !kernel_name_filter.is_match(name) { + return None; + } let ParsedModule { source, kernels } = fn_logger.try_return(|| { state .parsed_libraries diff --git a/zluda_trace/src/trace.rs b/zluda_trace/src/trace.rs index 219d032..4b57920 100644 --- a/zluda_trace/src/trace.rs +++ b/zluda_trace/src/trace.rs @@ -27,6 +27,7 @@ pub(crate) struct StateTracker { library_counter: usize, pub(crate) enqueue_counter: usize, pub(crate) override_cc: Option<(u32, u32)>, + pub(crate) kernel_name_filter: Option, } pub(crate) struct ParsedModule { @@ -55,6 +56,7 @@ impl StateTracker { library_counter: 0, enqueue_counter: 0, override_cc: settings.override_cc, + kernel_name_filter: settings.kernel_name_filter.clone(), } }