unified_probe/
unified_probe.rs1use hrx::{
3 Result,
4 fabric::{Device, Engine, Fabric},
5};
6fn main() -> Result<()> {
7 let fabric = Fabric::resolve()?;
8 let gpu = Device::open(Engine::Gpu, 0)?;
9 let npu = Device::open(Engine::Xdna, 0)?;
10 let buffer = fabric.allocate(1 << 20, &[gpu.clone(), npu.clone()])?;
11 println!(
12 "GPU address={:#x}, XDNA DMA address={:#x}",
13 buffer.device_address(&gpu)?,
14 buffer.device_address(&npu)?
15 );
16 let fill = gpu.queue()?.prepare_fill(&buffer, 0, buffer.len(), 0x5a)?;
17 unsafe { fill.dispatch() }?.wait()?;
18 let mut bytes = vec![0; buffer.len()];
19 buffer.read(0, &mut bytes)?;
20 assert!(bytes.iter().all(|&byte| byte == 0x5a));
21 println!("native shared allocation: {} bytes verified", bytes.len());
22 Ok(())
23}