From 233daf8c818353384fce7c581f7536bbe95c432f Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Tue, 9 Aug 2022 13:09:54 +0800
Subject: [PATCH 1/5] erfinv
---
.../20220805_erfinv_op_optimization.md | 88 +++++++++++++++++++
1 file changed, 88 insertions(+)
create mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
new file mode 100644
index 000000000..acb595885
--- /dev/null
+++ b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
@@ -0,0 +1,88 @@
+# erfinv OP性能优化设计文档
+
+
+| 基本信息 | 内容 |
+| ------------------------------------------------------------ |--------------------------------------|
+| 提交作者 | thunder95 |
+| 提交时间 | 2022-08-05 |
+| 版本号 | V1.0 |
+| 依赖飞桨版本 | PaddleDevelop |
+| 文件名 | 20220805_erfinv_optimization.md
|
+
+
+# 1 背景与意义
+
+目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。
+
+## 1.1 飞桨现状
+
+当前性能如下表(基于PaddlePaddle develop分支):
+
+目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
+
+| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 |
+| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 |
+
+API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv
+
+## 1.2 业内方案调研
+
+Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12):
+
+| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 |
+| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 |
+
+## 1.3 对比分析
+
+目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。
+
+# 2 设计方案与性能预期
+
+## 2.1 关键模块与性能提升点
+
+通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。
+
+## 2.2 Host端计算流程
+
+通过gpu_launch_config.h中的线程配置方法配置1D线程。
+
+## 2.4 Device端计算流程
+
+设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。
+
+# 3 测试和验收的考量
+
+参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
+
+
+
+# 4 可行性分析和排期规划
+
+时间和开发排期规划,主要milestone
+
+| No. | 开发内容 | 预期时间 |
+|---|---|---|
+| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 |
+| 2 | 完成开发文档设计 | 2022-08-08 |
+| 3 | ndtri函数开发 | 2022-08-09 |
+| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 |
+
+
+
+# 5 影响面
+
+待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
+
+
+# 名词解释
+
+
+# 附件及参考资料
+
+[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
+
+
From 36f32a3e5705bb3099d6d5c1d5b7a00d78caca29 Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Tue, 9 Aug 2022 13:12:52 +0800
Subject: [PATCH 2/5] false commit
---
.../20220805_erfinv_op_optimization.md | 88 -------------------
1 file changed, 88 deletions(-)
delete mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
deleted file mode 100644
index acb595885..000000000
--- a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# erfinv OP性能优化设计文档
-
-
-| 基本信息 | 内容 |
-| ------------------------------------------------------------ |--------------------------------------|
-| 提交作者 | thunder95 |
-| 提交时间 | 2022-08-05 |
-| 版本号 | V1.0 |
-| 依赖飞桨版本 | PaddleDevelop |
-| 文件名 | 20220805_erfinv_optimization.md
|
-
-
-# 1 背景与意义
-
-目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。
-
-## 1.1 飞桨现状
-
-当前性能如下表(基于PaddlePaddle develop分支):
-
-目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
-
-| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
-|---|---|---|---|---|
-| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 |
-| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 |
-
-API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv
-
-## 1.2 业内方案调研
-
-Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12):
-
-| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
-|---|---|---|---|---|
-| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 |
-| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 |
-
-## 1.3 对比分析
-
-目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。
-
-# 2 设计方案与性能预期
-
-## 2.1 关键模块与性能提升点
-
-通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。
-
-## 2.2 Host端计算流程
-
-通过gpu_launch_config.h中的线程配置方法配置1D线程。
-
-## 2.4 Device端计算流程
-
-设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。
-
-# 3 测试和验收的考量
-
-参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
-
-
-
-# 4 可行性分析和排期规划
-
-时间和开发排期规划,主要milestone
-
-| No. | 开发内容 | 预期时间 |
-|---|---|---|
-| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 |
-| 2 | 完成开发文档设计 | 2022-08-08 |
-| 3 | ndtri函数开发 | 2022-08-09 |
-| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 |
-
-
-
-# 5 影响面
-
-待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
-
-
-# 名词解释
-
-
-# 附件及参考资料
-
-[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
-
-
From 23da46be0ab9fc2274ce90788cb797ce38ae1d38 Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Tue, 9 Aug 2022 13:54:23 +0800
Subject: [PATCH 3/5] erfinv
---
.../20220805_erfinv_op_optimization.md | 88 +++++++++++++++++++
1 file changed, 88 insertions(+)
create mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
new file mode 100644
index 000000000..acb595885
--- /dev/null
+++ b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
@@ -0,0 +1,88 @@
+# erfinv OP性能优化设计文档
+
+
+| 基本信息 | 内容 |
+| ------------------------------------------------------------ |--------------------------------------|
+| 提交作者 | thunder95 |
+| 提交时间 | 2022-08-05 |
+| 版本号 | V1.0 |
+| 依赖飞桨版本 | PaddleDevelop |
+| 文件名 | 20220805_erfinv_optimization.md
|
+
+
+# 1 背景与意义
+
+目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。
+
+## 1.1 飞桨现状
+
+当前性能如下表(基于PaddlePaddle develop分支):
+
+目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
+
+| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 |
+| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 |
+
+API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv
+
+## 1.2 业内方案调研
+
+Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12):
+
+| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 |
+| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 |
+
+## 1.3 对比分析
+
+目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。
+
+# 2 设计方案与性能预期
+
+## 2.1 关键模块与性能提升点
+
+通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。
+
+## 2.2 Host端计算流程
+
+通过gpu_launch_config.h中的线程配置方法配置1D线程。
+
+## 2.4 Device端计算流程
+
+设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。
+
+# 3 测试和验收的考量
+
+参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
+
+
+
+# 4 可行性分析和排期规划
+
+时间和开发排期规划,主要milestone
+
+| No. | 开发内容 | 预期时间 |
+|---|---|---|
+| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 |
+| 2 | 完成开发文档设计 | 2022-08-08 |
+| 3 | ndtri函数开发 | 2022-08-09 |
+| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 |
+
+
+
+# 5 影响面
+
+待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
+
+
+# 名词解释
+
+
+# 附件及参考资料
+
+[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
+
+
From e3dc6b8c5af8a996376be677a4040f5e6c730bf1 Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Tue, 9 Aug 2022 13:56:06 +0800
Subject: [PATCH 4/5] false commit
---
.../20220805_erfinv_op_optimization.md | 88 -------------------
1 file changed, 88 deletions(-)
delete mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
deleted file mode 100644
index acb595885..000000000
--- a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# erfinv OP性能优化设计文档
-
-
-| 基本信息 | 内容 |
-| ------------------------------------------------------------ |--------------------------------------|
-| 提交作者 | thunder95 |
-| 提交时间 | 2022-08-05 |
-| 版本号 | V1.0 |
-| 依赖飞桨版本 | PaddleDevelop |
-| 文件名 | 20220805_erfinv_optimization.md
|
-
-
-# 1 背景与意义
-
-目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。
-
-## 1.1 飞桨现状
-
-当前性能如下表(基于PaddlePaddle develop分支):
-
-目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
-
-| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
-|---|---|---|---|---|
-| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 |
-| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 |
-
-API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv
-
-## 1.2 业内方案调研
-
-Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12):
-
-| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
-|---|---|---|---|---|
-| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 |
-| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 |
-
-## 1.3 对比分析
-
-目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。
-
-# 2 设计方案与性能预期
-
-## 2.1 关键模块与性能提升点
-
-通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。
-
-## 2.2 Host端计算流程
-
-通过gpu_launch_config.h中的线程配置方法配置1D线程。
-
-## 2.4 Device端计算流程
-
-设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。
-
-# 3 测试和验收的考量
-
-参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
-
-
-
-# 4 可行性分析和排期规划
-
-时间和开发排期规划,主要milestone
-
-| No. | 开发内容 | 预期时间 |
-|---|---|---|
-| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 |
-| 2 | 完成开发文档设计 | 2022-08-08 |
-| 3 | ndtri函数开发 | 2022-08-09 |
-| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 |
-
-
-
-# 5 影响面
-
-待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
-
-
-# 名词解释
-
-
-# 附件及参考资料
-
-[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
-
-
From 90890224ef4678fd0d7bd6da754959077a1d2636 Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Sun, 26 Mar 2023 20:15:54 +0800
Subject: [PATCH 5/5] logsumexp-perf
---
.../20230326_logsumexp_op_optimization.md | 112 ++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md
diff --git a/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md b/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md
new file mode 100644
index 000000000..c665ea4dc
--- /dev/null
+++ b/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md
@@ -0,0 +1,112 @@
+# Logsumexp OP性能优化设计文档
+
+
+| 基本信息 | 内容 |
+| ------------------------------------------------------------ |--------------------------------------|
+| 提交作者 | thunder95 |
+| 提交时间 | 2023-03-26 |
+| 版本号 | V1.0 |
+| 依赖飞桨版本 | PaddleDevelop |
+| 文件名 | 20230326_logsumexp_op_optimization.md
|
+
+
+# 1 背景与意义
+
+目前 Paddle 内 logsumexp 算子 GPU 计算采用了Eigen库实现,性能仍有明显的提升空间。
+
+## 1.1 飞桨现状
+
+当前性能如下表(基于PaddlePaddle develop分支):
+
+目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
+
+| Case No. | device | input_shape | input_type | Paddle Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [64L, 64L] | float32 | 0.0681 |
+| 2 | RTX 2070s | [1024L, 512L] | float32 | 0.67155 |
+| 3 | RTX 2070s | [64L, 64L] | float16 | 0.06718 |
+| 4 | RTX 2070s | [1024L, 512L] | float16 | 0.64455 |
+
+
+API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/logsumexp_cn.html
+
+## 1.2 业内方案调研
+
+Pytorch中API文档: https://pytorch.org/docs/1.12/generated/torch.logsumexp.html?highlight=logsumexp#torch.logsumexp
+
+Pytorch中sum_out可基于cuda计算, forward整体性能如下(基于pytorch v1.12):
+
+| Case No. | device | input_shape | input_type | Pytorch Perf(ms) |
+|---|---|---|---|---|
+| 1 | RTX 2070s | [64L, 64L] | float32 | 0.03757 |
+| 2 | RTX 2070s | [1024L, 512L] | float32 | 0.05742 |
+| 3 | RTX 2070s | [64L, 64L] | float16 | 0.04035 |
+| 4 | RTX 2070s | [1024L, 512L] | float16 | 0.05294 |
+
+## 1.3 对比分析
+
+目前Paddle与Pytorch的API设计方案相似,4种case下测试Pytorch性能更优,
+二者主要差别是Paddle采用的是Eigen方式计算,🕑然而Pytorch中基于cuda可明显提升性能。
+
+pytorch中主要实现代码:
+
+```c++
+static Tensor& logsumexp_out_impl(Tensor& result, const Tensor& self, IntArrayRef dims, bool keepdim) {
+ // can't take max of empty tensor
+ if (self.numel() != 0) {
+ auto maxes = at::amax(self, dims, true);
+ auto maxes_squeezed = (keepdim ? maxes : squeeze_multiple(maxes, dims));
+ maxes_squeezed.masked_fill_(maxes_squeezed.abs() == INFINITY, 0);
+ at::sum_out(result, (self - maxes).exp_(), dims, keepdim);
+ result.log_().add_(maxes_squeezed);
+ } else {
+ at::sum_out(result, at::exp(self), dims, keepdim);
+ result.log_();
+ }
+ return result;
+}
+```
+# 2 设计方案与性能预期
+
+## 2.1 关键模块与性能提升点
+
+基于Paddle中已封装好的Reduce及Elementwise,二者充分利用了向量化读写操作的优秀性能,已做了初步测试,优化的性能能够超出预期。
+
+## 2.2 Host端计算流程
+
+计算reduce的axis,keepdim等,调用reduce算子封装好的接口。
+
+## 2.4 Device端计算流程
+
+基于现有的kps算子进行组装即可。
+
+# 3 测试和验收的考量
+
+参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
+
+# 4 可行性分析和排期规划
+
+时间和开发排期规划,主要milestone
+
+| No. | 开发内容 | 预期时间 |
+|---|---|---|
+| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2023-03-26 |
+| 2 | 完成开发文档设计 | 2023-03-26 |
+| 3 | logsumexp优化实现 | 2023-03-26 |
+| 3 | 完成代码开发工作,并通过线程CI测试 | 2023-03-31 |
+
+
+
+# 5 影响面
+
+待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
+
+
+# 名词解释
+
+
+# 附件及参考资料
+
+[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
+
+