Device
Occupancy
XRT will run two NPU clients at once. v1 protection is an exclusive advisory flock, not a daemon.
An xclbin reconfigures the tile array. Two processes loading different designs will clobber each other. IRON Lab treats occupancy like an FPGA bitstream slot, not like a GPU context.
What we measured (Krackan, XRT 2.21.75)
- Two sequential
NPUKernel()runs in one process: both succeed (second is cached). - Two concurrent processes each calling
NPUKernel(): both succeed. No exclusive device. xrtDeviceOpen(0)twice succeeds.xrtDeviceLoadXclbinFilereturns rc=-1,load_axlf: Operation not supported.
Hardware will not serialize clients. Constructing NPUKernel does not program the array; work happens on __call__.
v1 lock
ironlab-device takes an advisory flock plus a state file (pid, started_unix). ironlab load claims it and holds until Ctrl-C. Same-process second flock would succeed (locks are process-wide); a second process is refused.
ENOTSUP from load_axlf is expected on this NPU. The process keeps the lock anyway.
Not v1
Multi-bundle / partitions / a daemon: later (parakeet-aie-rev.19).
Write-up: docs/occupancy-findings.md in the repo.