13 size_t len = strlen(s);
14 char *out = (
char *)malloc(len + 1);
18 memcpy(out, s, len + 1);
32 memset(out, 0,
sizeof(*out));
46 if (!graph || !name) {
78 const char *name = backward ? spec->
backward[dtype] : spec->
forward[dtype];
79 if (name && name[0]) {
84 if (name && name[0]) {
93 size_t key_len = strlen(key);
94 const char *cur = json;
95 while (cur + key_len <
end) {
96 if (memcmp(cur, key, key_len) == 0) {
106 while (cur <
end && (*cur ==
' ' || *cur ==
'\n' || *cur ==
'\r' || *cur ==
'\t')) {
117 const char *cur =
start + 1;
118 while (cur <
end && *cur !=
'"') {
119 if (*cur ==
'\\' && (cur + 1) <
end) {
125 if (cur >=
end || *cur !=
'"') {
128 size_t len = (size_t)(cur - (
start + 1));
129 char *buf = (
char *)malloc(len + 1);
133 memcpy(buf,
start + 1, len);
146 if (!p || p >=
end) {
150 if (p + 4 <=
end && memcmp(p,
"true", 4) == 0) {
154 if (p + 5 <=
end && memcmp(p,
"false", 5) == 0) {
164 if (strcmp(s,
"fp32") == 0)
return CK_DT_FP32;
165 if (strcmp(s,
"bf16") == 0)
return CK_DT_BF16;
166 if (strcmp(s,
"fp16") == 0)
return CK_DT_FP16;
167 if (strcmp(s,
"q4_0") == 0)
return CK_DT_Q4_0;
168 if (strcmp(s,
"q4_k") == 0)
return CK_DT_Q4_K;
169 if (strcmp(s,
"q6_k") == 0)
return CK_DT_Q6_K;
170 if (strcmp(s,
"q8_0") == 0)
return CK_DT_Q8_0;
180 const char *open = strchr(
start,
'{');
181 if (!open || open >=
end) {
184 const char *cur = open + 1;
187 if (cur >=
end || *cur ==
'}') {
194 cur = strchr(cur,
':');
211 cur = strchr(cur,
',');
222 if (!path || !graph) {
225 FILE *f = fopen(path,
"rb");
227 perror(
"ck_ir_v2_apply_meta: fopen");
230 if (fseek(f, 0, SEEK_END) != 0) {
239 if (fseek(f, 0, SEEK_SET) != 0) {
243 char *buf = (
char *)malloc((
size_t)len + 1);
248 size_t nread = fread(buf, 1, (
size_t)len, f);
251 const char *
end = buf + nread;
287 if (!cfg || !graph) {
290 memset(graph, 0,
sizeof(*graph));
322 for (
int layer = 0; layer < cfg->
num_layers; ++layer) {
323 for (
int p = 0; p < plan_count; ++p) {
329 node->
layer = (uint16_t)layer;
341 for (
int b = 0; b < limit; ++b) {
358 if (!forward || !backward) {
361 memset(backward, 0,
sizeof(*backward));
389 if (!backward->
nodes) {
396 for (
int p = 0; p < plan_count; ++p) {
402 node->
layer = (uint16_t)layer;
414 for (
int b = 0; b < limit; ++b) {
CKDataType
Supported data types in C-Kernel-Engine.
#define CK_IR_V2_MAX_DIMS
#define CK_IR_V2_MAX_BINDINGS
void ck_ir_v2_free(CKIRV2Graph *graph)
static char * ck_ir_v2_strdup(const char *s)
static int ck_ir_v2_apply_weight_dtypes(const char *json, const char *end, CKIRV2Graph *graph)
static int ck_ir_v2_copy_buffer_spec(const CKBufferSpec *spec, CKIRV2Buffer *out)
static const char * ck_ir_v2_select_kernel(const CKKernelSpec *spec, CKDataType dtype, int backward)
static int ck_ir_v2_parse_bool(const char *json, const char *key, const char *end, int *out)
static const char * ck_ir_v2_skip_ws(const char *cur, const char *end)
int ck_ir_v2_apply_meta(const char *path, CKIRV2Graph *graph)
static int ck_ir_v2_parse_string(const char *start, const char *end, char **out)
int ck_ir_v2_build_decoder(const CKModelConfig *cfg, CKIRV2Graph *graph)
static void ck_ir_v2_copy_shape(CKDimToken *dst, const CKDimToken *src)
static const char * ck_ir_v2_find_key(const char *json, const char *key, const char *end)
static CKDataType ck_ir_v2_parse_dtype(const char *s)
static int ck_ir_v2_find_buffer_index(const CKIRV2Graph *graph, const char *name)
int ck_ir_v2_build_decoder_backward(const CKIRV2Graph *forward, CKIRV2Graph *backward)
static const CKKernelSpec * ck_ir_v2_find_kernel_spec(const char *name)
const CKPlanStepV2 ck_decoder_forward_plan_v2[]
const size_t ck_decoder_forward_plan_v2_count
const size_t ck_decoder_backward_plan_v2_count
const CKKernelSpec ck_kernel_specs[]
const CKPlanStepV2 ck_decoder_backward_plan_v2[]
const CKBufferSpec ck_decoder_buffers[]
const size_t ck_kernel_spec_count
const size_t ck_decoder_buffer_count
CKIRV2Binding bindings[24]
const char * backward[CK_DT_COUNT]
const char * forward[CK_DT_COUNT]
const CKPlanBinding * bindings