use cudarc::driver::{sys, CudaContext, DriverError};
fn main() -> Result<(), DriverError> {
let dev = CudaContext::new(0)?;
println!("=== Context Limits ===");
let stack_size = dev.get_limit(sys::CUlimit::CU_LIMIT_STACK_SIZE)?;
println!("Stack size per thread: {} bytes", stack_size);
let malloc_heap_size = dev.get_limit(sys::CUlimit::CU_LIMIT_MALLOC_HEAP_SIZE)?;
println!(
"Malloc heap size: {} bytes ({} MB)",
malloc_heap_size,
malloc_heap_size / 1024 / 1024
);
let printf_fifo_size = dev.get_limit(sys::CUlimit::CU_LIMIT_PRINTF_FIFO_SIZE)?;
println!(
"Printf buffer size: {} bytes ({} KB)",
printf_fifo_size,
printf_fifo_size / 1024
);
let dev_runtime_sync_depth = dev.get_limit(sys::CUlimit::CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH)?;
println!("Device runtime sync depth: {}", dev_runtime_sync_depth);
let dev_runtime_pending_launch_count =
dev.get_limit(sys::CUlimit::CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT)?;
println!(
"Device runtime pending launch count: {}",
dev_runtime_pending_launch_count
);
println!("\n=== Cache Configuration ===");
let cache_config = dev.get_cache_config()?;
let cache_str = match cache_config {
sys::CUfunc_cache::CU_FUNC_CACHE_PREFER_NONE => "No preference",
sys::CUfunc_cache::CU_FUNC_CACHE_PREFER_SHARED => "Prefer shared memory",
sys::CUfunc_cache::CU_FUNC_CACHE_PREFER_L1 => "Prefer L1 cache",
sys::CUfunc_cache::CU_FUNC_CACHE_PREFER_EQUAL => "Equal L1/shared",
};
println!("Current cache config: {:?} ({})", cache_config, cache_str);
println!("\n=== Testing Limit Modification ===");
let new_stack_size = stack_size * 2;
println!("Setting stack size to {} bytes...", new_stack_size);
dev.set_limit(sys::CUlimit::CU_LIMIT_STACK_SIZE, new_stack_size)?;
let updated_stack_size = dev.get_limit(sys::CUlimit::CU_LIMIT_STACK_SIZE)?;
println!("Updated stack size: {} bytes", updated_stack_size);
dev.set_limit(sys::CUlimit::CU_LIMIT_STACK_SIZE, stack_size)?;
println!("Restored stack size to {} bytes", stack_size);
println!("\n=== Testing Cache Config Modification ===");
println!("Setting cache config to prefer shared memory...");
dev.set_cache_config(sys::CUfunc_cache::CU_FUNC_CACHE_PREFER_SHARED)?;
let updated_cache_config = dev.get_cache_config()?;
println!("Updated cache config: {:?}", updated_cache_config);
dev.set_cache_config(cache_config)?;
println!("Restored cache config to {:?}", cache_config);
Ok(())
}