打开推理池
打开加密容器或明文模型,得到 darra_pool*。options_or_null == nullptr 时 workers=1、queue=64、overflow=FAIL。C++ 与 C 共用同一份 C ABI。
指名 Provider 不可用 = fail-closed,绝不静默降级。对应包未装:内部 darra_runtime_ensure 一次(无进度)。max_workers 合法 1..8,硬顶 8;0 视为 1。超出范围 / size 未填 = DARRA_INTERNAL。
加密容器
darra_pool_open()
int32_t darra_pool_open(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
const darra_pool_options* options_or_null,
darra_pool** out);
打开加密模型池。激活码 / 试用码只在打开这一步用,与 会话打开 同一套三种用法。
参数:
container_path(const char*) —.darmodel路径(必填)key_path_or_null(const char*) — 旧双文件旁路.darmkey;DARB1 内嵌钥匙,新分发传nullptrpassword_or_null(const char*) — 激活码或试用码。已绑机 / WhiteBox 试用传nullptrprefer_provider_or_null(const char*) — 指名 Provider;nullptr= 自动选。指名但不可用 = fail-closedoptions_or_null(const darra_pool_options*) —nullptr= workers=1、queue=64、FAIL。非nullptr时须先填options->sizeout(darra_pool**) — 成功时*out拿到池;失败时*out == nullptr
返回值:
int32_t—DARRA_OK成功;非 0 = 错误码
典型错误同 darra_session_open:DARRA_PASSWORD_REQUIRED / DARRA_PASSWORD_WRONG / DARRA_MACHINE_MISMATCH / DARRA_TRIAL_EXHAUSTED / DARRA_BAD_CONTAINER / DARRA_IO_NOT_FOUND / DARRA_UNSUPPORTED_PAYLOAD / DARRA_PROVIDER_MISSING / DARRA_HARDWARE_MISSING / DARRA_DRIVER_TOO_OLD / DARRA_NETWORK_FAILED / DARRA_CHECKSUM_MISMATCH / DARRA_CANCELLED / DARRA_INTERNAL。
相关结构:
typedef enum darra_overflow {
DARRA_OVERFLOW_FAIL = 0, // 队列满 → submit 立即 DARRA_BUSY
DARRA_OVERFLOW_BLOCK = 1, // 队列满 → submit 等到有空位
DARRA_OVERFLOW_DROP_OLDEST = 2 // 丢掉最旧未开跑任务(它 wait 得 DARRA_BUSY)
} darra_overflow;
typedef struct darra_pool_options {
uint32_t size;
int32_t max_workers; // 0=1;合法 1..8(硬顶 8)
int32_t queue_capacity; // 0=64;合法 1..4096
int32_t overflow; // darra_overflow
darra_session_options worker; // size=0 则各 worker 用会话默认选项
int32_t weight; // 0=100;与其它池/会话抢同一 GPU 的相对份额
} darra_pool_options;
worker.unique强制为 1(即使填 0,Core 也会当成 1)。worker的 intra/inter/affinity/gpu/weight 语义同 darra_session_options。- 池级
weight与 worker.weight:多模型抢同一卡时看池级weight+darra_sched_set_gpu_slots。不是 CUDA SM%。 worker.size = 0:各 worker 用会话默认(自动线程、不设亲和、gpu_device = 0)。
禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。本结构只约束本池 worker 线程。
示例:
darra_pool_options opt{};
opt.size = sizeof(opt);
opt.max_workers = 2;
opt.queue_capacity = 100;
opt.overflow = DARRA_OVERFLOW_DROP_OLDEST;
opt.worker.size = sizeof(opt.worker);
opt.worker.unique = 1;
opt.worker.gpu_device = 0;
opt.weight = 100;
darra_pool* pool = nullptr;
int32_t rc = darra_pool_open("model.darmodel", nullptr, nullptr, nullptr, &opt, &pool);
if (rc != DARRA_OK) {
darra_error_t err{};
err.size = sizeof(err);
darra_last_error(&err);
return static_cast<int>(rc);
}
明文模型
darra_pool_open_plain()
int32_t darra_pool_open_plain(const char* model_path,
const char* prefer_provider_or_null,
const darra_pool_options* options_or_null,
darra_pool** out);
打开明文模型池。与 darra_pool_open 同一推理路径,只跳过容器解码与验票。
参数:
model_path(const char*) —.onnx/.pdmodel(伴生.pdiparams)/ 含二者的目录。.pt/.pth仍拒 →DARRA_UNSUPPORTED_PAYLOADprefer_provider_or_null(const char*) — 指名 Provider;nullptr= 自动选options_or_null(const darra_pool_options*) —nullptr= workers=1、queue=64、FAILout(darra_pool**) — 成功时*out拿到池;失败时*out == nullptr
返回值:
int32_t—DARRA_OK成功;非 0 = 错误码
Paddle 是运行时载荷(PayloadKind = paddle)。Windows 收到 rknn 载荷同样 DARRA_UNSUPPORTED_PAYLOAD。
示例:
darra_pool* pool = nullptr;
int32_t rc = darra_pool_open_plain("model.onnx", nullptr, nullptr, &pool);