当前位置: 首页 > news >正文

TPU-MLIR 项目源码结构分析

TPU-MLIR 项目源码结构分析

本文用作学习记录和交流分享,主要内容为 TPU-MLIR 的源码框架分析和构建流程分析。源码地址:https://github.com/sophgo/tpu-mlir

文件结构

从最外层开始分析

envsetup.sh 该脚本用于配置和初始化开发环境,其中对路径等环境变量进行设置,自定义了一些函数等操作。

build.sh 该脚本负责工程的构建,以及构建前的准备工作。

unittests 路径下存放的是单元测试集,包含以下内容:Backend,Linalg,Support,Target

tools 其中主要是开发和调试过程中可能用到的辅助工具

third_party 是依赖的一些第三方库:

  • CV18xx:CV18xx 芯片相关的一些库文件;
  • atomic_exec:其中包含一些链接需要的 .so 动态链接库文件;
  • cnpy:该项目是让 C++ 文件能够读写 .npy 文件,例如权重相关就使用该类型文件存储;
  • customlayer:其中主要和模型框架转换有关;
  • nntoolchain:算能的深度学习工具链;
  • or-tools:OR-Tools 是一个用于进行优化的开源软件套件,经过调整,可解决车辆路线、数据流、整数和线性编程以及约束编程方面到问题;
  • ppl:应该也是一个算能的工具;
  • progressbar:一个非常简单、完全可定制的、用于 C++ 循环的进度条(带百分比)。

regression 中是一些用于回归的测试的数据集等

python 该路径下有很多 Python 脚本文件,而且通过目录中的 CMakeLists 文件分析得出,这部分代码主要是关于连接 C++ 代码实现和 Python 脚本调用的。最后暴露给用户的都是 Python 脚本,以便于用户使用。用户主要使用的 model_transform.pymodel_deploy.pymodel_deploy.py 等 python 脚本也存放在该目录中。

lib 该目录中存放的是 TPU-MLIR 的核心 C++ 实现源码,有以下关键内容:

  • Interfaces:定义接口相关的模块。
  • Traits:定义与类型特征或属性相关的模块。
  • Dialect:定义 MLIR 方言的模块包含 TOP 和 TPU。
  • Support:提供各种工具或支持功能。
  • Conversion:包含将操作或方言转换成其他形式的代码。
  • Backend:与后端硬件或执行环境相关的模块。
  • Builder:关于构建 TPU 最终运行的 bmodel 文件。
  • CAPI:C++ API 与 Python 脚本建立关联相关。

include 其中为对应 lib 中实现的模块的头文件,以供其他模块调用,TOP 和 TPU 这两个 Dialect 的关键实现也存放在这里:include/tpu_mlir/Dialect/Top/IR/TopOps.td ,include/tpu_mlir/Dialect/Tpu/IR/TpuOps.td

ignore 存放一些没有实际使用到但可供参考的文件,有一些开发日志之类的文档。

experimental 应该是一些尚处于试验或开发阶段的功能和模块。

docker 项目依赖一些 Docker 环境配置。

capi 该路径下存放了 https://github.com/sophgo/tpu-mlir/blob/master/capi/runtime_cpu.c 是一个C语言实现的从输入文件读取数据,将其传递给模型进行推理,然后将推理结果写入输出文件。但是从 CMake 文件分析,该 .c 文件并没有实际参与编译,推测是一个示例代码。

bindings 其中主要是通过 PyBind11C++ 中的功能实现暴露给 Python,方便用户调用。

以上内容,均为个人分析推测,使用AI工具辅助,不是官方解释。如有分析错误或不足的地方,欢迎指正交流。

Refer:

  • https://github.com/sophgo/tpu-mlir
  • https://onnx.ai/onnx-mlir/
http://www.lryc.cn/news/493523.html

相关文章:

  • IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“
  • Sourcetree:一款强大的Git客户端
  • Linux环境变量与本地变量
  • ChatGPT的应用场景:开启无限可能的大门
  • QT按下两次按钮,保存这期间内变换的QtextEdit控件内的数据
  • daos源码编译
  • HTML飞舞的爱心
  • C++中智能指针的使用及其原理 -- RAII,内存泄漏,shared_ptr,unique_ptr,weak_ptr
  • Linux服务器安装mongodb
  • Android11修改摄像头前后置方法,触觉智能RK3568开发板演示
  • leetcode 212. 单词搜索 II
  • Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计
  • 《Docker Registry(镜像仓库)详解》
  • AI前景分析展望——GPTo1 SoraAI
  • 超级详细讲解转义字符,\? \‘ \f \0 \t等等!!!
  • 微信小程序数据请求教程:GET与POST请求详解
  • Linux系统管理基础指南--习题
  • JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续
  • IOC控制反转详解
  • Qml-TabBar类使用
  • C# 常量
  • diffusion model: prompt-to-prompt 深度剖析
  • uniapp实现APP版本升级
  • uniapp强制修改radio-group内单选组件的状态方法
  • 学习python的第十四天之函数——高阶函数和偏函数
  • 数据结构之二叉树详解:从原理到实现
  • iOS 系统中使用 webView 打印 html 的打印边距问题
  • 如何在ubuntu上调试core dump
  • 基于 JNI + Rust 实现一种高性能 Excel 导出方案(上篇)
  • 【Maven】依赖管理