- 博客(11)
- 问答 (1)
- 收藏
- 关注
原创 AI编译通用底层优化(零)写在开始
从毕业一直在做AI编译器,自我感觉技术不错,但一直只是闷头干活。吹牛虽然不好,但该讲的还是要讲出来的。2、内存layout推导。
2025-04-03 11:20:21
169
原创 LLM性能优化(一)Flash Attention 1
未优化的计算流程(如左图)由于all超大,中间结果都要存在空间较大的低速缓存中。希望分块计算(如右图),中间结果存在空间较小的高速缓存里,直接参与下一步的分块计算。
2025-03-06 20:06:56
356
原创 c++(三)右值引用
c++中存在右值,简单的比如函数返回值,是临时值,但也是占用了一块内存的。想把函数返回值这块内存直接利用起来,避免再有内存的拷贝,即移动语义。注意任何有名称的变量本身都是左值,只是有的指向左值,有的指向右值。1、为什么引入右值引用?
2025-03-03 22:02:32
291
原创 c++(一)继承与多态
如果定义两个完全独立的类,对于体重这种共同属性,两个类的代码会完全重复,而且“动物的体重”这一逻辑不容易实现。现在给出父类Animal的定义,以及一个animalEat接口,需要通过继承来定义大象与长颈鹿,之后实例化,通过子类调用printWeight方法验证继承,调用animalEat接口实现多态。所有动物都要吃东西,但不同的动物吃的东西和吃东西的动作是不一样的。因为要同时实现“大象吃东西”、“长颈鹿吃东西”、“动物吃东西”这些逻辑。特别是“动物吃东西”,要能判断出对象是大象还是长颈鹿。
2025-02-20 15:45:05
155
原创 c++(零)写在开始
最近要做一些架构相关工作,虽然一直在用c++,但从来没系统的学习过,是时候补一下基础了。个人认为简单基础的就不写了,先大致排一个顺序,尽量做到后面依赖前面。
2025-02-20 14:00:58
135
原创 onnx-mlir(四)llvm后端
直接看到这里吧,我理解这里就将mlir转换到llvm了。在这个函数中,前面都是mlir 内置 dialect的转换,直接调的llvm-project中的方法,最后使用“krnl::populateKrnlToLLVMConversion”方法将krnl dialect也转换到了llvm。
2023-12-25 15:35:42
725
原创 onnx-mlir(三)mlir内置dialect
按之前的流程跑下来,看log,可以看到一些mlir内置dialect,具体dialect介绍可以看官方文档。ConvertVectorToSCF:vector dialect转scf dialect。1、为什么要调这些pass,为什么按这个顺序,mlir有没有一个统一的整合好的调用接口呢?来看一下onnx-mlir中,对这些dialect调用了哪些pass。FoldMemRefAliasOps:没起作用,也没看懂。BufferDeallocation:看起来是内存释放。
2023-12-19 20:29:52
787
原创 onnx-mlir(二)onnx dialect与krnl dialect
可能因为模型比较常规,在onnx dialect层面,多个pass之后,IR变化很小。个人理解onnx-mlir是为了与onnx结构对齐,作用就是使onnx可以方便、直观的转换到mlir上来,很少涉及优化的概念。之后就是转换到krnl dialect了,看起来很复杂,完整的图是贴不下了,以max pool为例看一下吧。接下来就要看转成这么复杂的krnl dialect,是为了做什么优化了,有空补。之后看一下onnx dialect到krnl dialect的转换。
2023-12-17 16:08:27
981
原创 onnx-mlir(一)转换到mlir
可以看到在简单模型中,就是一个module中有一个main func函数。可以看到processInputFile函数,读入onnx文件路径。path/to/下会生成resnet18.onnx.mlir。大概就是这个样子了,细节可以多debug看一下。继续调试,看到创建module。随便找一个onnx运行。创建main func。
2023-12-16 12:26:31
1082
原创 第一篇博客尝试之onnx-mlir
深度学习有tensorflow、pytorch等框架,在onnx之前,各自将深度学习模型保存成不同类型的文件。深度学习模型要落地到实际硬件执行,第一步就是要解析不同类型的文件。onnx统一了模型的格式,所有框架最终都保存成onnx格式,之后就只解析onnx这一种文件就可以了。随着深度学习的爆发以及摩尔定律失效,DSA(领域专用处理器架构)看起来是一个方向。最近也是出现了许多新的硬件架构,新的硬件就需要新的编译器。但不同的编译器又有很多相似的处理流程,各自开发就会有很多重复的工作。
2023-12-16 11:11:12
1556
1
空空如也
mlir RewritePattern为什么不支持匹配多个root op?
2024-04-12
求解释c++结构体。。。
2014-12-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅