
AICompiler&AIFramework
文章平均质量分 83
AICompiler&AIFramework
普通网友
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LLVM编译技术应用分析
LLVM编译技术应用分析原创 2022-08-04 06:01:39 · 2372 阅读 · 0 评论 -
GCC编译器技术解析
GCC编译器技术解析原创 2022-08-02 05:06:13 · 1180 阅读 · 0 评论 -
MLIR原理与应用技术杂谈
MLIR原理与应用技术杂谈原创 2022-07-25 05:13:10 · 1468 阅读 · 1 评论 -
前后端编程语言杂谈
前后端编程语言杂谈原创 2022-07-24 06:28:39 · 2072 阅读 · 0 评论 -
编译器LLVM-MLIR-Intrinics-llvm backend-instruction
编译器LLVM-MLIR-Intrinics-llvm backend-instruction原创 2022-07-23 05:45:13 · 1493 阅读 · 0 评论 -
Transformer模型技术长文
Transformer模型技术长文可高效处理长文本的模型Longformer、和堪称“升级版”Transformer的BigBird模型,到底有什么区别?Transformer的其他各种变体(X-former)到底都长什么样、又有哪些新应用?由于Transformer模型的发展速度日新月异,一天一个样,哪怕是隔段时间回来研究,模型可能也已经多了不少。Transformer模型,是谷歌在2017年推出的NLP经典模型(Bert就是用的Transformer)。本文参考链接https://mp.w原创 2022-04-21 06:21:25 · 2096 阅读 · 0 评论 -
NVIDIA N卡与AMDA卡区别
NVIDIA N卡与AMDA卡区别比如A卡的VEGA架构和Pascal架构的区别VEGA64 流处理器4096,单精度浮点12+Flops,理论性能和GP100有的一拼,功耗也差不多(230W),可是实测性能却只能和1080(GP104 流处理器2580 单精度8TFLOPS TDW180W)打平手?A卡的基本执行部件为SIMD(此处可能写为SIMD阵列的SIMT执行模式更为贴切?),而N卡的基本执行部件为SIMT(此处可能写成lock-step的MIMD更为贴切?)。这是最为根本的区别。SIMD是单原创 2022-02-15 06:16:42 · 1333 阅读 · 0 评论 -
2021几何深度学习大师 Michael Bronstein长文解析
2021几何深度学习大师 Michael Bronstein长文解析导读:几何机器学习和基于图的机器学习是当前最热门的研究课题之一。在过去的一年中,该领域的研究发展迅猛。在本文中,几何深度学习先驱 Michael Bronstein 和 Petar Veličković 合作,采访了多位杰出的领域专家,总结了该领域过去一年中的研究亮点,并对该方向在 2022 年的发展趋势进行了展望。本文编译自https://towardsdatascience.com/predictions-and-hopes-fo原创 2022-02-13 06:44:24 · 592 阅读 · 0 评论 -
TensorFlow与PyTorch模型部署性能比较
TensorFlow与PyTorch模型部署性能比较前言2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界。这种说法到 2022 年还成立吗?从模型可用性、部署便捷度和生态系统三个方面对比了两个框架的优缺点,针对不同身份的读者给出了不同的选择建议。模型可用性对比:PyTorch 胜出在模型可用性方面,PyTorch 和 TensorFlow 表现出了明显的区别。都有官方模型库,但是对于从业者来说,这些库里的模型可能还不原创 2022-02-12 06:16:30 · 2216 阅读 · 0 评论 -
NCHW与NHWC格式
NCHW与NHWC格式下图很好的描述了各种不同的格式。N代表数量, C代表channel,H代表高度,W代表宽度。NCHW其实代表的是[W H C N],第一个元素是000,第二个元素是沿着w方向的,即001,这样下去002 003,再接着呢就是沿着H方向,即004 005 006 007…这样到019后,沿C方向,轮到了020,之后021 022 …一直到319,然后再沿N方向。NHWC的话以此类推,代表的是[C W H N],第一个元素是000,第二个沿C方向,即020,040, 060…一直到原创 2022-02-09 16:16:38 · 2099 阅读 · 0 评论 -
Jeff Dean回顾谷歌2021
Jeff Dean回顾谷歌2021新年伊始,谷歌AI掌门人Jeff Dean的年度总结「虽迟但到」,这篇万字长文系统回顾了过去一年来机器学习领域的五大趋势。除了超大AI模型,谷歌去年还做了啥?2021年,谷歌在机器学习领域可谓是十分高产。 毕竟,这帮人在NeurIPS 2021上就投了177篇论文。 1月11日,Jeff Dean终于用一篇万字长文完成了总结。趋势 1:功能更强大、通用的机器学习模型研究人员正在训练出比以往任何时候更大、功能更强大的机器学习模型。近几年,语言领域的模型规模迅速增长,原创 2022-01-13 06:10:01 · 471 阅读 · 0 评论 -
高通为何46亿美元ADAS Veoneer Arriver
高通为何46亿美元ADAS Veoneer Arriver彭博9月13日引述消息人士报导,高通正式提案以逾40亿美元收购瑞典先进驾驶辅助系统(ADAS)技术商Veoneer,以超过麦格纳的报价在竞标案中取得优势。本文引用地址:http://www.eepw.com.cn/article/202110/428682.htmVeoneer日前证实,高通公司已经向Veoneer发出了一份以每股37美元现金支付“最新的非约束性”收购要约,交易金额将达到46亿美元。Veoneer表示,Veoneer与麦格纳之间原创 2022-01-11 18:04:46 · 670 阅读 · 0 评论 -
OpenCL,OpenGL编译
OpenCL,OpenGL编译TVM已经支持多个硬件后端:CPU,GPU,移动设备等…添加了另一个后端:OpenGL / WebGL。OpenGL / WebGL能够在没有安装CUDA的环境中利用GPU。目前,这是在浏览器中使用GPU的唯一方式。这个新的后端允许以一下3种方式使用OpenGL / WebGL:• 本地OpenGL:可以将深度学习模型编译成OpenGL,并直接在本地机器上运行,完全只使用Python。• 带有RPC的WebGL:可以将深度学习模型编译为WebGL,作为一个共享库导出,原创 2022-01-11 12:00:34 · 847 阅读 · 0 评论 -
relay.build调用关系
relay.build调用关系在用TVM优化过程中,常见demo如下图:relay.build背后的调用机制梳理如下:python中的build函数实现如下,此方法实际调用了BuildModule类的build方法,BuildModule获取的C++函数build方法,此处涉及混合编程:_build_module._BuildModule() 来自于这句注册:tvm._ffi._init_api(“relay.build_module”, name)self.mod[“build”]调用原创 2022-01-10 17:52:31 · 293 阅读 · 0 评论 -
编译器 llvm clang 源码转换示例
编译器 llvm clang 源码转换示例从git获取llvm项目的源码方式:git clone https://github.com/llvm/llvm-project.git下载源码后,进入llvm-project目录包括如下内容:llvm-project/llvm目录包括如下内容:CLANG实战实战 利用Clang制作自己的编译器 source-to-source 源代码转换参考:https://github.com/Ewenwan/llvm-clang-samples/b原创 2022-01-01 06:15:38 · 594 阅读 · 1 评论 -
Cache Memory技术示例
Cache Memory技术示例为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么?为什么需要cache memory先思考第一个问题:程序是如何运行起来的?应该知道程序是运行在 RAM之中,RAM 就是常说的DDR(例如 DDR3、DDR4等)。称为main memory(主存)当需要运行一个进程时,先从Flash设备(例如,eMMC、UFS等)中,将可执行程序load到main memory中,然后开始执行。在CPU内部存在一堆的通用寄存器(regis原创 2021-12-31 06:06:56 · 410 阅读 · 0 评论 -
企业如何选择音视频会议系统分析
企业如何选择音视频会议系统分析腾讯会议和钉钉,哪个费用更划算?市面上的两大视频会议软件,腾讯会议和钉钉,收费标准和付费功能哪个性价比更高,适合长期使用腾讯会议和钉钉我都用过,个人认为性价比高一点的是腾讯会议。具体说说为什么腾讯会议比钉钉更划算,更适合长期使用。首先,先来分别说下腾讯会议和钉钉的需要付费使用的功能。腾讯会议腾讯会议收费的版本有商业版和企业版,还有专为会议室打造的软件系统,腾讯会议 Rooms。商业版支持不限时长的多人群组会议及升级会管会控,最多支持2000人同时入会、1080P高清原创 2021-12-24 06:04:06 · 1348 阅读 · 0 评论 -
SECTIONS bss段初始化分析
SECTIONS bss段初始化分析都知道bss段需要初始化,但是这是为什么呢?通过浏览资料,都会发现,bss段是不会出现在程序下载文件(*.bin .hex)中的,因为全都是0。如果把出现在程序下载文件中,会增加程序下载文件的大小。实际应用中,通常只需要把bss段的起始地址和结束地址保存起来,而不需要将程序下载文件中出现bss段(一堆0)将来真正运行程序的时候,再根据这两个数据进行bss段的初始化就行了。以上这段文字是网上的资料说的。但是,可不可以让bss段出现在程序下载文件中呢?如果这样可以的话,原创 2021-12-23 05:29:17 · 713 阅读 · 0 评论 -
堆栈,数据,文本,heap,bss,text data,stack
堆栈,数据,文本,heap,bss,text data,stacktext data bss stack heap 段根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap。data/bss/text:text段在内存中被映射为只读,但.data和.bss是可写的。bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。BSS段属于静态内存分配。原创 2021-12-21 06:09:13 · 337 阅读 · 0 评论 -
Swift与LLVM-Clang原理与示例
Swift与LLVM-Clang原理与示例LLVM 学习从 简单汇编基础 到 Swift 不简单的 a + 1作为iOS开发,程序崩溃犹如家常便饭,秉着没有崩溃也要制造崩溃的原则每天都吃的很饱但学艺不精的经常有这样的困扰,每次崩溃都定位到一堆。类似movq $0x0, 0xc7a(%rip) 的天书里面初识汇编虽然不知道movq是什么意思,但知道movemove 的意思,没错是 飘逸至于q,不管 q不q 的,哎e呢?汇编语言汇编语言:(assembly language原创 2021-12-20 06:01:29 · 476 阅读 · 0 评论 -
Imagination 的神经网络加速器和 Visidon 的去噪算法被证明是完美的搭档
Imagination 的神经网络加速器和 Visidon 的去噪算法被证明是完美的搭档本文是总部位于芬兰的Visidon和总部位于英国的 Imagination合作的结果。Visidon 是公认的相机图像增强和分析算法专家,Imagination 拥有一系列世界一流的神经网络加速器(NNA),每个内核的性能高达每秒 100 TOPS。本文解决的问题是对来自传统彩色相机的图像进行去噪。解决方案分为两部分:• 在不破坏图像细节的情况下去除噪声的算法。• 一种高性能卷积引擎,能够运行经过训练的神经网络,原创 2021-12-19 05:52:07 · 321 阅读 · 0 评论 -
IP 公司与GPU IP
IP 公司与GPU IP1.IP公司及其处理器IP系列(DSP, GPU, AI)Synopsys来源:https://www.synopsys.com/zh-cn/designware-ip.htmlARC处理器Embedded Vision ProcessorsEV5xEV6xCadence来源:https://ip.cadence.com/ipportfolio/tensilica-ipTensilica Customizable ProcessorsXtensa LX7Al原创 2021-12-18 06:20:59 · 681 阅读 · 0 评论 -
Computer OS系统基本原理
Computer OS系统基本原理第一章 绪论(考概念)什么是OS?o 操作系统是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合。o 操作系统是位于硬件层(HAL)之上,所有其它系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机系统。本文参考链接:https://jason-xy.cn/2021/06/osreview/操作系统的目标方便性:o 计算机只能识别0、1o 用户熟悉的是各种语言o 命令和图原创 2021-12-17 06:34:48 · 365 阅读 · 0 评论 -
OpenCL编程详细解析与实例
OpenCL编程详细解析与实例C语言与OpenCL的编程示例比较参考链接:https://www.zhihu.com/people/wujianming_110117/posts先以图像旋转的实例,具体介绍OpenCL编程的步骤。 首先给出实现流程,然后给出实现图像旋转的C循环实现和OpenCL C kernel实现。图像旋转原理图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度, 通常是指绕图像的中心以逆时针方向旋转。假设图像的左上角为(l, t), 右下角为(r, b),则图原创 2021-12-16 05:56:51 · 1409 阅读 · 0 评论 -
C语言与OpenCL的编程示例比较
C语言与OpenCL的编程示例比较OpenCL支持数据并行,任务并行编程,同时支持两种模式的混合。对于同步 OpenCL支持同一工作组内工作项的同步和命令队列中处于同一个上下文中的 命令的同步。在本文中以图像旋转的实例,具体介绍OpenCL编程的步骤。 首先给出实现流程,然后给出实现图像旋转的C循环实现和OpenCL C kernel实现。4.2 图像旋转4.2.1 图像旋转原理图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度, 通常是指绕图像的中心以逆时针方向旋转。假设图像的原创 2021-12-15 10:20:06 · 2635 阅读 · 0 评论 -
自动微分延迟计算
自动微分延迟计算BP(反向传播),为什么BP不好呢?每一步都会保存了上一步中,计算出来的缓冲数据,这样在每次进行反向传播时,占用的内存比较高。自动微分的核心概念,延迟计算。先选取一个目标函数,求输出两个权重参数(W_1,W_2W1,W2)的导数。先求出1/x的导数-1/x_2−1/x2,没有计算这个-1/x_2−1/x2的值。前项与1的加法操作的导数,这个导数很显然是1。对exp这个op求导,可得到导数exp(x)。可得到JJ对W_1W1的偏导,将前面所有得到的式子,相应的op的输入代原创 2021-12-15 06:15:09 · 404 阅读 · 0 评论 -
TensorRT优化方案图例
TensorRT优化方案图例图 12. TensorRT 循环由循环边界层设置。数据流只能通过下方式离开循环环输出层. 唯一允许的后边缘是第二个输入递归层。图 13. 一个 if 条件构造抽象模型图 14. 使用控制条件执行 IIf条件输入层 放置图 15. 层执行和在 CPU 端启动的内核。图 16. 内核实际运行在 GPU 上,换句话说,显示了 CPU 端的层执行和内核启动与在 GPU 端的执行之间的相关性。图 17. 布局格式 CHW: 图像分为 高×宽矩阵,每个通道一个,矩阵原创 2021-12-14 05:50:08 · 329 阅读 · 1 评论 -
Tensorrt一些优化技术介绍
Tensorrt一些优化技术介绍Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a Q layer. All three layers are replaced by a quantized AveragePool layer (in green).Figure 2. An illustration depicting a DQ forward-propagation and Q ba原创 2021-12-13 05:47:45 · 280 阅读 · 0 评论 -
LLVM与Clang编译图例
LLVM与Clang编译图例参考链接:https://blog.youkuaiyun.com/u012874859/article/details/108530256原创 2021-12-12 06:24:43 · 364 阅读 · 0 评论 -
OpenCL产业开发链
OpenCL产业开发链OPEN STANDARD FOR PARALLEL PROGRAMMING OF HETEROGENEOUS SYSTEMSOpenCL™ (Open Computing Language,开放计算语言)是一种开放、免版税的标准,适用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。OpenCL极大地提高了众多市场类别中各种应用程序的速度和响应能力,包括专业创意工具、科学和医疗软件、视觉处理以及神经网络训练和推理。OpenCL is Wide原创 2021-12-11 06:30:11 · 323 阅读 · 0 评论 -
OpenCL框架与示例
OpenCL框架与示例下面的图简单说明了OpenCL的编程框架,图是用的GPU,其他类似;名词的概念:Platform (平台):主机加上OpenCL框架管理下的若干设备构成了这个平台,通过这个平台,应用程序可以与设备共享资源并在设备上执行kernel。实际使用中基本上一个厂商对应一个Platform,比如Intel, AMD都是这样。Device(设备):官方的解释是计算单元(Compute Units)的集合。举例来说,GPU是典型的device。Intel和AMD的多核CPU也提供OpenC原创 2021-12-10 06:17:49 · 534 阅读 · 0 评论 -
pass基础架构分析
pass基础架构分析Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗。有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码消除,算子布局更改,算子融合,缓冲区处理和循环转换等。这些passes中的每一个,构造为一个 ir-to -ir 转换,使用在遍历期间和/或前收集的分析结果。随着 TVM 的快速发展,对管理这些pass的更系统,更有效的方法的需求,变得越来越明显。此外,管理跨 TVM 堆栈不同层(例如 Relay 和 tir原创 2021-12-09 06:21:31 · 2059 阅读 · 0 评论 -
TensorFlow XLA优化与Memory
TensorFlow XLA优化与MemoryXLA概述XLA(加速线性代数)是用于优化TensorFlow计算的线性代数的域特定编译器。结果是在服务器与移动平台上的速度,内存使用率与可移植性得到了改善。最初,大多数用户不会从XLA中看到很大的好处,通过使用即时(JIT)编译或提前编译(AOT)的XLA进行试验,针对新硬件加速器尝试XLA。XLA框架是实验性与积极的开发。尽管现有算子的语义,不太可能发生变化,但预计将增加更多的算子,涵盖重要的用例。构建XLAXLA与TensorFlow合作有几个目原创 2021-12-08 05:56:42 · 397 阅读 · 0 评论 -
CUDA编程图例
CUDA编程图例CUDA C++ Programming GuideFigure 7. Matrix Multiplication without Shared MemoryFigure 8. Matrix Multiplication with Shared MemoryFigure 20. Examples of Global Memory Accesses. Examples of Global Memory Accesses by a Warp, 4-Byte Word per Thr原创 2021-12-07 06:12:42 · 516 阅读 · 0 评论 -
写算子单元测试Writing Unit Tests
写算子单元测试Writing Unit Tests!一些单元测试示例,可在tests/python/relay/test_op_level3.py中找到,用于累积总和与乘积算子。梯度算子梯度算子对于编写Relay中的可微程序非常重要。虽然Relay的autodiff算法可区分一流的语言结构,但算子是不透明的。Relay无法查看实现,必须提供明确的差异化规则。Python和C++都可编写梯度算子,但是,示例集中在Python上,更常用。在Python中添加梯度Python梯度算子的集合可在Pyth原创 2021-12-06 05:45:55 · 416 阅读 · 0 评论 -
ONNX MLIR应用示例(含源码链接)
ONNX MLIR应用示例(含源码链接)开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/)。Prebuilt Containers开始使用ONNX-MLIR的一个简单方法是使用预构建的docker映像。这些映像是在主干上成功合并生成的结果。最新的图像代表主干的顶端。目前,Docker Hub中保存的amd64、ppc64le和s390x的发布和调试模式映像分别为onnxmlirczar/onnx-mlir和onnxmlirczar/onnx-mlir-dev原创 2021-12-04 06:44:14 · 764 阅读 · 0 评论 -
用动态实现扩展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 · 587 阅读 · 0 评论 -
三段式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 · 789 阅读 · 0 评论 -
JIT Code Generation代码生成
JIT Code Generation代码生成一.表达式编译代码生成(Code Generation)技术广泛应用于现代的数据系统中。代码生成是将用户输入的表达式、查询、存储过程等现场编译成二进制代码再执行,相比解释执行的方式,运行效率要高得多。尤其是对于计算密集型查询、或频繁重复使用的计算过程,运用代码生成技术能达到数十倍的性能提升。代码生成很多大数据产品都将代码生成技术作为卖点,然而事实上往往谈论的不是一件事情。比如,之前就有人提问:Spark 1.x 就已经有代码生成技术,为什么 Spark原创 2021-11-27 06:32:55 · 627 阅读 · 0 评论 -
linux C++打包程序总结
linux C++打包程序总结linux c++ 动态库打包 应用程序打包 动态库搜索路径问题linux环境下打包C++应用程序,包括依赖的动态库,以便解决程序发布后程序运行动态库缺失问题解决 动态库编译时添加-fPIC编译选项(一般动态库都会有此选项,自己写的库记得添加) -fPIC: 生成与位置无关代码 编译自己的应用程序,得到test 打包动态库:使用pack_lib.sh脚本将test依赖的动态库至某文件夹(如可在发布的程序根目录下新建lib文件夹,如下所示)bin/te原创 2021-11-26 06:02:42 · 2359 阅读 · 1 评论