- 在实际开发中,新的dnn kernel的执行过程很可能是复用已有kernel的实现,比如 RNN 理论上可以直接用 MatMul 实现,如何复用、有哪些细节要注意,可以写一下 - dnn 里的 kernel 基本都有 exec、check_exec、deduce_layout、get_workspace_in_bytes,直觉上会以为都是 OperatorBase 这个公共基类的虚函数,但实际上全都不是 - 其中 exec、get_workspace_in_bytes 是每个 kernel op 继承 OperatorBase 后自己定义的虚函数(只是约定俗成每个 op 都用这个名字),还需要每个平台的 Impl 类进一步实现,而 check_exec、deduce_layout 则是同一个 kernel op 在各个平台共用的 - 原因应该是每个 op 的 exec 实际上接受的参数并不统一,并不是固定 input/output/workspace 三个值 - 感觉这些细节可以再解释一下,不然不清楚哪些是自定义哪些是规定的 - 另外还有一个小点,[如何添加 DNN 算子](https://megengine.org.cn/doc/stable/zh/development/how-to/add-an-operator-in-megdnn.html#id5)里有提到一个 rep 函数,没有来源。实际上是一个宏,本质是一个循环,应该解释一下。