Replies: 3 comments 1 reply
-
类似的图像算子优化是tvm的设计目标吗? |
Beta Was this translation helpful? Give feedback.
0 replies
-
现在我发现了一个优化点,由于之前在写compute时有一个除法操作,我的输入是uint16(主要是和halide的实现保持一致,对比公平),而compute中无法指定一个uint16的数字(现在我知道了可以用tvm.tir.const),所以采用的方式是传入一个K buffer,让K保存除数来完成compute的编写,而得到的IRModule中,其实可以直接将K Buffer用T.uint16(9)来代替,此操作会带来性能的大幅提高,超过了halide中手写的simd_blur,但离halide的生成代码还有差距,三者的耗时表现大约是tvm_blur->0.0006s,simd_blur->0.0008s,halide_blur->0.0005s。
|
Beta Was this translation helpful? Give feedback.
1 reply
-
将blur算子描述改成如下的样子,再次搜索,性能约0.0007s
搜索得到的策略为:
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
好奇tvm在一些图像算子上优化效果,我从blur算法入手做了些尝试,并与halide进行了对比,有几点疑问想要请教:
搜索出来的调度性能和预期差距较大,看搜索结果似乎并没有tile,vectorize等优化逻辑,两个block也应该可以采用compute_at的方式融合在一块,但是也没有,不知是哪里配置有问题?
自动搜索无果后,我尝试了多种方法来手动对schedule调整,第一个困难是这两个逻辑会创造B, C两个buffer,实际只需要C一个就可以了,如何才能共用呢?
我先忽略了共用buffer的问题,先进行一些schedule调整:
经过上述调整,我们可以得到如下IRModule:
于是我手动改写了该Module,将B buffer换成直接复用C buffer,有一些性能收益,但是不太多是这里本身就会有优化吗?目前与halide仍差距较大,分析了一下,发现T.block("C")中的除法是性能的瓶颈,请问有什么改进建议吗?
Beta Was this translation helpful? Give feedback.
All reactions