|
| 1 | +##### Allocator.h 头文件 API 兼容情况 |
| 2 | + |
| 3 | + |
| 4 | +##### Allocator.h 头文件 API 兼容性 |
| 5 | + |
| 6 | +✅ 表示已经支持 |
| 7 | +🚧 表示正在支持 |
| 8 | +❌ 表示不准备支持 |
| 9 | +🔧 表示部分支持(有功能限制) |
| 10 | + |
| 11 | +**按照功能分类排序** |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +### 类型定义 |
| 16 | + |
| 17 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 18 | +|------------------------------|------------------|------------|-------|------| |
| 19 | +| `DeleterFnPtr` | ✅ | ✅ | P0 | 删除器函数指针类型 | |
| 20 | + |
| 21 | +--- |
| 22 | + |
| 23 | +### DataPtr 类 |
| 24 | + |
| 25 | +#### 构造与赋值 |
| 26 | + |
| 27 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 28 | +|------------------------------|------------------|------------|-------|------| |
| 29 | +| `DataPtr()` | ✅ | ✅ | P0 | 默认构造函数 | |
| 30 | +| `DataPtr(void*, Device)` | ✅ | ✅ | P0 | 数据指针+设备构造 | |
| 31 | +| `DataPtr(void*, void*, DeleterFnPtr, Device)` | ✅ | ✅ | P0 | 完整构造函数 | |
| 32 | +| `DataPtr(const DataPtr&)` | ✅ | ✅ | P0 | 拷贝构造函数 | |
| 33 | +| `DataPtr(DataPtr&&)` | ✅ | ✅ | P0 | 移动构造函数 | |
| 34 | +| `operator=(const DataPtr&)` | ✅ | ✅ | P0 | 拷贝赋值运算符 | |
| 35 | +| `operator=(DataPtr&&)` | ✅ | ✅ | P0 | 移动赋值运算符 | |
| 36 | + |
| 37 | +#### 数据访问 API |
| 38 | + |
| 39 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 40 | +|------------------------------|------------------|------------|-------|------| |
| 41 | +| `get()` | ✅ | ✅ | P0 | 获取原始指针 | |
| 42 | +| `operator->()` | ✅ | ✅ | P0 | 指针访问运算符 | |
| 43 | +| `operator bool()` | ✅ | ✅ | P0 | 布尔转换 | |
| 44 | +| `device()` | ✅ | ✅ | P0 | 获取设备 | |
| 45 | +| `get_deleter()` | ✅ | ✅ | P1 | 获取删除器 | |
| 46 | +| `get_context()` | ✅ | ✅ | P1 | 获取上下文 | |
| 47 | +| `clear()` | ✅ | ✅ | P1 | 清空数据 | |
| 48 | +| `mutable_get()` | - [ ] | - [ ] | P2 | 获取可变指针 | |
| 49 | +| `release_context()` | - [ ] | - [ ] | P2 | 释放上下文 | |
| 50 | +| `move_context()` | - [ ] | - [ ] | P2 | 移动上下文 | |
| 51 | +| `compare_exchange_deleter()` | - [ ] | - [ ] | P3 | 比较交换删除器 | |
| 52 | +| `unsafe_set_device()` | - [ ] | - [ ] | P3 | 不安全设置设备 | |
| 53 | + |
| 54 | +#### 比较运算符 |
| 55 | + |
| 56 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 57 | +|------------------------------|------------------|------------|-------|------| |
| 58 | +| `operator==(DataPtr, nullptr_t)` | ✅ | ✅ | P0 | | |
| 59 | +| `operator==(nullptr_t, DataPtr)` | ✅ | ✅ | P0 | | |
| 60 | +| `operator!=(DataPtr, nullptr_t)` | ✅ | ✅ | P0 | | |
| 61 | +| `operator!=(nullptr_t, DataPtr)` | ✅ | ✅ | P0 | | |
| 62 | + |
| 63 | +--- |
| 64 | + |
| 65 | +### Allocator 基类 |
| 66 | + |
| 67 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 68 | +|------------------------------|------------------|------------|-------|------| |
| 69 | +| `allocate(size_t)` | - [ ] | - [ ] | P2 | 分配内存 | |
| 70 | +| `clone(void*, size_t)` | - [ ] | - [ ] | P3 | 克隆分配 | |
| 71 | +| `is_simple_data_ptr()` | - [ ] | - [ ] | P3 | | |
| 72 | +| `raw_deleter()` | - [ ] | - [ ] | P2 | 获取原始删除器 | |
| 73 | +| `raw_allocate(size_t)` | - [ ] | - [ ] | P2 | 原始分配 | |
| 74 | +| `raw_deallocate(void*)` | - [ ] | - [ ] | P2 | 原始释放 | |
| 75 | +| `copy_data()` | - [ ] | - [ ] | P3 | 复制数据 | |
| 76 | + |
| 77 | +--- |
| 78 | + |
| 79 | +### 全局函数 |
| 80 | + |
| 81 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 82 | +|------------------------------|------------------|------------|-------|------| |
| 83 | +| `SetAllocator()` | - [ ] | - [ ] | P3 | 设置分配器 | |
| 84 | +| `GetAllocator()` | - [ ] | - [ ] | P3 | 获取分配器 | |
| 85 | + |
| 86 | +--- |
| 87 | + |
| 88 | +### InefficientStdFunctionContext |
| 89 | + |
| 90 | +| torch API | paddle API 兼容性 | 测试用例状态 | 优先级 | 备注 | |
| 91 | +|------------------------------|------------------|------------|-------|------| |
| 92 | +| `makeDataPtr()` | - [ ] | - [ ] | P3 | 创建带自定义删除器的 DataPtr | |
| 93 | + |
| 94 | +--- |
| 95 | + |
| 96 | +### Paddle 兼容层特有 API |
| 97 | + |
| 98 | +| API | 说明 | |
| 99 | +|------------------------------|------| |
| 100 | +| `DataPtr(shared_ptr<phi::Allocation>)` | 从 Paddle Allocation 构造 | |
| 101 | +| `allocation()` | 获取底层 phi::Allocation | |
| 102 | + |
| 103 | +--- |
| 104 | + |
| 105 | +### 兼容性统计 |
| 106 | + |
| 107 | +| 状态 | 数量 | |
| 108 | +|------|------| |
| 109 | +| ✅ 已完全支持 | 18 | |
| 110 | +| 🚧 正在支持 | 0 | |
| 111 | +| 🔧 部分支持 | 0 | |
| 112 | +| - [ ] 未实现 | 12 | |
| 113 | + |
| 114 | +--- |
| 115 | + |
| 116 | +### 备注 |
| 117 | + |
| 118 | +1. **优先级说明**: |
| 119 | + - P0: 核心功能,必须支持 |
| 120 | + - P1: 常用功能,高优先级 |
| 121 | + - P2: 进阶功能,中优先级 |
| 122 | + - P3: 边缘功能,低优先级 |
| 123 | + |
| 124 | +2. **实现说明**: |
| 125 | + - Paddle 兼容层的 `DataPtr` 基于 `phi::Allocation` 实现 |
| 126 | + - 设备类型使用 `phi::Place` 而非 `c10::Device` |
| 127 | + - `Allocator` 基类暂未实现,使用 Paddle 原生的 `phi::Allocator` |
| 128 | + |
| 129 | +3. **命名空间**: |
| 130 | + - `c10::DataPtr` - 主命名空间 |
| 131 | + - `at::DataPtr` - 别名 |
0 commit comments