@startuml skinparam backgroundColor #FEFEFE box "Application" #0091BD participant "main()" as main end box box "Driver library" #00C1DE participant "Device" as ddev participant "Buffer" as dbuf participant "Network" as dnet participant "Inference" as dinf end box box "Kernel driver" #7D868C participant "Device" as kdev participant "Buffer" as kbuf participant "Network" as knet participant "Inference" as kinf end box note over ddev Create device end note activate main main -> ddev++: Device() ddev -> kdev++: open() return file descriptor return note over dnet Create network, parse network model end note main -> dnet++: Network(device, user_buffer, size) dnet -> knet++: ioctl(NETWORK_CREATE) return file descriptor dnet -> dnet: Parse network model return loop Allocate and fill IFM buffers main -> dbuf++: Buffer(device) dbuf -> kbuf++: ioctl(BUFFER_CREATE) return file descriptor return end loop loop Allocate OFM buffers main -> dbuf++: Buffer(device) dbuf -> kbuf++: ioctl(BUFFER_CREATE) return file descriptor return end loop note over dinf Create and run inference end note main -> dinf++: Inference(network, ifm, ofm) dinf -> kinf++: ioctl(INFERENCE_CREATE) return file descriptor return main -> dinf++: wait(file descriptor) dinf -> kinf++: poll(file descriptor) return return @enduml