You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Paddle/paddle/fluid/operators/jit/README.md

1.6 KiB

JIT Kernel

结合函数模板和JIT生成需要的kernel函数。 这里的kernel是比Operator中kernel更小级别的算子单元更侧重的是在不同硬件上的性能。 目前仅支持CPU上的高性能计算。

目录结构

PaddlePaddle/Paddle/paddle/fluid/
├── ...
├── operator/
│   ├── .../
└── jit/
    ├── ...
    ├── gen/
    │   └── ...
    |── more/
    │   ├── ...
    │   ├── mkl/
    │   │   └── ...
    │   └── openblas/
    │       └── ...
    └── refer/
        └── ...

基础class都的根目录下根目录下包括jitcode,more和refer。每个目录下都是一种实现每种kernel算子都需要有reference的实现其他的都是可选的。

  • jitcode 代表使用jit生成的code需要依赖xbyak。他关心的是性能。
  • refer代表reference的实现每种kernel算子都需要有在CPU上的reference的实现他主要关心的算法逻辑。
  • more 下面可以放入跟多实现包括mklmkldnnopenblas等也可以是自身已有的kernel组合。

动态获取

提供一个get方法根据kernel类别获取每种实现都有自己的使用范围根据范围动态和当前条件选择需要的kernel函数。

测试

  • 逻辑测试 所有实现都要与refer的code对比需要满足精度要求
  • 性能测试

如何添加新的算子

  • KernelType 中添加 your_key
  • 实现Reference 的逻辑每个jitkernel的Reference 实现是必须的。不要依赖任何第三方库。并在refer/CmakeLists.txtUSE_JITKERNEL_REFER(your_key)