关于张量程序的转换 #14
-
课程中的例子都是需要手动指定张量程序的转换行为,比如loop split,reorder等。真实的机器学习编译也是这样的吗,也是需要手动指明index之间有没有依赖,如何做转换(比如是拆成3个子loop),人工地提供信息,还是会通过程序去分析。这里是不是跟传统的编译类似,比如我指明一个函数是inline的,但编译器不一定真正去做内联,人工提供的信息只是一种建议。还是说人工提供的信息类似一种编译选项。 |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 2 replies
-
真实的机器学习编译会通过程序去分析需要执行的张量程序转换,当程序分析到一个函数需要inline的时候,它就会执行。 |
Beta Was this translation helpful? Give feedback.
-
感谢你的提问,你的提问中涉及了两个概念:如何做变换,和什么时候需要变换。 loop split,reorder都是在讲我们怎么做变换,相当于是从一个程序(IR)变换到另一个程序。与之对应的是编译器中的inline变换(而不是用户建议),即把两个function的IR变换成一个function的IR。 第二个方面是什么时候做变换,即我们什么时候去做变换,给变换的参数是什么(比如index之间有没有依赖,比如传统编译器中我们是不是“真正”去inline)。 这两层概念在ML和传统编译器领域都是很重要的,只是涉及面不同。前者更加面相与编译器开发者,后者更多的会与使用者相关。本课程主要涉及的是前者,即MLC是怎么做的;与之对应的MLC是怎么用的才是后者更关心的问题。 |
Beta Was this translation helpful? Give feedback.
感谢你的提问,你的提问中涉及了两个概念:如何做变换,和什么时候需要变换。
loop split,reorder都是在讲我们怎么做变换,相当于是从一个程序(IR)变换到另一个程序。与之对应的是编译器中的inline变换(而不是用户建议),即把两个function的IR变换成一个function的IR。
第二个方面是什么时候做变换,即我们什么时候去做变换,给变换的参数是什么(比如index之间有没有依赖,比如传统编译器中我们是不是“真正”去inline)。
这两层概念在ML和传统编译器领域都是很重要的,只是涉及面不同。前者更加面相与编译器开发者,后者更多的会与使用者相关。本课程主要涉及的是前者,即MLC是怎么做的;与之对应的MLC是怎么用的才是后者更关心的问题。