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
tensor-tang 6eec461725
add lstm peephole benchmark
6 years ago
..
gen add benchmark 6 years ago
more add refer vadd, vaddrelu, vsub and tests and benchmark 6 years ago
refer add lstm, peephole refer and test 6 years ago
CMakeLists.txt add benchmark 6 years ago
README.md add refer vscal, vaddbias and test and benchmark 6 years ago
benchmark.cc add lstm peephole benchmark 6 years ago
gen_base.cc add lstm, peephole refer and test 6 years ago
gen_base.h add lstm, peephole refer and test 6 years ago
helper.cc add lstm, peephole refer and test 6 years ago
helper.h add lstm, peephole refer and test 6 years ago
kernel_base.h add lstm, peephole refer and test 6 years ago
kernel_key.cc add lstm, peephole refer and test 6 years ago
kernel_key.h add lstm, peephole refer and test 6 years ago
kernel_pool.cc use jitcode and use vmul 6 years ago
kernel_pool.h use jitkernel in one file 6 years ago
registry.h use jitcode and use vmul 6 years ago
test.cc add lstm, peephole refer and test 6 years ago

README.md

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对比需要满足精度要求 包括float和double的数据类型
  • 性能测试 所有实现的性能对比,并且与最终的jit::Get方法对比,该方法拿到的性能需要是最好的。

如何添加新的算子

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