热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Tengine端侧推理框架】——注册机制(一)

code:https:github.comOAIDTengine图片,代码都来自以上项目。1.简介Tengine由OPENAILAB主导开发ÿ

code:https://github.com/OAID/Tengine
图片,代码都来自以上项目。
在这里插入图片描述


1. 简介

Tengine 由 OPEN AI LAB 主导开发,该项目实现了深度学习神经网络模型在嵌入式设备上的快速、高效部署需求。为实现在众多 AIoT 应用中的跨平台部署,本项目使用 C 语言进行核心模块开发,针对嵌入式设备资源有限的特点进行了深度框架裁剪。同时采用了完全分离的前后端设计,有利于 CPU、GPU、NPU 等异构计算单元的快速移植和部署,降低评估、迁移成本。

2. Content

因为Tengine是由C语言开发的,和ncnn,mnn等用C++开发的框架有一定的区别。因为只能用函数,所以op,serializer(模型解析器)等的注册都是要在程序的时候进行的。而且对op,serializer等组织需要使用函数指针来模拟C++的多态性

这里对op的注册机制进行解读。

首先给出数据结构之间的关系图:
在这里插入图片描述

2.1 流程

这里只是对op_methodop_name的注册梳理,以absval的注册为例

  • 定义好absvalop_methodop_name

struct method m;
m.version = 1;
m.init = init_op; // 函数指针
m.release = release_op; // 函数指针return register_op(OP_ABSVAL, OP_ABSVAL_NAME, &m);

  • 初始化static vector_t* internal_op_method_registrystatic vector_t* internal_op_name_registry这里可以就着上面的关系图进行梳理

这里最外面的容器是vector_t, 然后vector_tmem才是指向注册数据的位置。mem指向8个vector_entry_t空间(初始为8个,如果不够了按8个递增申请),valid指示数据是否写入,这里的unsigned char data[]指明method,op_name在内存的初始位置。后面在使用的时候,就在internal_op_method_registryinternal_op_name_registry去找。

vector_t* v &#61; (vector_t*)sys_malloc(sizeof(vector_t));if (v &#61;&#61; NULL){return NULL;}v->elem_num &#61; 0;v->elem_size &#61; elem_size;v->free_func &#61; free_data;v->entry_size &#61; align(elem_size &#43; (int)sizeof(vector_entry_t), TE_VECTOR_ALIGN_SIZE); // 32&#xff0c; 要写入的数据 字节数v->ahead_num &#61; 8; // 为什么有8个空间&#xff0c; 以8的倍数进行拓展v->space_num &#61; v->ahead_num;v->real_mem &#61; sys_malloc(v->entry_size * v->space_num &#43; TE_VECTOR_ALIGN_SIZE); // 32*8&#43;8v->mem &#61; align_address(v->real_mem, TE_VECTOR_ALIGN_SIZE); // align &#61; 8, 对申请的内存进行 8 字节对齐for (int i &#61; 0; i < v->space_num; i&#43;&#43;){vector_entry_t* e &#61; get_vector_entry(v, i); // 前面放 vector_entry_te->valid &#61; 0; // 是否写入的标志位}return v;

  • 注册op_name
    下面的 push_vector_data , 会用 memcpy 把栈上的数据内容 copy 到已申请的堆内存上memcpy(e->data, data, v->elem_size);

ir_op_name_entry_t op_map;op_map.type &#61; type;op_map.name &#61; name;return push_vector_data(internal_op_name_registry, &op_map); // 写入数据&#xff0c;如果

  • 同理注册method
    这里在注册前会internal_op_method_registry遍历&#xff0c;看是否已经注册

static int register_op_registry(ir_method_t* method)
{if (find_op_method(method->type, method->version)) // 遍历检查是否已经注册{return -1;}return push_vector_data(internal_op_method_registry, method);
}

总结


  • 总结起来就是把各个opir_method_t数据保存到internal_op_method_registry&#xff0c; ir_op_name_entry_t数据保存到internal_op_name_registry
  • 对照着上面的数据关系图来梳理

推荐阅读
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文详细探讨了 Java 中 org.apache.gobblin.metrics.GobblinMetrics 类下的 getName() 方法的使用场景及其代码实现,提供了多个实际应用示例以加深理解。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 机器学习(ML)三之多层感知机
    深度学习主要关注多层模型,现在以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏 ... [详细]
author-avatar
广药中山校区艺术团啦啦队
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有