自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴建明wujianming_110117

吴建明专业博客wujianming_110117

  • 博客(1697)
  • 问答 (8)
  • 收藏
  • 关注

原创 日本半导体材料

日本半导体材料近两年日本限制含氟聚酰亚胺、光刻胶,以及高纯度氟化氢这三种材料的对韩出口,引起了整个半导体领域的震动。毕竟韩国目前是全球半导体强国之一,尤其在液晶面板、OLED屏、内存上处于世界领先地位,这三种材料被限后,或影响产能,甚至导致整个世界产业格局的变化。针对此事,很多人认为,日本实在是太强了,因为在这三项上处于垄断地位,所以才能够有底气这么做,毕竟像将高纯度氟化氢,日本占全球份额的70%,氟聚酰亚胺份额达到90%,像光刻胶也是处于垄断地位。但事实上,这三种材料只是日本在半导体材料领域处于

2021-11-30 05:40:55 54

原创 用动态实现扩展TVM

用动态实现扩展TVMExtending TVM with Dynamic ExecutionOutline● Motivation for Dynamism● Representing Dynamism● Executing Dynamism● EvaluationDynamic Neural Networks● Networks are exhibiting more and more dynamism○ Dynamic inputs: batch size, image size, s

2021-11-28 16:31:58 143

原创 三段式LLVM编译器

三段式LLVM编译器目录概述LLVM技术生态之编译器一、传统编译器的设计二、传统编译器模式的实现三、LLVM的三段式实现四、LLVM’s Code Representation:LLVM IR1、IR的表现形式2、IR的格式文件类型3、IR文件的编译处理流程4、简单的IR布局5、Llvm IR 编程五、LLVM 与 GCC有什么区别LLVM技术生态之JIT一、JIT概述二、为什么要使用JIT三、JIT生成代码时的代码优化技术1、语言无关的优化技术之一:公共子表达式消除2

2021-11-28 05:28:08 141

原创 JIT Code Generation代码生成

JIT Code Generation代码生成一.表达式编译代码生成(Code Generation)技术广泛应用于现代的数据系统中。代码生成是将用户输入的表达式、查询、存储过程等现场编译成二进制代码再执行,相比解释执行的方式,运行效率要高得多。尤其是对于计算密集型查询、或频繁重复使用的计算过程,运用代码生成技术能达到数十倍的性能提升。代码生成很多大数据产品都将代码生成技术作为卖点,然而事实上往往谈论的不是一件事情。比如,之前就有人提问:Spark 1.x 就已经有代码生成技术,为什么 Spark

2021-11-27 06:32:55 145

原创 linux C++打包程序总结

linux C++打包程序总结linux c++ 动态库打包 应用程序打包 动态库搜索路径问题linux环境下打包C++应用程序,包括依赖的动态库,以便解决程序发布后程序运行动态库缺失问题解决 动态库编译时添加-fPIC编译选项(一般动态库都会有此选项,自己写的库记得添加) -fPIC: 生成与位置无关代码 编译自己的应用程序,得到test 打包动态库:使用pack_lib.sh脚本将test依赖的动态库至某文件夹(如可在发布的程序根目录下新建lib文件夹,如下所示)bin/te

2021-11-26 06:02:42 108

原创 深度学习编译器Data Flow和Control Flow

深度学习编译器Data Flow和Control Flow本文介绍了一下深度学习框架的Data Flow和Control Flow,基于TensorFlow解释了TensorFlow是如何在静态图中实现Control Flow的。支持在Python层直接写Control Flow的动态图,最后基于Pytorch介绍了如何将Python层的Control Flow导出到TorchScript模型以及ONNX模型。前言1.1. DataFlow以TensorFlow1.x为例介绍一下DataFlow。

2021-11-25 06:33:32 141

原创 深度学习编译器综述The Deep Learning Compiler

深度学习编译器综述The Deep Learning CompilerThe Deep Learning Compiler: A Comprehensive Survey参考文献:https://arxiv.org/pdf/2002.03794v4.pdf在不同的DL硬件上部署各种深度学习(DL)模型的困难,推动了社区DL编译器的研究和开发。DL编译器已经从工业和学术界提出,如TysFraceXLA和TVM。类似地,DL编译器将不同DL框架中描述的DL模型作为输入,然后为不同的DL硬件生成优化代码作

2021-11-24 06:13:28 141

原创 华为八爪鱼自动驾驶云

华为八爪鱼自动驾驶云2019年10月世界智能网联汽车大会上,华为轮值董事长徐直军做了主题演讲,阐述了华为智能汽车业务战略,描绘了智能汽车解决方案的五大业务板块:智能网联、智能驾驶、智能座舱、智能电动、云服务,而华为自动驾驶云服务就位于金字塔的塔尖。华为自动驾驶云服务,称为HUAWEI Octopus(华为八爪鱼),与华为MDC智能驾驶计算平台、智能驾驶OS一起,共同组成了车云协同的智能驾驶平台,可以有效帮助车企和开发者快速开发出自动驾驶应用,助力自动驾驶快速商用落地。面对海量的数据处理,华为八爪鱼

2021-11-23 06:06:32 761

原创 TVM apps extension示例扩展库

TVM apps extension示例扩展库此文件夹包含TVM的示例扩展库。演示了其它库如何在C++和Python API中扩展TVM。该库扩展了TVM的功能。python模块加载新的共享库,可以使用TVM的python API进行插值。https://github.com/apache/tvm/tree/main/apps/extensiontest_ext.py修改了一些代码运行结果TVM Runtime SystemTVM支持多种编程语言用于编译器堆栈的开发和部署。将解释

2021-11-22 06:10:56 140

原创 TVM yolov3优化代码修改(编译运行OK)

TVM yolov3优化代码修改(编译运行OK)yolov3_quantize_sample.py附https://github.com/makihiro/tvm_yolov3_sample代码:yolov3_quantize_sample.pyimport nnvmimport nnvm.frontend.darknetimport nnvm.testing.yolo_detectionimport nnvm.testing.darknetimport matplotlib.

2021-11-21 08:46:14 1707

原创 TVM示例展示 README.md,Makefile,CMakeLists.txt

TVM示例展示 README.md,Makefile,CMakeLists.txtTVM/README.md Open Deep Learning Compiler StackDocumentation |Contributors |Community |Release Notes[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWCsrJeb-1637452286939)(https://ci.tlcpack.ai/buildStatus/icon?job

2021-11-21 08:08:07 261

原创 TVM cmake示例展示

TVM cmake示例展示本文展示tvm/cmake中config.cmake,tvm/cmake/module/LLVM.cmake,tvm/cmake/module/CUDA.cmake,tvm/cmake/module/OpenCL.cmake看TVM工程tvm/cmaketvm/cmake/moduletvm/cmake/module/LLVM.cmaketvm/cmake/module/CUDA.cmaketvm/cmake/module/OpenCL.cmaketvm/c

2021-11-21 06:03:43 582

原创 将编译器pass添加到Relay

将编译器pass添加到Relay编译器pass是扩展Relay功能集和对Relay程序执行优化的主要接口。通过编写编译器pass,可以修改AST或收集有关AST的信息,具体取决于目标。事实上,Relay的一些最重要的内置功能(如autodiff和类型推断),只不过是“标准”编译器pass。在高层次上,写pass有两个关键组成部分:创建一个或多个遍历程序的C++类将遍历实现及元数据包装在pass manager API中,以便可以与pass基础结构完整交互。首先,将概述编写编译器pass的关键机制。

2021-11-20 06:05:28 26

原创 如何将算子添加到Relay

如何将算子添加到Relay本文将介绍在Relay中注册新TVM算子所需的步骤。将PR添加累积产品运算示例。PR本身建立在另一个PR的基础上,该PR添加了一个累积和运算。注册新算子需要几个步骤:添加一个属性节点,声明编译时已知的固定参数为算子编写一个类型关系,集成到Relay的类型系统中。使用C++中的RELAY_REGISTER_OP宏,注册编译器的算子属性、类型和其它提示如何计算算子向Relay算子注册计算、调度定义C++函数,为算子生成调用节点并注册函数的Python API hook

2021-11-19 06:27:23 138

原创 Linux输入输出I/O

Linux输入输出I/O本文主要以一张图介绍Linux在I/O上做了哪些事情,即Linux中直接I/O原理。引言先看一张图:这张图大体上描述了Linux系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。这篇文章就以这张图为基础,介绍Linux在I/O上做了哪些事情。一、文件系统(一)什么是文件系统文件系统,本身是对存储设备上的文件,进行组织管理的机制。组织方式不同,就会形成不同的文件系统。比如常见的Ext4、XFS、ZFS以及网络文件系统NFS等等。但是不同类型的文件系统标

2021-11-18 06:21:53 147

原创 c++ Factor泛型编程示例

c++ Factor泛型编程示例c++ 泛型编程 之Factor (c++ 设计新思维)一.概述泛化仿函数是将“请求(函数)封装起来”,存储与对象中,该对象是具有“value语义”的,因此支持拷贝,赋值和作为函数参数来传值(pass by value)。通过该对象可间接的处理封装的请求,类似于boost 中的function功能。本实现采用的是《Modern C++ Design》中的方案。更详尽的说,具有以下特点:可封装任何处理请求,可接受函数指针,成员函数指针,仿函数,甚至其它泛化仿函数。具

2021-11-17 06:21:04 167

原创 自研GPU之火(续)

自研GPU之火(续)沐曦自研5nm GPU近些年由于技术封锁,芯片产业发展受阻,自主研发的中国芯突破技术封锁一直是希望看到的。华为也因此走上了自主研发的道路,从最基础的工艺做起,虽然速度不快,但这是为打下技术基础所必须要做的,这一决定也受到我国众多企业以及全网网友的支持。前段时间有一家新的GPU(图形处理器)芯片设计公司沐曦集成电路(上海)有限公司成立,直接宣布攻克5nm制程GPU芯片。可能大家会嗤之以鼻,又不是CPU(中央处理器),一个显卡有什么好自豪的?但是对于芯片产业来说,GPU芯片业占了

2021-11-16 17:58:33 1236

原创 Dorado用法与示例

Dorado用法与示例dorado用后总结一.dorado概念dorado的产品全名是“dorado展现中间件”。从产品形态上dorado由两部分组成,第一部分是一个具有AJAX特征的Web应用表现层的快速开发框架,第二部分配套的IDE开发工具。开发工具又可分为独立的dorado studio与eclipse插件两个选择,eclipse插件将在以后发布,本文的开发工具专指dorado studio。  Web表现层方面的产品主要技术流派有离散控件构架、后台衍伸构架、展现中间件构架等数种。离散控件构架

2021-11-16 15:51:04 330

原创 如何在CPU上优化GEMM矩阵乘法

如何在CPU上优化GEMM矩阵乘法How to optimize GEMM on CPU(TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度)。通常,在高性能调度中编写算法会破坏算法的可读性和模块化。此外,尝试各种看似有希望的调度也很耗时。在 TVM 的帮助下,可以有效地尝试这些调度以提高性能。在本文中,将演示如何使用 TVM 优化方阵乘法,通过简单地添加 18 行额外代码实现比基线快 200 倍。在 CPU 上执行的密集计算应用程序有两个重要的优化: 提高内存

2021-11-16 14:37:02 50

原创 Yolo v4, v3 and v2 性能极简图示

Yolo v4, v3 and v2 性能图示https://github.com/AlexeyAB/darknet参考链接:https://github.com/AlexeyAB/darknet

2021-11-15 19:02:59 1489

原创 英伟达TensorRT 8-bit Inference推理

英伟达TensorRT 8-bit Inference推理引论● 目标:将FP32 CNN转换为INT8,不会造成显著的精度损失。● 原因:Int8 Math具有更高的吞吐量和更低的内存需求。● 挑战:INT8的精度和动态范围,明显低于FP32。● 解决方案:在将训练模型权权重化为INT8时,及在INT8计算激活时,将信息损失降至最低。● 结果:方法已在TensorRT中实现。不需要任何额外的微调或重训练。Outline● INT8 compute● Quantization● Cali

2021-11-15 06:00:11 157

原创 如何将自定义代码生成TVM

如何将自定义代码生成TVM如何将自定义代码生成TVM本文参考链接:https://blog.csdn.net/weixin_42164269/article/details/104291635简介深度学习针对的硬件设备的数量不断增加,用户需要在各种设备上实现高性能所需的知识。硬件后端提供者要么提供像MKLDNN或cuDNN类的库,包含许多常用的深度学习运算符,要么提供诸如TensorRT这样的框架,用户以某种方式描述模型实现高性能。但是,用户尝试在新的库或设备上工作时,必须学习新的编程接口。结果,

2021-11-14 07:08:30 159

原创 TVM代码流程分析

TVM代码流程分析TVM - 代码生成流程本节主要介绍TVM的代码生成流程,即调用relay.build或tvm.build之后发生了什么,将深入到TVM的源代码进行剖析。(这里采用的依然是TVM v0.6)首先区分两个build的区别:tvm.build主要针对单一算子(参照Tensor Expression一文),而relay.build是针对整个模型进行编译(参照GCN优化一文),而Relay最后也会调用到tvm::build做代码生成。relay.build通常的模型编译由以下两条语句完成

2021-11-13 18:00:07 158

原创 TVM实现hardware backend

TVM实现hardware backend官方的矩阵相加的示例如下:2个矩阵相加的实现for (int i = 0; i < n; ++i) {C[i] = A[i] + B[i];}怎么优化? 可以并行相加,如下for (int bx = 0; bx < ceil(n / 64); ++bx) {for (int tx = 0; tx < 64; ++tx) {int i = bx * 64 + tx;if (i < n) {C[i] = A[i] + B[i

2021-11-13 06:10:36 401

原创 TVM自定义修改代码示例

TVM自定义修改代码示例一.TVM设备添加代码因为要添加的设备是一种类似于GPU的加速卡,TVM中提供了对GPU编译器的各种支持,有openCl,OpenGL和CUDA等,这里选取比较熟悉的CUDA进行模仿生成。总体上看,TVM是一个多层的结构。TVM在python这一层提供了相关的设备接口,然后使用tvm.build真正的编译,然后调用get_source函数来获得想要的源码(或者IR,如llvm选项提供的是LLVM的IR,或者PTX选项提供的就是NVPTX类型的IR)。因此,添加新设备(devi

2021-11-12 06:22:55 459

原创 tvm模型部署c++ 分析

tvm模型部署c++ 分析tvm c++部署官方教程https://github.com/apache/tvm/tree/main/apps/howto_deployhttps://tvm.apache.org/docs/how_to/deploy/cpp_deploy.html官方说执行run_example.sh脚本就可以完成部署。使用C++ API部署TVM模块提供了一个关于如何在apps/howto_deploy中,部署TVM模块的示例。要运行该示例,可以使用以下命令cd apps/h

2021-11-11 06:10:03 229

原创 使用Tensor Expression张量表达式处理算子

使用Tensor Expression张量表达式处理算子这是TVM中Tensor表达语言的入门教程。TVM使用特定于域的张量表达式来进行有效的内核构造。本文将演示使用张量表达式语言的基本工作流程。from future import absolute_import, print_functionimport tvmimport numpy as npGlobal declarations of environment.tgt_host=“llvm”Change it to respecti

2021-11-10 16:57:30 26

原创 TVM优化c++部署实践

TVM优化c++部署实践使用TVM导入神经网络模型:模型支持pytorch , tensorflow , onnx, caffe 等。平时pytorch用的多,这里给一种pytorch的导入方式。github代码仓:https://github.com/leoluopy/autotvm_tutorialdef relay_import_from_torch(model, direct_to_mod_param=False):# 模型输入模型是 NCHW次序,tvm目前支持动态shapeinput

2021-11-10 06:09:00 78

原创 华为与大众合作

华为与大众合作重磅!华为大众合资?据36氪消息,36氪从多位知情人士处获悉,华为计划与全球汽车巨头大众集团组建合资公司,研发自动驾驶技术。目前,该项目正快速推进中。36氪从消息人士处了解到,华为和大众组建的合资公司旨在作为供应商,向大众集团提供方案,双方讨论的合作方式之一是“大众出钱,成为合资公司控股方,华为主要出技术IP(知识产权)”,华为所提供的技术IP不仅包括软件技术,也包括华为的芯片类IP。随着合资公司组建,华为也会有不少高级技术人才参与支持。其中,前自动驾驶业务线高管、智能驾驶产品部部长苏

2021-11-09 06:07:10 46

原创 TVM开发三个示例分析

TVM开发三个示例分析把自主生成的代码生成TVM把自主生成的代码生成TVM目录简介要生成C代码。要生成任何其它图形表示。实现一个C代码生成器实现【CodegenC】运算符代码生成输入变量的代码生成代码发送实现【CSourceCodegen 】实现【GenCFunc 】实现【CreateCSourceModule 】注册代码生成为表示实现一个代码生成实现【ExampleJsonCodeGen 】实现自定义运行时实现构造函数实现【GetFunction 】实

2021-11-08 06:14:03 57

原创 TVM基础编程示例分析

TVM基础编程示例分析一.TVM编程基础示例前言继前图灵奖获得者Hennessy和Patterson在ISCA 2018提出“A New Golden Age for Computer Architecture”,编译器界大神Chris Lattner在ASPLOS 2021提出了“The Golden Age of Compiler Design”。另一方面,2020年图灵奖授予了编译器“龙书”作者Jeffrey Ullman和Alfred Aho。编译器技术在新的时代背景下似乎又再次焕发了新的活力

2021-11-07 07:17:19 102

原创 TVM中Python/C++接口调用关系

TVM中Python/C++接口调用关系TVM已经是一个很庞大的系统,包含了很多的功能模块,python和c++的互相调用这个功能模块,没有使用第三方的开源库(boost.python、pybind11等),自主实现了一套复杂但精致高效强大的机制。这部分内容很多,本文分成三部分,分析实现原理:最底层的c++数据结构支撑(围绕c++端PackedFunc)基于PackedFunc的函数注册(围绕TVM_REGISTER_GLOBAL)偏上层的python的调用细节(围绕ctypes内置库和python

2021-11-06 06:24:13 655

原创 封装技术与加密技术

封装技术与加密技术一.4大主流封装技术半导体 封装 是指将通过测试的晶圆按照产品型号及功能需求加工得到独立芯片的过程。封装技术是一种将集成电路用绝缘的塑料或陶瓷材料打包的技术。以CPU为例,实际看到的体积和外观并不是真正的CPU内核的大小和面貌,而是CPU内核等元件经过封装后的产品。封装技术对于芯片来说是必须的,也是至关重要的。因为芯片必须与外界隔离,以防止空气中的杂质对芯片电路的腐蚀而造成电气性能下降。另一方面,封装后的芯片也更便于安装和运输。由于封装技术的好坏还直接影响到芯片自身性能的发挥和与之连接

2021-11-05 06:21:56 178

原创 synopsys PCIE IP协议解析

synopsys PCIE IP协议解析1.OverviewCore支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环。同时,Core也支持有远程接收器件的loopback,在该中情况下,远程接收器件称为loopback slave。该种模式可以用来完成板级的debug,BER测试,系统调试。在做Loopback的时候需要注意将“Link up”强制写成1(根据specification该位应该是0),造成系统处于L0状态的假象,以便系统

2021-11-04 06:24:03 86

原创 JIT Compiler编译器及指令集

JIT Compiler编译器及指令集LLVM一些编程语法语义特性High Level StructureModule StructureLLVM 程序由Module’s组成,每个 's 是输入程序的一个翻译单元。每个模块由函数,全局变量和符号表条目组成。模块可与 LLVM 链接器组合在一起,后者合并函数(全局变量)定义,解析前向声明,合并符号表条目。这是“hello world”模块的示例:; Declare the string constant as a global

2021-11-03 06:23:41 38

原创 在Cuda上部署量化模型

在Cuda上部署量化模型介绍TVM自动量化。自动量化是TVM中的一种量化方式。将在ImageNet上导入一个GluonCV预先训练的模型到Relay,量化Relay模型,然后执行推理。import tvmfrom tvm import tefrom tvm import relayimport mxnet as mxfrom tvm.contrib.download import download_testdatafrom mxnet import gluonimport loggingi

2021-11-02 05:16:00 43

原创 Lambda 表达式基础理论与示例

Lambda 表达式基础理论与示例Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法lambda 表达式的语法格式如下:(parameters) -> expression或(parameters) ->{ statements; }以下是lambda表达式的重要特征:可选类型声明:不需要声明参数类型,编译器可以统一识别参

2021-11-01 05:46:03 40

原创 TVM量化代码解析

TVM量化代码解析TVM量化,非常方便,即插即用。使用加入了伪量化后的pass,替代原来的pass,一个官方提供的示例:def test_mul_rewrite():"""a test case where rhs of mul is not constant"""data=relay.var("data",shape=(1,16,64,64))multiplier=relay.sigmoid(relay.var("data",shape=(1,16,1,1)))conv=relay.nn

2021-10-31 06:12:04 46

原创 如何在 GPU 上优化卷积

如何在 GPU 上优化卷积将演示如何在 TVM 中编写高性能卷积实现。正方形大小的输入张量和过滤器为例,假设卷积的输入具有大batch批量。在这个例子中,使用不同的布局存储数据,实现更好的数据局部性。缓冲区布局是 HWCN,代表高度、宽度、通道、批次。准备和算法对具有 256 个通道和 14 x 14 维度的输入张量使用固定大小。批量大小为 256。卷积过滤器包含 512 个大小为 3 x 3 的过滤器。使用步幅大小 1 和padding大小 1 进行卷积。以下代码定义了 TVM 中的卷积算法。im

2021-10-30 04:51:30 45

原创 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning摘要人们越来越需要将机器学习应用到各种各样的硬件设备中。现在的框架依赖于特定于供应商的算子库,针对窄带的服务器级GPU进行优化。将工作负荷部署到新平台,如移动电话,嵌入式设备和加速算子(如FPGA,ASIC)-需要大量手动操作。提出了TVM,一个开源图形级别的编译器和算子级优化,提供高效跨多个应用程序移植到深度学习工作负荷硬件后端。TVM解决了深度学

2021-10-29 06:06:37 83

空空如也

空空如也

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

TA关注的人 TA的粉丝

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