本文共 2121 字,大约阅读时间需要 7 分钟。
code:https://github.com/OAID/Tengine
version: 88b4b7a2 图片,代码都来自以上项目。
…
static struct cpu_device cpu_dev
注册到internal_device_registry
static struct cpu_device cpu_dev = { .base = { .name = CPU_DEVICE_NAME, .interface = &cpu_interface, .allocator = &cpu_allocator, .optimizer = &cpu_optimizer, .scheduler = NULL, .privacy = NULL, }, .master_cpu = 0, .cpu_model = 0,};int register_device(ir_device_t* device){ initialize_device_registry(device->name); // 为 devices 申请空间 if (NULL == internal_device_registry) { TLOG_CRIT("Tengine: Can not register %s, module was not be inited.\n", device->name); return -1; } if (NULL != device->interface && NULL != device->interface->init) { int ret = device->interface->init(device); // 注册不同devices上的op, op和devices没有联系起来 if (0 != ret) { TLOG_CRIT("Tengine: Can not register %s, module init was failed(%d).\n", device->name, ret); return -1; } } int ret = push_vector_data(internal_device_registry, &device); if (0 != ret) { TLOG_CRIT("Tengine: Can not register %s, module cannot not be inserted.\n", device->name); return ret; } return 0;}
cpu_builtin_ops_registry
1. ret = register_absval_ref_op();ret = register_add_n_ref_op();2. static struct node_ops hcl_node_ops = { .prerun = prerun, .run = run, .reshape = NULL, .postrun = NULL, .init_node = init_node, .release_node = release_node, .score = score};int register_absval_ref_op(){ return register_builtin_node_ops(OP_ABSVAL, &hcl_node_ops); // OP_ABSVAL:索引, hcl_node_ops:方法}
static
类型中转载地址:http://duhws.baihongyu.com/