Skip to content

Commit edeed76

Browse files
authored
reproduce some mismatch points (#58)
1 parent f43bb39 commit edeed76

126 files changed

Lines changed: 3831 additions & 3252 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/skills/compat-doc-authoring/SKILL.md

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,39 @@ argument-hint: '要编写的头文件或模块,例如 typeid.h、Stream.h、Te
3333

3434
## 标准模板(推荐)
3535

36-
1. 标题:`<HeaderName> 头文件 API 兼容性`
37-
2. 对比文件列表(Paddle / Torch)
38-
3. 状态说明(`✅/🔧/❌`
39-
4. 分组表格(按构造、访问器、静态函数、宏等)
40-
5. `### 兼容性统计`
41-
6. `### 备注`(可选)
36+
1. **文件头**:日期与复核说明(`> YYYY-MM-DD 编制/复核:...`
37+
2. **对比文件列表**(点列表格式)
38+
3. **状态说明段落**(定义 `✅/🔧/❌/🟦` 含义)
39+
4. **API 对比表(分组)**(按构造、访问器、操作等分类)
40+
5. `## 兼容性统计`(简化2列表)
41+
6. `## 关键差异说明`(按序列号)
42+
7. `## 备注`(实现细节、编译依赖等)
4243

43-
表格列默认:
44+
### 表格标准列
4445

46+
```markdown
4547
| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 |
46-
|---|---|---|---|---|
48+
|-----------|------------------|------------|-------|------|
49+
```
50+
51+
**约定**
52+
- `paddle API 兼容性`:使用符号 ✅/🔧/❌/🟦
53+
- `测试用例状态`:使用 checkbox `- [ ]``- [x]`
54+
- `优先级`:使用 P0/P1/P2/P3 标记
55+
- P0: 核心功能,必须支持
56+
- P1: 常用功能,高优先级
57+
- P2: 进阶功能,中优先级
58+
- P3: 边缘功能,低优先级
59+
60+
### 兼容性统计表
61+
62+
```markdown
63+
| 状态 | 数量 |
64+
|---|---|
65+
| ✅ 已实现 | N1 |
66+
| 🔧 部分兼容 | N2 |
67+
| ❌ 未实现 | N3 |
68+
```
4769

4870
## 工作流程
4971

@@ -94,11 +116,13 @@ argument-hint: '要编写的头文件或模块,例如 typeid.h、Stream.h、Te
94116

95117
发布前必须检查:
96118

97-
1. 文档中存在 `### 兼容性统计`
119+
1. 文档中存在 `## 兼容性统计`(2级标题)
98120
2. 统计值与表格行数一致
99121
3. 对比文件路径正确且可访问
100-
4. `🔧` 条目都解释了“差异在哪里”
101-
5. 无明显过时描述(如“未接入”但代码已接入)
122+
4. 每个 🔧 条目都在"关键差异说明"中有详细说明
123+
5. 测试用例状态全部使用 checkbox `- [ ]` / `- [x]`
124+
6. 优先级全部使用 P0/P1/P2/P3 标记
125+
7. 无明显过时描述(如"未接入"但代码已接入)
102126

103127
## 决策与分支
104128

@@ -123,10 +147,28 @@ argument-hint: '要编写的头文件或模块,例如 typeid.h、Stream.h、Te
123147

124148
## 质量标准
125149

126-
1. 可审阅:每个差异都有落点说明
127-
2. 可验证:统计表可由行数复算
128-
3. 可维护:结构稳定、命名统一、索引清晰
129-
4. 可复用:同一模板可直接用于下一个头文件
150+
1. **可审阅**:每个🔧条目都在"关键差异说明"中有详细落点
151+
2. **可验证**:统计值与表格行数一致(可逐行检查)
152+
3. **可维护**:格式统一、轻级标题稳定、优先级一致
153+
4. **可复用**:同一模板可直接用于下一个头文件(如Stream.h、TensorBase.h)
154+
155+
## 常见隐患与修复
156+
157+
### 隐患 1:优先级混用
158+
**❌ 错误**:有的行用 `P0`,有的用 `高/中/低`,有的用 `H/M/L`
159+
**✅ 要求**:全文统一用 P0/P1/P2/P3
160+
161+
### 隐患 2:测试用例状态不规范
162+
**❌ 错误**:用 `✅/⚠️/❌``` / ``
163+
**✅ 要求**:全文统一用 checkbox `- [ ]``- [x]`
164+
165+
### 隐患 3:统计表行数与表格不符
166+
**❌ 错误**:表格有 15 行,但统计 ✅:9 + 🔧:4 = 13
167+
**✅ 要求**:逐行数清,再填入统计表
168+
169+
### 隐患 4:🔧 条目无备注
170+
**❌ 错误**:只写 `🔧` 不说明差异在哪
171+
**✅ 要求**:每个 🔧 都在"关键差异说明"中有小节说明
130172

131173
## 推荐触发词示例
132174

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,5 @@ Makefile
4747
Thumbs.db
4848

4949
.humanize
50+
.codex
51+
.codex_tmp

CMakeLists.txt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ endif()
1818
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
1919
get_filename_component(THIRD_ROOT "${PROJECT_BINARY_DIR}/3rd_party" ABSOLUTE)
2020

21+
include(ccache)
2122
include(external)
2223

2324
find_package(Threads REQUIRED)
@@ -65,13 +66,10 @@ enable_testing()
6566
include_directories(${COMMON_INCLUDES})
6667
include(cmake/build.cmake)
6768

68-
file(GLOB TEST_SRC_FILES ${PROJECT_SOURCE_DIR}/test/*.cpp
69-
${PROJECT_SOURCE_DIR}/test/ops/*.cpp)
70-
# 排除已unmatch开头的文件
71-
file(GLOB UNMATCH_FILES ${PROJECT_SOURCE_DIR}/test/unmatch*.cpp
72-
${PROJECT_SOURCE_DIR}/test/ops/unmatch*.cpp)
73-
74-
list(REMOVE_ITEM TEST_SRC_FILES ${UNMATCH_FILES})
69+
file(GLOB_RECURSE TEST_SRC_FILES CONFIGURE_DEPENDS
70+
${PROJECT_SOURCE_DIR}/test/*.cpp)
71+
# 排除各级子目录下以 unmatch_ 开头的测试文件
72+
list(FILTER TEST_SRC_FILES EXCLUDE REGEX "/unmatch_[^/]+\\.cpp$")
7573

7674
file(GLOB_RECURSE TEST_BASE_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp)
7775
set(PADDLE_TARGET_FOLDER ${CMAKE_BINARY_DIR}/paddle)
@@ -101,6 +99,9 @@ set(TORCH_DIR
10199
set(TORCH_LIBRARIES "")
102100
file(GLOB_RECURSE TORCH_LIBRARIES "${TORCH_DIR}/lib/*.so"
103101
"${TORCH_DIR}/lib/*.a")
102+
if(CUDAToolkit_FOUND)
103+
list(APPEND TORCH_LIBRARIES CUDA::cudart)
104+
endif()
104105

105106
find_package(CUDAToolkit QUIET)
106107
set(TORCH_INCLUDE_DIR "${TORCH_DIR}/include"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ cd .. && ./test/result_cmp.sh build
8080

8181
### 适用场景
8282

83-
- 新增 ATen 算子的兼容性测试(如 `test/ops/AbsTest.cpp`
83+
- 新增 ATen 算子的兼容性测试(如 `test/ATen/ops/AbsTest.cpp`
8484
- 排查 Paddle 与 PyTorch 在特定算子上的行为差异
8585
- 扩展现有测试的 shape / dtype 覆盖范围
8686

cmake/ccache.cmake

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Use ccache if found ccache program
2+
3+
if(NOT WIN32)
4+
find_program(CCACHE_PATH ccache)
5+
if(CCACHE_PATH)
6+
execute_process(COMMAND ccache -V OUTPUT_VARIABLE ccache_output)
7+
execute_process(COMMAND ccache -v -s cache directory
8+
OUTPUT_VARIABLE cache_directory)
9+
string(REGEX MATCH "[0-9]+.[0-9]+" ccache_version ${ccache_output})
10+
message(STATUS "ccache is founded, use ccache to speed up compile on Unix.")
11+
# show statistics summary of ccache
12+
message("ccache version\t\t\t " ${ccache_version} "\n"
13+
${cache_directory})
14+
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PATH})
15+
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PATH})
16+
set(CMAKE_CUDA_COMPILER_LAUNCHER ${CCACHE_PATH})
17+
endif()
18+
elseif("${CMAKE_GENERATOR}" STREQUAL "Ninja")
19+
# Only Ninja Generator can support sccache now
20+
find_program(SCCACHE_PATH sccache)
21+
if(SCCACHE_PATH)
22+
execute_process(COMMAND sccache -V OUTPUT_VARIABLE sccache_version)
23+
message(
24+
STATUS
25+
"sccache is founded, use [${SCCACHE_PATH}] to speed up compile on Windows."
26+
)
27+
set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_PATH})
28+
set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_PATH})
29+
endif()
30+
endif()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
- Paddle 的 `check_generator<T>` 未做 `T::device_type()``gen->device().type()` 的一致性校验。
133133

134134
3. **测试依据**
135-
- 参考 `test/GeneratorTest.cpp` 中已覆盖用例:`defined`、seed/offset、`device``clone``get_generator_or_default` 等。
135+
- 参考 `test/ATen/cuda/GeneratorTest.cpp` 中已覆盖用例:`defined`、seed/offset、`device``clone``get_generator_or_default` 等。
136136
- 标记为 🔧 或 `- [ ]` 的项多数为头文件接口存在但缺少直接单测。
137137

138138
4. **更新记录**
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# IValue(已对齐)
2+
3+
> Paddle 头文件:`ATen/core/ivalue.h`
4+
> 状态:已对齐(2026-03-28)
5+
6+
当前 compat `IValue` 已补齐以下 PyTorch 风格接口:
7+
8+
1. `c10::IValue` 入口,可直接按 PyTorch 方式引用。
9+
2. camelCase 方法:`isNone()``isBool()``isInt()``isDouble()``isString()``isList()``isTensor()``isCustomClass()``isTuple()`
10+
3. 提取方法:`toBool()``toInt()``toDouble()``toStringRef()``toStringView()``toTensor()``toScalarType()`
11+
4. 调试接口:`tagKind()`
12+
13+
验证位置:
14+
15+
- `test/ATen/core/IValueTest.cpp`
16+
- `test/torch/LibraryTest.cpp`
17+
18+
说明:
19+
20+
- `torch::IValue` 兼容入口仍保留,便于已有调用方平滑迁移。
21+
- 该节原先记录的命名空间、camelCase 命名、`tagKind()``toStringRef()` 差异已不再是当前阻塞项。
22+
23+
24+
---
25+
26+
# Tensor::resize_(已对齐)
27+
28+
> Paddle 相关头文件:`ATen/core/TensorBody.h``ATen/ops/resize.h`
29+
> 状态:基础 `resize_` 语义已对齐(2026-03-30)
30+
31+
## Diff 测试用例位置
32+
33+
测试文件:`test/ATen/core/TensorTest.cpp`
34+
35+
### 测试用例原文
36+
37+
```cpp
38+
// 测试 resize_ - 缩小元素数时应成功并保留前缀数据
39+
TEST_F(TensorTest, Resize) {
40+
auto file_name = g_custom_param.get();
41+
FileManerger file(file_name);
42+
file.openAppend();
43+
file << "Resize ";
44+
tensor.resize_({4, 5});
45+
file << std::to_string(tensor.sizes()[0]) << " ";
46+
file << std::to_string(tensor.sizes()[1]) << " ";
47+
file << std::to_string(tensor.numel()) << " ";
48+
file << std::to_string(tensor.data_ptr<float>()[0]) << " ";
49+
file << std::to_string(tensor.data_ptr<float>()[19]) << " ";
50+
file << "\n";
51+
file.saveFile();
52+
}
53+
```
54+
55+
---
56+
57+
## 输出对比
58+
59+
| 测试用例 | Paddle 输出 | Torch 输出 |
60+
|---------|------------|------------|
61+
| Resize | `4 5 20 1.000000 1.000000` | `4 5 20 1.000000 1.000000` |
62+
63+
---
64+
65+
## 当前行为
66+
67+
当前 compat `resize_` 已改为混合实现:元素总数不变时走 `reshape`,元素总数变化时走 Paddle 原生 `set_` 路径,因此覆盖了当前 diff 用例中 `2x3x4 -> 4x5` 的缩容场景,也不会破坏连续多次 `resize_()` 的稳定性。
68+
69+
当前范围:
70+
71+
1. 支持元素总数变化的 `resize_()` 调用,不再退化为只能 `reshape`。
72+
2. 现有对比用例验证了缩容后 shape、`numel()` 和前缀数据保留行为。
73+
3. `memory_format` 目前仅覆盖 `nullopt` / `Contiguous` 路径,这与当前仓里的使用方式一致。
74+
75+
备注:
76+
77+
- 本节原先“不支持、会抛异常”的结论已失效,排查时请以现有实现和测试结果为准。
78+
79+
---
80+
81+
# Tensor::pin_memory / is_pinned(已对齐)
82+
83+
> Paddle 相关头文件:`ATen/core/TensorBody.h`
84+
> 状态:已按 PyTorch 语义对齐(2026-03-28)
85+
86+
当前行为:
87+
88+
1. `pin_memory()` 仅接受 CPU Tensor,非 CPU Tensor 直接报错。
89+
2. `is_pinned()` 仅对 pinned host tensor 返回 true。
90+
3. `device` 形参保留兼容入口,但按 PyTorch 语义视为 deprecated。
91+
92+
验证位置:
93+
94+
- `test/ATen/core/TensorTest.cpp`
95+
96+
备注:
97+
98+
- 该节原先记录的是历史差异,当前实现与文档旧结论不一致,排查时请以现有实现和测试结果为准。
99+
100+
---
101+
102+
103+
---
104+
105+
# Tensor 指针 API(`const_data_ptr<T>` / `mutable_data_ptr<T>`,已对齐)
106+
107+
> Paddle 头文件:`ATen/core/TensorBody.h`
108+
> 状态:已对齐(2026-03-28)
109+
110+
当前状态:
111+
112+
1. 模板版本 `const_data_ptr<T>()` / `mutable_data_ptr<T>()` 已可正常链接和调用。
113+
2. `test/ATen/ops/TensorPtrTest.cpp` 已恢复直接验证 `float*` / `const float*` 路径。
114+
115+
验证位置:
116+
117+
- `test/ATen/ops/TensorPtrTest.cpp`
118+
119+
备注:
120+
121+
- 本节保留作为历史记录,旧的 `undefined reference` 结论不再适用。
122+
123+
---
File renamed without changes.
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@
300300
| `reshape` ||| P2 | |
301301
| `reshape_as` ||| P2 | |
302302
| `reshape_symint` ||| P2 | |
303-
| `resize_` | 🚧 | 🚧 | P2 | |
303+
| `resize_` | | | P2 | `memory_format` 当前覆盖 `nullopt/Contiguous` |
304304
| `resize__symint` ||| P2 | |
305305
| `resize_as_` ||| P2 | |
306306
| `resize_as_sparse_` ||| P2 | |

0 commit comments

Comments
 (0)