|
| 1 | +##### TensorBase.h 头文件 API 兼容情况 |
| 2 | + |
| 3 | + |
| 4 | +##### TensorBase.h 头文件 API 兼容性 |
| 5 | + |
| 6 | +✅ 表示已经支持 |
| 7 | +🚧 表示正在支持 |
| 8 | +❌ 表示不准备支持 |
| 9 | +🔧 表示部分支持(有功能限制) |
| 10 | + |
| 11 | +**按照功能分类排序** |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +### 构造与赋值 |
| 16 | + |
| 17 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 18 | +|------------------------------|------------------|------------|-------|------| |
| 19 | +| `TensorBase()` | ✅ | ✅ | P0 | 默认构造函数 | |
| 20 | +| `TensorBase(const TensorBase&)` | ✅ | ✅ | P0 | 拷贝构造函数 | |
| 21 | +| `TensorBase(TensorBase&&)` | ✅ | ✅ | P0 | 移动构造函数 | |
| 22 | +| `operator=(const TensorBase&)` | ✅ | ✅ | P0 | 拷贝赋值运算符 | |
| 23 | +| `operator=(TensorBase&&)` | ✅ | ✅ | P0 | 移动赋值运算符 | |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +### 数据访问 API |
| 28 | + |
| 29 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 30 | +|------------------------------|------------------|------------|-------|------| |
| 31 | +| `data_ptr()` | ✅ | ✅ | P0 | 返回 `void*` | |
| 32 | +| `data_ptr<T>()` | ✅ | ✅ | P0 | 返回类型化指针 | |
| 33 | +| `const_data_ptr()` | ✅ | ✅ | P0 | 返回 `const void*` | |
| 34 | +| `const_data_ptr<T>()` | ✅ | ✅ | P0 | 返回类型化 const 指针 | |
| 35 | +| `mutable_data_ptr()` | ✅ | ✅ | P0 | 返回可变 `void*` | |
| 36 | +| `mutable_data_ptr<T>()` | ✅ | ✅ | P0 | 返回可变类型化指针 | |
| 37 | +| `accessor<T, N>()` | ✅ | ✅ | P1 | TensorAccessor | |
| 38 | +| `generic_packed_accessor<T, N>()` | - [ ] | - [ ] | P2 | CUDA PackedTensorAccessor | |
| 39 | +| `packed_accessor32<T, N>()` | - [ ] | - [ ] | P2 | 32位索引 PackedAccessor | |
| 40 | +| `packed_accessor64<T, N>()` | - [ ] | - [ ] | P2 | 64位索引 PackedAccessor | |
| 41 | + |
| 42 | +--- |
| 43 | + |
| 44 | +### 维度与形状 API |
| 45 | + |
| 46 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 47 | +|------------------------------|------------------|------------|-------|------| |
| 48 | +| `dim()` | ✅ | ✅ | P0 | 返回维度数 | |
| 49 | +| `ndimension()` | ✅ | ✅ | P0 | 同 `dim()` | |
| 50 | +| `size(dim)` | ✅ | ✅ | P0 | 支持负索引 | |
| 51 | +| `sizes()` | ✅ | ✅ | P0 | 返回 IntArrayRef | |
| 52 | +| `stride(dim)` | ✅ | ✅ | P0 | 支持负索引 | |
| 53 | +| `strides()` | ✅ | ✅ | P0 | 返回 IntArrayRef | |
| 54 | +| `numel()` | ✅ | ✅ | P0 | 元素总数 | |
| 55 | +| `storage_offset()` | 🚧 | 🚧 | P2 | | |
| 56 | +| `sym_size(dim)` | - [ ] | - [ ] | P3 | 符号化 size | |
| 57 | +| `sym_stride(dim)` | - [ ] | - [ ] | P3 | 符号化 stride | |
| 58 | +| `sym_sizes()` | - [ ] | - [ ] | P3 | 符号化 sizes | |
| 59 | +| `sym_strides()` | - [ ] | - [ ] | P3 | 符号化 strides | |
| 60 | +| `sym_numel()` | - [ ] | - [ ] | P3 | 符号化 numel | |
| 61 | +| `sym_storage_offset()` | 🚧 | 🚧 | P3 | 符号化 storage_offset | |
| 62 | + |
| 63 | +--- |
| 64 | + |
| 65 | +### 内存与字节 API |
| 66 | + |
| 67 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 68 | +|------------------------------|------------------|------------|-------|------| |
| 69 | +| `nbytes()` | ✅ | ✅ | P0 | 总字节数 | |
| 70 | +| `itemsize()` | ✅ | ✅ | P0 | 单元素字节数 | |
| 71 | +| `element_size()` | ✅ | ✅ | P0 | 同 `itemsize()` | |
| 72 | + |
| 73 | +--- |
| 74 | + |
| 75 | +### 类型与设备 API |
| 76 | + |
| 77 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 78 | +|------------------------------|------------------|------------|-------|------| |
| 79 | +| `dtype()` | ✅ | ✅ | P0 | 返回 ScalarType | |
| 80 | +| `scalar_type()` | ✅ | ✅ | P0 | 同 `dtype()` | |
| 81 | +| `device()` | ✅ | ✅ | P0 | 返回 Device | |
| 82 | +| `get_device()` | ✅ | ✅ | P0 | 返回设备索引 | |
| 83 | +| `options()` | ✅ | ✅ | P0 | 返回 TensorOptions | |
| 84 | +| `layout()` | 🚧 | 🚧 | P2 | 返回 Layout | |
| 85 | +| `key_set()` | - [ ] | - [ ] | P3 | DispatchKeySet | |
| 86 | + |
| 87 | +--- |
| 88 | + |
| 89 | +### 设备类型检查 API |
| 90 | + |
| 91 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 92 | +|------------------------------|------------------|------------|-------|------| |
| 93 | +| `is_cpu()` | ✅ | ✅ | P0 | CPU 后端检查 | |
| 94 | +| `is_cuda()` | ✅ | ✅ | P0 | CUDA 后端检查 | |
| 95 | +| `is_xpu()` | - [ ] | - [ ] | P2 | XPU 后端检查 | |
| 96 | +| `is_ipu()` | - [ ] | - [ ] | P3 | IPU 后端检查 | |
| 97 | +| `is_xla()` | - [ ] | - [ ] | P3 | XLA 后端检查 | |
| 98 | +| `is_mtia()` | - [ ] | - [ ] | P3 | MTIA 后端检查 | |
| 99 | +| `is_hpu()` | - [ ] | - [ ] | P3 | HPU 后端检查 | |
| 100 | +| `is_lazy()` | - [ ] | - [ ] | P3 | Lazy 后端检查 | |
| 101 | +| `is_hip()` | - [ ] | - [ ] | P3 | HIP 后端检查 | |
| 102 | +| `is_ve()` | - [ ] | - [ ] | P3 | VE 后端检查 | |
| 103 | +| `is_privateuseone()` | - [ ] | - [ ] | P3 | PrivateUse1 后端检查 | |
| 104 | +| `is_meta()` | - [ ] | - [ ] | P3 | Meta tensor 检查 | |
| 105 | + |
| 106 | +--- |
| 107 | + |
| 108 | +### 张量属性检查 API |
| 109 | + |
| 110 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 111 | +|------------------------------|------------------|------------|-------|------| |
| 112 | +| `defined()` | ✅ | ✅ | P0 | 是否已定义 | |
| 113 | +| `is_contiguous()` | ✅ | ✅ | P0 | 连续性检查 | |
| 114 | +| `sym_is_contiguous()` | - [ ] | - [ ] | P3 | 符号化连续性检查 | |
| 115 | +| `is_contiguous_or_false()` | - [ ] | - [ ] | P3 | | |
| 116 | +| `is_non_overlapping_and_dense()` | - [ ] | - [ ] | P3 | | |
| 117 | +| `is_complex()` | - [ ] | - [ ] | P2 | 是否复数类型 | |
| 118 | +| `is_floating_point()` | - [ ] | - [ ] | P2 | 是否浮点类型 | |
| 119 | +| `is_signed()` | - [ ] | - [ ] | P2 | 是否有符号类型 | |
| 120 | +| `is_sparse()` | - [ ] | - [ ] | P3 | 是否稀疏张量 | |
| 121 | +| `is_sparse_csr()` | - [ ] | - [ ] | P3 | 是否 CSR 稀疏张量 | |
| 122 | +| `is_mkldnn()` | - [ ] | - [ ] | P3 | 是否 MKLDNN 张量 | |
| 123 | +| `is_mps()` | - [ ] | - [ ] | P3 | 是否 MPS 张量 | |
| 124 | +| `is_vulkan()` | - [ ] | - [ ] | P3 | 是否 Vulkan 张量 | |
| 125 | +| `is_metal()` | - [ ] | - [ ] | P3 | 是否 Metal 张量 | |
| 126 | +| `is_quantized()` | - [ ] | - [ ] | P3 | 是否量化张量 | |
| 127 | +| `is_inference()` | - [ ] | - [ ] | P3 | 是否推理张量 | |
| 128 | +| `is_nested()` | - [ ] | - [ ] | P3 | 是否嵌套张量 | |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +### 内存格式与连续性 API |
| 133 | + |
| 134 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 135 | +|------------------------------|------------------|------------|-------|------| |
| 136 | +| `contiguous()` | 🔧 | ✅ | P0 | 仅支持 Contiguous 格式 | |
| 137 | +| `expect_contiguous()` | - [ ] | - [ ] | P2 | MaybeOwned 版本 | |
| 138 | +| `suggest_memory_format()` | - [ ] | - [ ] | P2 | | |
| 139 | + |
| 140 | +--- |
| 141 | + |
| 142 | +### 就地修改操作 API |
| 143 | + |
| 144 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 145 | +|------------------------------|------------------|------------|-------|------| |
| 146 | +| `fill_(scalar)` | ✅ | ✅ | P0 | 填充标量值 | |
| 147 | +| `zero_()` | ✅ | ✅ | P0 | 置零 | |
| 148 | +| `copy_(src, non_blocking)` | ✅ | ✅ | P0 | 复制数据 | |
| 149 | + |
| 150 | +--- |
| 151 | + |
| 152 | +### 形状变换 API |
| 153 | + |
| 154 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 155 | +|------------------------------|------------------|------------|-------|------| |
| 156 | +| `reshape(shape)` | ✅ | ✅ | P0 | | |
| 157 | +| `view(size)` | ✅ | ✅ | P0 | 形状 view | |
| 158 | +| `view(dtype)` | ✅ | ✅ | P1 | 类型 view | |
| 159 | + |
| 160 | +--- |
| 161 | + |
| 162 | +### 类型转换 API |
| 163 | + |
| 164 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 165 | +|------------------------------|------------------|------------|-------|------| |
| 166 | +| `to(options, ...)` | 🔧 | ✅ | P1 | 仅支持 dtype 转换,不支持 device/memory_format | |
| 167 | + |
| 168 | +--- |
| 169 | + |
| 170 | +### 存储相关 API |
| 171 | + |
| 172 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 173 | +|------------------------------|------------------|------------|-------|------| |
| 174 | +| `has_storage()` | 🚧 | 🚧 | P2 | | |
| 175 | +| `storage()` | 🚧 | 🚧 | P2 | | |
| 176 | +| `is_alias_of(other)` | 🚧 | 🚧 | P2 | | |
| 177 | +| `share_memory_()` | - [ ] | - [ ] | P3 | | |
| 178 | + |
| 179 | +--- |
| 180 | + |
| 181 | +### 内部状态 API |
| 182 | + |
| 183 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 184 | +|------------------------------|------------------|------------|-------|------| |
| 185 | +| `is_same(other)` | - [ ] | - [ ] | P2 | 是否同一张量 | |
| 186 | +| `use_count()` | - [ ] | - [ ] | P3 | 引用计数 | |
| 187 | +| `weak_use_count()` | - [ ] | - [ ] | P3 | 弱引用计数 | |
| 188 | +| `reset()` | 🚧 | 🚧 | P2 | 重置张量 | |
| 189 | +| `_is_zerotensor()` | - [ ] | - [ ] | P3 | | |
| 190 | +| `_set_zero(zero)` | - [ ] | - [ ] | P3 | | |
| 191 | +| `is_conj()` | - [ ] | - [ ] | P3 | 共轭标记 | |
| 192 | +| `_set_conj(conjugate)` | - [ ] | - [ ] | P3 | | |
| 193 | +| `is_neg()` | - [ ] | - [ ] | P3 | 负号标记 | |
| 194 | +| `_set_neg(negative)` | - [ ] | - [ ] | P3 | | |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +### TensorImpl 访问 API |
| 199 | + |
| 200 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 201 | +|------------------------------|------------------|------------|-------|------| |
| 202 | +| `unsafeGetTensorImpl()` | - [ ] | - [ ] | P3 | 内部使用 | |
| 203 | +| `unsafeReleaseTensorImpl()` | - [ ] | - [ ] | P3 | 内部使用 | |
| 204 | +| `getIntrusivePtr()` | - [ ] | - [ ] | P3 | 内部使用 | |
| 205 | +| `unsafeReleaseIntrusivePtr()` | - [ ] | - [ ] | P3 | 内部使用 | |
| 206 | + |
| 207 | +--- |
| 208 | + |
| 209 | +### 命名张量 API |
| 210 | + |
| 211 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 212 | +|------------------------------|------------------|------------|-------|------| |
| 213 | +| `has_names()` | - [ ] | - [ ] | P3 | | |
| 214 | +| `opt_names()` | - [ ] | - [ ] | P3 | | |
| 215 | +| `names()` | - [ ] | - [ ] | P3 | | |
| 216 | +| `get_named_tensor_meta()` | - [ ] | - [ ] | P3 | | |
| 217 | + |
| 218 | +--- |
| 219 | + |
| 220 | +### 自动求导 API |
| 221 | + |
| 222 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 223 | +|------------------------------|------------------|------------|-------|------| |
| 224 | +| `requires_grad()` | - [ ] | - [ ] | P1 | | |
| 225 | +| `set_requires_grad(bool)` | - [ ] | - [ ] | P1 | | |
| 226 | +| `requires_grad_(bool)` | - [ ] | - [ ] | P1 | | |
| 227 | +| `is_leaf()` | - [ ] | - [ ] | P2 | | |
| 228 | +| `grad_fn()` | - [ ] | - [ ] | P2 | | |
| 229 | +| `retain_grad()` | - [ ] | - [ ] | P2 | | |
| 230 | +| `retains_grad()` | - [ ] | - [ ] | P2 | | |
| 231 | +| `_fw_grad(level)` | - [ ] | - [ ] | P3 | Forward AD | |
| 232 | +| `_set_fw_grad(...)` | - [ ] | - [ ] | P3 | Forward AD | |
| 233 | +| `register_hook(hook)` | - [ ] | - [ ] | P2 | | |
| 234 | +| `remove_hook(pos)` | - [ ] | - [ ] | P2 | | |
| 235 | +| `output_nr()` | - [ ] | - [ ] | P3 | | |
| 236 | +| `set_data(new_data)` | - [ ] | - [ ] | P2 | | |
| 237 | +| `data()` | - [ ] | - [ ] | P2 | | |
| 238 | +| `_version()` | - [ ] | - [ ] | P3 | | |
| 239 | +| `tensor_data()` | - [ ] | - [ ] | P3 | | |
| 240 | +| `variable_data()` | - [ ] | - [ ] | P3 | | |
| 241 | + |
| 242 | +--- |
| 243 | + |
| 244 | +### 视图相关 API |
| 245 | + |
| 246 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 247 | +|------------------------------|------------------|------------|-------|------| |
| 248 | +| `is_view()` | - [ ] | - [ ] | P2 | | |
| 249 | +| `_base()` | - [ ] | - [ ] | P2 | | |
| 250 | + |
| 251 | +--- |
| 252 | + |
| 253 | +### 杂项 API |
| 254 | + |
| 255 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 256 | +|------------------------------|------------------|------------|-------|------| |
| 257 | +| `toString()` | - [ ] | - [ ] | P3 | | |
| 258 | +| `print()` | - [ ] | - [ ] | P3 | | |
| 259 | +| `name()` | - [ ] | - [ ] | P3 | | |
| 260 | +| `quantizer()` | - [ ] | - [ ] | P3 | 量化器 | |
| 261 | + |
| 262 | +--- |
| 263 | + |
| 264 | +### Paddle 兼容层特有 API |
| 265 | + |
| 266 | +| API | 说明 | |
| 267 | +|------------------------------|------| |
| 268 | +| `_PD_GetInner()` | 获取内部 PaddleTensor 引用 | |
| 269 | + |
| 270 | +--- |
| 271 | + |
| 272 | +### 兼容性统计 |
| 273 | + |
| 274 | +| 状态 | 数量 | |
| 275 | +|------|------| |
| 276 | +| ✅ 已完全支持 | 35 | |
| 277 | +| � 正在支持 | 7 | |
| 278 | +| 🔧 部分支持 | 2 | |
| 279 | +| - [ ] 未实现 | 63+ | |
| 280 | + |
| 281 | +--- |
| 282 | + |
| 283 | +### 备注 |
| 284 | + |
| 285 | +1. **优先级说明**: |
| 286 | + - P0: 核心功能,必须支持 |
| 287 | + - P1: 常用功能,高优先级 |
| 288 | + - P2: 进阶功能,中优先级 |
| 289 | + - P3: 边缘功能,低优先级 |
| 290 | + |
| 291 | +2. **部分支持说明**: |
| 292 | + - `contiguous()`: 目前仅支持 `MemoryFormat::Contiguous`,不支持 ChannelsLast 等格式 |
| 293 | + - `to()`: 目前仅支持 dtype 转换,不支持 device 和 memory_format 选项 |
| 294 | + |
| 295 | +3. **符号化 API** (`sym_*`): 用于动态形状场景,目前均未支持 |
| 296 | + |
| 297 | +4. **自动求导 API**: 需要与 Paddle 的自动求导机制对接,待后续实现 |
0 commit comments