diff --git a/crates/ipu-codegen/src/package.rs b/crates/ipu-codegen/src/package.rs index f2d1e34..29a290a 100644 --- a/crates/ipu-codegen/src/package.rs +++ b/crates/ipu-codegen/src/package.rs @@ -1282,6 +1282,28 @@ pub fn capture_exchange_finalist( .expanded_plan_finalists .max(planning.exchange_schedule_finalists), )?; + if let Some(directory) = std::env::var_os("DUMP_MID_ONLY") { + std::fs::create_dir_all(&directory).unwrap(); + for (index, mid) in finalists.iter().enumerate() { + let mut text = String::new(); + for op in &mid.operations { + text.push_str(&format!("{:?} {:?} {:?}\n", op.source, op.kind, crate::estimate::operation_cost(op, &mid.values))); + for id in op.inputs.iter().chain(&op.results) { + text.push_str(&format!(" {:?}\n", mid.values[id.index() as usize])); + } + } + std::fs::write(std::path::Path::new(&directory).join(format!("mid-{index}.txt")), text).unwrap(); + } + if std::env::var_os("SCREEN_MID").is_some() { + finalists.par_iter().enumerate().for_each(|(index, mid)| { + let start = std::time::Instant::now(); + let result = crate::low::expand::expand_tiles(mid, false) + .map(|low| crate::estimate::program_footprint(&low)); + tracing::info!(index, ?result, elapsed_ms=start.elapsed().as_millis(), "diagnostic expanded footprint"); + }); + } + return Err(invalid("diagnostic mid dump complete")); + } let mid = finalists .get(finalist) .ok_or_else(|| invalid("exchange capture finalist out of range"))?;