Skip to main content

unified_probe/
unified_probe.rs

1//! Verify native GPU/XDNA access to one owned system-memory allocation.
2use 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}