A coherent accelerator shares memory with the CPUs through snoop or directory hardware. A non-coherent one moves explicit buffers with clean, invalidate and fence operations.
Choice | Hardware pays | Software pays |
|---|---|---|
Coherent | Snoop and directory traffic | Almost nothing per buffer |
Non-coherent | Nothing per buffer | 64 cleans plus fence per 4 KiB buffer at 64 B lines |
A 4 KiB buffer holds 4096 / 64 = 64 lines. Non-coherent handoff cleans all 64 before launch.
The driver rings a doorbell, the engine fetches descriptors, computes, then raises an interrupt. Each stage has a timeout and a clean restart rule.
Assume 50 ns fetch plus 400 ns job plus 100 ns interrupt service. Steady state is 550 ns per job, and the timeout is 4 times that plus margin, about 2.5 us.
per job: 50 ns + 400 ns + 100 ns = 550 ns
timeout: 4 x 550 ns = 2200 ns + 300 ns margin = 2500 ns = 2.5 us
queue bound (Little): 32 entries x 20 ns service = 640 nsShared fabrics need class guarantees, not averages. Reserve command-response bandwidth, isolate bulk DMA, and read per-class latency distributions.
Isolation costs real arbitration slots, so the gain is bounded throughput loss, never negligible loss. Signoff stays conditional on owner and expiry.
Gate | Pass rule |
|---|---|
Concurrency | Platform contracts hold under CPU plus accelerator load |
Power transitions | No command accepted mid-transition, replay storm bounded |
Isolation | Stream-ID table denies unmapped pages, faults signaled |
When no shared mutable state escapes explicit sync, and the saved snoop traffic beats 64 cleans plus a fence per 4 KiB.
Arbitration and queue isolation under concurrency, then interrupt handling and firmware scheduling.