← Back to C-Kernel-Engine Docs Doxygen Source Documentation
ckernel_registry.c
Go to the documentation of this file.
1 #include "ckernel_registry.h"
2 
3 #include <stdio.h>
4 
5 static const char *ck_op_name(CKOpType op)
6 {
7  switch (op) {
8  case CK_OP_RMSNORM: return "RMSNORM";
9  case CK_OP_LINEAR_QKV: return "LINEAR_QKV";
10  case CK_OP_ATTENTION: return "ATTENTION";
11  case CK_OP_ADD: return "ADD";
12  case CK_OP_LINEAR: return "LINEAR";
13  case CK_OP_SPLIT: return "SPLIT";
14  case CK_OP_SWIGLU: return "SWIGLU";
15  case CK_OP_RMSNORM_BWD: return "RMSNORM_BWD";
16  case CK_OP_LINEAR_QKV_BWD: return "LINEAR_QKV_BWD";
17  case CK_OP_ATTENTION_BWD: return "ATTENTION_BWD";
18  case CK_OP_ADD_BWD: return "ADD_BWD";
19  case CK_OP_LINEAR_BWD: return "LINEAR_BWD";
20  case CK_OP_SPLIT_BWD: return "SPLIT_BWD";
21  case CK_OP_SWIGLU_BWD: return "SWIGLU_BWD";
22  default: return "UNKNOWN";
23  }
24 }
25 
27 {
28  switch (op) {
29  case CK_OP_RMSNORM:
30  case CK_OP_LINEAR_QKV:
31  case CK_OP_ATTENTION:
32  case CK_OP_ADD:
33  case CK_OP_LINEAR:
34  case CK_OP_SPLIT:
35  case CK_OP_SWIGLU:
36  return 1;
37  default:
38  return 0;
39  }
40 }
41 
43 {
44  if (!graph || !graph->nodes || graph->num_nodes <= 0) {
45  return -1;
46  }
47 
48  for (int i = 0; i < graph->num_nodes; ++i) {
49  CKOpType op = graph->nodes[i].op;
50  if (!ck_op_supported(op)) {
51  fprintf(stderr,
52  "Unsupported op in IR: %s (layer=%u node=%u)\n",
53  ck_op_name(op),
54  (unsigned)graph->nodes[i].id.layer,
55  (unsigned)graph->nodes[i].id.node);
56  return -1;
57  }
58  }
59  return 0;
60 }
CKOpType
Definition: ckernel_ir.h:35
@ CK_OP_LINEAR_BWD
Definition: ckernel_ir.h:48
@ CK_OP_SWIGLU
Definition: ckernel_ir.h:42
@ CK_OP_RMSNORM_BWD
Definition: ckernel_ir.h:44
@ CK_OP_SWIGLU_BWD
Definition: ckernel_ir.h:50
@ CK_OP_ADD
Definition: ckernel_ir.h:39
@ CK_OP_SPLIT
Definition: ckernel_ir.h:41
@ CK_OP_LINEAR_QKV_BWD
Definition: ckernel_ir.h:45
@ CK_OP_ATTENTION_BWD
Definition: ckernel_ir.h:46
@ CK_OP_SPLIT_BWD
Definition: ckernel_ir.h:49
@ CK_OP_LINEAR_QKV
Definition: ckernel_ir.h:37
@ CK_OP_LINEAR
Definition: ckernel_ir.h:40
@ CK_OP_RMSNORM
Definition: ckernel_ir.h:36
@ CK_OP_ADD_BWD
Definition: ckernel_ir.h:47
@ CK_OP_ATTENTION
Definition: ckernel_ir.h:38
int ck_ir_validate_supported(const CKIRGraph *graph)
int ck_op_supported(CKOpType op)
static const char * ck_op_name(CKOpType op)
CKIRNode * nodes
Definition: ckernel_ir.h:75
int num_nodes
Definition: ckernel_ir.h:74
CKOpType op
Definition: ckernel_ir.h:65
CKKernelId id
Definition: ckernel_ir.h:64
uint16_t node
Definition: ckernel_ir.h:55
uint16_t layer
Definition: ckernel_ir.h:54