MegEngine/Documentation

如何添加 Oprs 文档一些可以改善的点

dc3671 opened this issue · 2 comments

  • 在实际开发中,新的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 算子里有提到一个 rep 函数,没有来源。实际上是一个宏,本质是一个循环,应该解释一下。

🥰可以根据这个需求开个 PR 搞一下。

我感觉这些是不是有些太细节了,关于 get_workspace_in_bytes 这件事是不是对代码做一次重构更加合适?比如继承一个 OprWithWorkspace 的类。我的点在于文档不应该解决因为代码组织不合理导致的理解困难,这时候往往重构代码会来的更加直接一些。