自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 TVM Relay softmax算子调度分析

tvm relay 算子调度分析

2022-08-05 23:32:24 559

原创 [TVM PR 开发随笔] quantized::leakyrelu

TVM PR 11729开发思路和代码实现

2022-07-18 20:33:12 655

原创 TVM AVX512-VNNI原语手工调度matmul

TVM vnni tensorization

2022-07-11 20:53:16 733

原创 TVM TIR 各种Node类型举例

TVM TIR中有很多类型的Node。这里收录了全部可打印的类型:StmtNodeAnyNodePrimExprNodeTypeNodePrimFuncNodeIRModuleNodeArrayNodeIterVarNodeRangeNodeBufferNodeDataProducerNodeStringObjBufferRegionNodeTargetNode为了更好地理解这些Node。一方面可以去看它的数据结构,另一方面,也希望可以把它们和TIR代码对应起来。例1:

2022-03-27 02:05:46 635 1

原创 TVM (Typed)PackedFunc 作用

解析TVM源码中经常会看到PackedFunc,PackedFunc是为了支持多语言(Python,C++等)设计的封装结构。它使得某个C++的函数可以在注册后由Python调用,反之亦然。定义在tvm/runtime/packed_func.h下。TypedPackedFunc,顾名思义就是注明类型的封装函数。A PackedFunc wrapper to provide typed function signature. It is backed by a PackedFunc internal

2022-03-22 05:26:59 1512

原创 TVM TIR Pass - Lower Intrin/legalization 优化原理和代码解析

理论预备知识LLVM。LLVM是一个后端编译器组件,支持ARM/x86。在目标平台上,TVM生成的代码会交给LLVM继续编译和优化。LLVM Instrinsic function(LLVM内置函数),简单来说就是LLVM的函数API。一般来讲性能良好。llvm official docLower(我翻译成“下译”),指将IR映射成更偏硬件的过程。是什么Lower Intrin(sic)是TIR的Pass之一。它将TIR函数映射映射到LLVM的内置函数。Lower Intrin和legal

2022-03-19 21:13:59 884

原创 TVM TIR Pass - Loop Unroll 优化原理和代码解析

理论预备知识ForNode对象的数据结构class ForNode : public StmtNode { public: /*! \brief The loop variable. */ Var loop_var; /*! \brief The minimum value of iteration. */ PrimExpr min; /*! \brief The extent of the iteration. */ PrimExpr extent; /*! \br

2022-03-05 00:55:20 1052

原创 TVM Codegen概述

为什么不同硬件后端厂商提供不同的库,使得用户需要学习很多不同的编程范式。比如MKLDNN,cuDNN,TensorRT,因此需要一个统一的编程接口去调用这些库,从而让TVM可以正确依赖于这些后端库生成对应的代码。是什么let all users and hardware backend providers stand on the same pageprovide a feasible solution to allow specialized hardware or library to on

2022-03-01 17:17:56 578

原创 TVM Pass概述

use pass infraDesign and ArchitecturePass又称transform,每一个transform要么把现有程序转换并优化为一个等价的程序,要么把程序lower到下层。relay/transform包括很多优化模型用的pass,包括常量折叠(constant folding)和死代码删除(dead-code elimination)等。这里拿tests/python/relay/test_pass_fold_constant.py里的单测作为例子:import num

2022-02-28 18:19:52 964

原创 TVM TIR Pass - CSE (Common Subexpression Elimination) 优化原理和代码解析 PR#9482

预备知识TIR Let BindingLet (var, value, body) 将value求值赋给var,然后返回body的求值结果。let将表达式 Expr 绑定到局部作用域的不可变 var 中。scope:作用域/代码块。 TVM AST将作用域组建为树形结构。外侧作用域包含内侧作用域的关系被表示为父节点和子节点。父节点的变量对子节点可见但反之不然。判断变量是否在某个作用域内是CSE算法的一个重要的部分。是什么TIR代码来源于relay和其他Pass。生成TIR代码的过程是自动

2022-02-24 22:24:03 989

原创 机器学习技术栈

机器学习小结前言决策树熵熵的性质非参数概率密度统计模型HistogramParzen KernelNadaraya-Watson高斯过程算法目的算法理论要点实验附:高斯函数的基本性质前言本文旨在整理一些博主学习中零散的知识点。决策树熵熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。H(p)=−∑k=1npklog2pkH(p) = -\sum_{k=1}^np_klog_2p_kH(p)=−k=1∑n​pk​log2​pk​设独立掷出nnn次骰子,每个面的概率彼

2021-05-04 02:50:59 873

原创 【新手向】后缀数组(Suffix Array),二分查找字符串(Binary Search)和lower_bound+comparator的深入理解

定义一个通过对字符串的所有后缀经过排序后得到的数组。此数据结构被运用于全文索引、数据压缩算法、以及生物信息学。简单来说,对于一个给定字符串strstrstr, 我们拥有一个数组SA(Suffix Array的缩写),数组对于每个索引 i=[0,1,2,...strlen(str)−1]i = [0, 1,2,...strlen(str) - 1]i=[0,1,2,...strlen(str)−1], SA[i]SA[i]SA[i]表示将所有后缀排序后第 iii 小的后缀的编号。举个栗子:str =

2020-06-16 22:46:14 1323

原创 【C++】 位运算小结

取最靠右的11. 移位遍历1 << i 在这里充当了一个指针。 int right_most_setbit(int num) { for (int i = 0; i < 32; i++) { if (!(num & (1 << i))) return 1 << i; } return 0; }2. 利用特性利用负数的bi

2020-06-12 22:15:17 702

原创 【二叉树】【经典例题及解答】用栈(Stack)对二叉树(Binary Tree)进行前序(Pre)、中序(In)、后序(Post)非递归遍历

定义在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。Inorder/中序遍历 (Left, Root, Ri

2020-06-06 16:44:41 322

原创 【深度优先搜索】递归、穷举与优化(Memorization)经典题目与C++解答

概念深度优先搜索算法(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 这个算法会尽可能深的搜索树的分支。 当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。 这一过程一直进行到已发现从源节点可达的所有节点为止。DFS,根据题目的要求,适用于需要穷举所有可能性的情况。一般来说比较易于理解但是算法速度较慢,一般为指数时间,但加以合理的缓存优化(Memorization)可以以牺牲内存为代价提高速度。题目题目来源于LeetCode494. Ta

2020-06-05 21:07:57 311

原创 【常数时间】LFU(Least Frequently Used)基于频次的缓存淘汰算法C++实现

struct LFUNode{ int freq; list<pair<int, int>> vals; LFUNode(int f = 0) : freq(f) { }};typedef list<LFUNode>::iterator iptr;typedef list<pair<int, int>>::iterator jptr;class LFUCache {public: LFUCache(int capacit

2020-05-14 03:07:44 253

原创 【常数时间】LRU(Least Recently Used)最近最少使用算法设计C++实现

#include<vector>#include<unordered_map>#include<string>#include<unordered_set>#include<map>#include<iostream>using namespace std;class LRUCache {public: LRUCache(int capacity) { cap = capacity; } int get(i

2020-05-14 03:03:50 234

原创 Heap(栈、priority_queue、优先队列)原理、C++实现及应用

原理定义A heap is a specialized tree-based data structure which is essentially an almost complete tree that satisfies the heap property: in a max heap, for any given node C, if P is a parent node of C, then the key (the value) of P is greater than or equal

2020-05-10 19:19:38 503

原创 Trie( prefix tree ) 原理、C++实现及应用

Trie( prefix tree ) C++ 实现题目来源于LeetCode, 代码上传后测试通过使用shared_ptr,构建数据结构,在一定程度上减少memory leak#include "stdafx.h"#include<iostream>#include<memory>#include<algorithm>#define ALPHABET_SIZE 26class Trie {public: bool isEnd; unique_p

2020-05-08 20:45:57 244

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除