跳到主要内容

推理池

一个 darra_pool* = 同一模型的 1..8 个 darra_session + 有界任务队列。每张图仍走 darra_session_infer_image。没有按张数批张量的 API。

相关页面
  • 打开加密容器 / 明文模型池 → 打开
  • 提交 / 等待 / GPU 槽 → API
  • 单会话推理 → 推理
  • DARRA_BUSY错误码

功能概览

页面函数说明
打开darra_pool_open / darra_pool_open_plain打开加密容器或明文模型池
APIdarra_pool_submit / darra_pool_wait / darra_pool_try_wait / darra_pool_close / darra_sched_set_gpu_slots进图、取结果、关池、GPU 并发槽

句柄

typedef struct darra_pool darra_pool;

不透明句柄:定义只在 Core 内部,绑定侧永远只持有指针。worker 的 unique 强制为 1,不会跟调用方自己 darra_session_open 的驻留实例挤成一份。

darra_pool_close 之后句柄失效,再用 = 未定义行为。NULL 关闭是安全的。

流程

darra_sched_set_gpu_slots     可选;同卡多模型才需要

darra_pool_open / open_plain
│ 验票 / 解密 / 按 PayloadKind × 硬件选 Provider
│ 建 max_workers 个独立会话(硬顶 8)

darra_pool*

├─ darra_pool_submit 进一张图,立刻返回 ticket;字节已拷走

└─ darra_pool_wait / try_wait 取该票 JSON


darra_pool_close 拒新任务、等在飞 Infer 结束、关全部会话

100 张突发 = 把队列拉到 ≥ 张数(或 overflow=BLOCK),不是开 100 个会话。

进图与溢出

突发:一次 submit 多张。queue_capacity 必须 ≥ 突发量,或 overflow=BLOCK

流式:每毫秒一张。GPU 若 5ms/张,队列会积压,必须选 overflow

  • DARRA_OVERFLOW_FAIL — 队列满,submit 立即 DARRA_BUSY
  • DARRA_OVERFLOW_BLOCK — 队列满,submit 等到有空位
  • DARRA_OVERFLOW_DROP_OLDEST — 丢掉最旧未开跑的任务(它的 waitDARRA_BUSY);摄像头保最新帧

并行与 GPU

  • max_workers:0 = 1;合法 1..8,硬顶 8。默认 1。GPU 上 yolov8n 建议 1–2;8GB+ 可试 2–4。
  • Core 不链 CUDA,不探测「显存还能塞几个」——由调用方设 max_workers
  • 每会话 CPU 线程走嵌套的 workerintra_op_threads / inter_op_threads / cpu_affinity_mask / gpu_device / weight),同 打开会话
  • 禁止改 Windows ReservedCpuSets禁止动 PLC 隔离核。
  • 多卡:每个池钉 worker.gpu_device;4 卡 = 4 个池,卡号 0..3。
  • 多模型抢同一卡:weight + darra_sched_set_gpu_slots。这是并发推理槽,不是 CUDA SM%。
  • Paddle 是运行时载荷PayloadKind=paddle)。明文可接 .pdmodel(同目录须有 .pdiparams)或含二者的目录。.pt / .pth 仍拒。
  • Windows 无 RKNN。 rknn 载荷只在 linux-arm64 板端运行;Windows 收到即 DARRA_UNSUPPORTED_PAYLOAD。指名 edge-rknn 返回 DARRA_UNSUPPORTED_PLATFORM
  • PLC:池必须在扫描周期外的线程里跑。不承诺硬实时。

线程约定

函数线程安全备注
darra_pool_open / darra_pool_open_plain各开各的池可并发;缺包时内部 ensure 走同一把进程锁
darra_pool_submit可多线程 submit
darra_pool_wait / darra_pool_try_waitDROP_OLDEST 挤掉或尚未完成 → DARRA_BUSY
darra_pool_close仅在不与 submit / wait 并发时close 后句柄失效;NULL 安全
darra_sched_set_gpu_slots进程内调度,与池句柄无关