| @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(<device node>) |
| 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 |