打开会话
打开加密容器或明文模型,得到 darra_session*。本函数 ≡ 对应 *_ex(..., options=NULL)。
指名 Provider 不可用 = fail-closed,绝不静默降级。对应包未装:内部 darra_runtime_ensure 一次(无进度)。想看进度请先自己调 ensure(幂等)。
加密容器
darra_session_open()
int32_t darra_session_open(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
darra_session** out);
打开加密容器(.darmodel,DARM1)建会话。本函数 ≡ darra_session_open_ex(..., options=NULL)。
参数:
container_path(const char*) —.darmodel路径(必填)key_path_or_null(const char*) —.darmkey授权文件路径;NULL = 走密码 / 试用通道password_or_null(const char*) — 永久密码;NULL = 走授权文件 / 试用通道。两个通道至少给一个;都给则 key 文件优先验票prefer_provider_or_null(const char*) — 指名 Provider(见 运行时);NULL = 按 PayloadKind × 硬件 × 已装包自动选out(darra_session**) — 成功时*out拿到会话;失败时*out == NULL
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code
典型错误:DARRA_IO_NOT_FOUND / DARRA_IO_DENIED / DARRA_BAD_CONTAINER / DARRA_BAD_LICENSE / DARRA_PASSWORD_REQUIRED / DARRA_PASSWORD_WRONG / DARRA_MACHINE_MISMATCH / DARRA_TRIAL_EXHAUSTED / DARRA_UNSUPPORTED_PAYLOAD(如 Windows 上 rknn 载荷)/ DARRA_PROVIDER_MISSING / DARRA_PROVIDER_ABI_MISMATCH / DARRA_HARDWARE_MISSING / DARRA_DRIVER_TOO_OLD / DARRA_NETWORK_FAILED / DARRA_CHECKSUM_MISMATCH / DARRA_CANCELLED(后三码来自内部 ensure)。
示例:
darra_session* s = NULL;
int32_t rc = darra_session_open("model.darmodel", "model.darmkey", NULL, NULL, &s);
if (rc != DARRA_OK) {
darra_error_t err; err.size = sizeof(err);
darra_last_error(&err);
return rc;
}
darra_session_open_ex()
int32_t darra_session_open_ex(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
const darra_session_options* options_or_null,
darra_session** out);
打开加密容器建会话(带选项)。options_or_null == NULL 时与 darra_session_open 逐字相同。非 NULL 时须先填 options->size;size 未填 / 线程数为负 = DARRA_INTERNAL。其余参数、错误码、fail-closed、内部 ensure、线程安全:同 darra_session_open。
参数:
container_path(const char*) —.darmodel路径(必填)key_path_or_null(const char*) —.darmkey;NULL = 走密码 / 试用通道password_or_null(const char*) — 永久密码;NULL = 走授权文件 / 试用通道prefer_provider_or_null(const char*) — 指名 Provider;NULL = 自动选options_or_null(const darra_session_options*) — NULL = 自动线程、不设亲和out(darra_session**) — 成功时*out拿到会话;失败时*out == NULL
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code
相关结构:
typedef struct darra_session_options {
uint32_t size; /* 调用方填 sizeof(darra_session_options) */
int32_t intra_op_threads; /* 0=自动,自动上限 min(硬件逻辑核, 4);>0 照填;<0 = DARRA_INTERNAL */
int32_t inter_op_threads; /* 同上 */
uint64_t cpu_affinity_mask; /* 0=不设;非 0=本会话线程池 CPU 位图(bit0=逻辑核 0) */
} darra_session_options;
禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。本结构只约束本会话推理线程池。多会话各用各的线程池,互不抢同一把全局锁(darra_runtime_ensure 的进程内互斥除外)。
示例:
darra_session_options opt;
memset(&opt, 0, sizeof(opt));
opt.size = sizeof(opt);
opt.intra_op_threads = 2;
opt.inter_op_threads = 1;
darra_session* s = NULL;
int32_t rc = darra_session_open_ex("model.darmodel", "model.darmkey", NULL, NULL, &opt, &s);
明文模型
darra_session_open_plain()
int32_t darra_session_open_plain(const char* onnx_path,
const char* prefer_provider_or_null,
darra_session** out);
打开明文模型建会话(Studio 试跑 / 客户自有无需加密模型)。本函数 ≡ darra_session_open_plain_ex(..., options=NULL)。与 darra_session_open 同一推理路径,只跳过容器解码与验票。
参数:
onnx_path(const char*) — 历史参数名,语义为明文模型路径:.onnx文件;.pdmodel文件(同目录须有对应.pdiparams);含*.pdmodel+*.pdiparams的目录。.pt/.pth仍拒 →DARRA_UNSUPPORTED_PAYLOADprefer_provider_or_null(const char*) — 同darra_session_openout(darra_session**) — 同darra_session_open
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code
Paddle 是运行时载荷(PayloadKind=paddle)。其余(含内部 ensure、fail-closed)同 darra_session_open。Windows 收到 rknn 载荷同样 DARRA_UNSUPPORTED_PAYLOAD。
示例:
darra_session* s = NULL;
int32_t rc = darra_session_open_plain("model.onnx", NULL, &s);
darra_session_open_plain_ex()
int32_t darra_session_open_plain_ex(const char* model_path,
const char* prefer_provider_or_null,
const darra_session_options* options_or_null,
darra_session** out);
打开明文模型建会话(带选项)。options_or_null == NULL 时与 darra_session_open_plain 逐字相同。选项结构见 darra_session_open_ex。
参数:
model_path(const char*) —.onnx/.pdmodel(伴生.pdiparams)/ 含二者的目录。.pt/.pth仍拒prefer_provider_or_null(const char*) — 指名 Provider;NULL = 自动选options_or_null(const darra_session_options*) — NULL = 与darra_session_open_plain完全相同out(darra_session**) — 成功时*out拿到会话;失败时*out == NULL
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code