Centralize the use of simd intrinsic and implement scalar kernels.#2299
Centralize the use of simd intrinsic and implement scalar kernels.#2299Xreki merged 10 commits intoPaddlePaddle:developfrom
Conversation
2. Centralize the use of sse and neon instrinsic. 3. Disable neon intrinsic when enable gpu.
hedaoyuan
left a comment
There was a problem hiding this comment.
另外,看一下能不能把hl_cpu_scalar.cuh, hl_cpu_simd_sse.cuh和hl_cpu_simd_neon.cuh里��的add,
mul,sub,div这几个基本操作实现到hl_tensor_ops.h里面去。
| #elif defined(__SSE3__) | ||
| #include "hl_cpu_simd_sse.cuh" | ||
| #elif (defined(__ARM_NEON) || defined(__ARM_NEON__)) && !defined(__NVCC__) | ||
| #include "hl_cpu_simd_neon.cuh" |
There was a problem hiding this comment.
这里注释说明一下加入__NVCC__宏的原因。
另外,ARM+GPU环境下,ARM部分用不了neon指令。应该加一个TODO,后续还是需要fix这个问题的。
另外,其实Paddle里面还有好多用avx实现的kernel,目前没有neon实现,我做这一层对基本操作封装��也是希望日后可以用封装的接口代替直接调用的
还有一个问题,当前这种实现方式没有考虑到运行时动态选择指令集的实现。是不是不要统一命名的好? |
不是三个版本,是实现一个版本。hl_tensor_ops.cuh里面定义的是模板类,可以实例化不同的参数类型。
只是没有实现而已。
这个有什么关系吗?不统一命名,调用的时候用if else区分? |
我明白了。
我明白了。没有关系了,统一命名,可以以类型区分。 |
Major modifications are listed as follows:
hl_cpu_simd_sse.cuhandhl_cpu_simd_neon.cuh.hl_cpu_scalar.cuh.As a result, we do not need
hl_matrix_base_[sse/neon].cuh,hl_[sse/neon]_matrix_kernel.cuhany more, which are almost the same.