跳到主要内容

推理池

一个 darra_pool* = 同一模型的 1..8 个 darra_session + 有界任务队列。每张图仍走 darra_session_infer_image(单图)。没有 N=100 的批张量 API。C++ 与 C 共用同一份 C ABI,函数仍是 darra_ai.h 导出。

darra_pool_open / open_plain

├── darra_pool_submit 突发或流式进图,拿到 ticket
├── darra_pool_wait 阻塞等 JSON
├── darra_pool_try_wait 非阻塞;没好返回 DARRA_BUSY
└── darra_pool_close
提示
  • 打开加密 / 明文池 → 打开
  • 提交 / 等待 / 关闭 → API
  • 单会话推理 → 会话
  • DARRA_BUSY错误

max_workers 默认 1,硬顶 8。不是 100 个会话。GPU 上 yolov8n 建议 1–2;8GB+ 可试 2–4。100 张突发 = 队列,不是 100 份权重。worker.unique 强制为 1,不会跟用户 open 的驻留实例挤成一份。

Core 不链 CUDA,不探测「显存还能塞几个」——由调用方设 max_workers。多卡:每个池钉 worker.gpu_device;4 卡 = 4 个池,卡号 0..3。多模型抢同一卡:weight + darra_sched_set_gpu_slots。不是 CUDA SM 百分比。

PLC:池必须在扫描周期外的线程里跑。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。

句柄

typedef struct darra_pool darra_pool;

不透明句柄。定义只在 Core 内部,绑定侧永远只持有指针。darra_pool_close 之后句柄失效,再用 = 未定义行为。nullptr 关闭是安全的。

进图

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

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

  • FAIL — 队列满立即 DARRA_BUSY
  • BLOCKsubmit 卡住背压
  • DROP_OLDEST — 丢掉最旧未开跑的任务(摄像头保活最新帧);被挤掉的票 waitDARRA_BUSY