diff --git a/crates/ipu-codegen/src/place.rs b/crates/ipu-codegen/src/place.rs index 0e742bd..dda59c3 100644 --- a/crates/ipu-codegen/src/place.rs +++ b/crates/ipu-codegen/src/place.rs @@ -95,6 +95,26 @@ pub(crate) fn place_with_offset( program: &LowProgram, available_ranges: &[(u32, u32)], interleaved_offset: u32, +) -> Result { + if std::env::var_os("IPU_CAPACITY_PROBE").is_some() && available_ranges.contains(&(475136, 524288)) { + for extra in (0..=98304u32).step_by(4096) { + let mut ranges = available_ranges.to_vec(); + let region = ranges.iter_mut().find(|(_, end)| *end == 524288).unwrap(); + region.0 -= extra; + ranges = crate::memory::merge_ranges(ranges); + let start = std::time::Instant::now(); + let result = place_capacity_original(program, &ranges, interleaved_offset); + eprintln!("CAPACITY_PROBE extra={extra} result={:?} elapsed_ms={}", result.as_ref().map(|_| ()), start.elapsed().as_millis()); + if result.is_ok() { break; } + } + } + place_capacity_original(program, available_ranges, interleaved_offset) +} + +fn place_capacity_original( + program: &LowProgram, + available_ranges: &[(u32, u32)], + interleaved_offset: u32, ) -> Result { let started = std::time::Instant::now(); if interleaved_offset >= IPU21_INTERLEAVED_ELEMENT_SIZE {