2023-09-03
TVM在编译过程中,经历了
graph LR
A[3rd IR] --> B[Relay IR]
B --> C[TIR]
C --> D[LLVM IR]
C -->E[Source]
这一系列的过程。其中在生成cpu、rocm、nvptx、hexagon等平台的相关代码的时候,会先由TVM的TIR转换为LLVM IR,在后续由LLVM生...
阅读全文
2023-09-03
首先假设我的文件全称:/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh.
获取文件名使用${},${str##*/}这个命令的作用就是去掉变量str从左边算起的最后...
阅读全文
2023-09-03
为实现多种语言支持,需要满足以下几点:
部署:编译结果可以从python/javascript/c++调用。
Debug: 在python中定义一个函数,在编译函数中调用。
链接:编写驱动程序以调用设备特定代码(如CUDA),可以在编译的host侧调用
原型:python侧定义IR PASS,并从C++后端调用该代码
接口暴露:c++后端代码暴露到pyth...
阅读全文
2023-08-09
本文为tvm 教程的翻译版。这部分介绍了如何在tvm中添加新的relay算子,具体的是以一个累乘(cumprod)算子为例进行介绍。
新增relay算子基本是下面几个步骤:
定义新增算子的属性节点(Attribute Node),声明在编译时已知的固定参数
为新增算子编写类型关系,以集成到relay的类型系统中
使用C++ RELAY_REGISTER_O...
阅读全文
2023-08-09
从TVM的官方Tutorial里面,介绍了如何新增自定义算子。(这是我翻译的)
之前的文章讲到了onnx 算子转换到Relay IR的过程下面以Conv2d算子介绍,编译过程中 Relay IR是如何被调用的。
relay 算子调用上面的get_relay_op实际上是查找所有 relay ir算子,其代码在python/tvm/relay/frontend...
阅读全文
2023-08-09
Relay Operator Strategy是建立Relay IR与TOPI算子库的桥梁,通过Relay Operator Strategy,每个Relay IR至少与一个compute和一个schedule注册关联起来。至少一个原因在于,一个算子在不同后端设备上有不同的实现,而且一个算子可能有多种计算算法,适应不同场景。
在增加relay IR 的教程里...
阅读全文
2023-08-09
调用链tvm搜索算子在需要多线程运行的算子,是在codegen阶段时插入TVMBackendParallelLaunch的调用。TVMBackendParallelLaunch 是tvm的线程池并行化入口,具体如下
12345678910111213141516171819/*! * \brief The callback function to execu...
阅读全文
2023-08-09
C++’s most vexing parse 是 Scott Meyers 在其名著《Effective STL》中创造的一个术语。Scott 用这个术语来形容 C++ 标准对于 declaration 语句的消歧义(ambiguity resolution)约定与常人的认知相悖。
最令人烦恼的解析 (most vexing parse)是C++中的一种反...
阅读全文
2023-08-08
上一篇介绍了onnx模型在tvm中优化的总体流程。
在这一篇中,介绍onnx模型到relay模型的转换流程,主要涉及了以下几个方面:
onnx算子到relay算子转换
relay算子实现
这一篇介绍onnx算子到relay算子转换过程
onnx算子到relay算子转换12# onnx -> relaymod, params = relay.fron...
阅读全文
2023-08-07
本文以及后续文章,着重于介绍tvm的完整编译流程。后续文章将会按照以上流程,介绍tvm源码。其中涉及一些编程技巧、以及tvm概念,不在此部分进行进一步讲解,另有文章进行介绍。
首先介绍一下,从onnx模型转为tvm模型的基本步骤。大致可以分为以下几步:
onnx模型转到relay IR
基于Relay IR优化
导出优化模型
加载运行模型
1234567...
阅读全文
上一页 1 2 3 4 5 6 下一页