CANN/ops-rand API 实现状态
ops-rand API 实现状态
【免费下载链接】ops-randops-rand是CANN (Compute Architecture for Neural Networks)算子库中提供的随机数生成库。项目地址: https://gitcode.com/cann/ops-rand
版本信息
- 当前版本: v1.0.0
- 更新日期: 2026-03-21
- 开发阶段: Phase 1 - Generator & Uniform
✅ 已实现接口 (Phase 1)
1. 版本管理
aclrandGetVersion- 获取库版本号
2. 生成器管理
aclrandCreateGenerator- 创建随机数生成器aclrandDestroyGenerator- 销毁生成器
3. 生成器配置
aclrandSetGeneratorSeed- 设置生成器种子aclrandSetGeneratorOffset- 设置生成器偏移量aclrandSetGeneratorStream- 设置 ACL 流
4. 随机数生成
aclrandGenerateUniform- 生成均匀分布随机数 (FP32)
5. 辅助工具
aclrandGetErrorString- 获取错误字符串(待验证)
6. 已实现算子
- stateless_random_uniform_v2(无状态均匀分布) -
src/stateless_random_uniform_v2/
7. 支持范围
- 生成器类型:
ACLRAND_RNG_PSEUDO_DEFAULT,ACLRAND_RNG_PSEUDO_PHILOX4_32_10 - 数据类型: FP32 (
float) - 芯片: Ascend 950
⏸️ 待实现接口
Phase 2 - 分布扩展
必须实现:
aclrandGenerateUniformDouble- 双精度均匀分布aclrandGenerateUniformHalf- 半精度均匀分布 (FP16)aclrandGenerateNormal- 单精度正态分布aclrandGenerate- 32 位原始随机数
重要功能:
aclrandGenerateNormalDouble- 双精度正态分布aclrandGenerateNormalHalf- 半精度正态分布aclrandGenerateLogNormal- 对数正态分布aclrandGenerateLogNormalDouble- 双精度对数正态aclrandGenerateLogNormalHalf- 半精度对数正态aclrandGenerateLongLong- 64 位原始随机数
Phase 3 - 引擎扩展
必须实现:
aclrandGeneratePoisson- 泊松分布aclrandCreateDiscreteDistribution- 创建离散分布aclrandDestroyDistribution- 销毁离散分布aclrandGenerateDiscrete- 离散分布采样
重要功能:
aclrandSetQuasiRandomDimensions- 设置准随机维度aclrandGetDirectionVectors32- 获取 Sobol 方向向量 (32位)aclrandGetDirectionVectors64- 获取 Sobol 方向向量 (64位)
新增生成器类型:
ACLRAND_RNG_PSEUDO_XORWOWACLRAND_RNG_PSEUDO_MRG32K3AACLRAND_RNG_PSEUDO_MTGP32ACLRAND_RNG_PSEUDO_LFSR113ACLRAND_RNG_PSEUDO_THREEFRY2_32_20ACLRAND_RNG_QUASI_SOBOL32ACLRAND_RNG_QUASI_SOBOL64
Phase 4 - 高级特性
可选功能:
aclrandCreateGeneratorHost- Host 端生成器ops_rand_state_philox4x32_10- Device API 状态结构ops_rand_init- Device API 初始化ops_rand_uniform- Device API 均匀分布ops_rand_uniform4- Device API 批量生成ops_rand_normal- Device API 正态分布aclrandSetOrdering- 设置排序方式
⏸️ 待支持数据类型
必须实现
- FP16 (
aclFloat16) - FP64 (
double)
重要功能
- BF16 (
bfloat16)
可选功能
- INT32, UINT32
- INT64, UINT64
📊 实现进度统计
| 类别 | 已实现 | 待实现 | 总计 |
|---|---|---|---|
| API 接口 | 7 | 22 | 29 |
| 生成器类型 | 2 | 9 | 11 |
| 分布类型 | 1 | 7 | 8 |
| 数据类型 | 1 | 4 | 5 |
| 算子 | 1 | - | - |
总体完成度: Phase 1 (Generator & Uniform) ✅
📝 开发路线图
Phase 1: Generator & Uniform ✅ (已完成)
- 基础架构搭建
- 生成器管理接口
- Philox 生成器实现
- Uniform 分布生成 (FP32)
- stateless_random_uniform_v2 算子
- 打包流程
Phase 2: 分布扩展 (下一步)
- 多数据类型支持 (FP16/FP64)
- 正态分布
- 对数正态分布
- 原始随机数生成 (32/64位)
- Box-Muller 变换算法
Phase 3: 引擎扩展
- 泊松分布
- 离散分布
- XORWOW 生成器
- Sobol 准随机生成器
- MRG32K3A 生成器
Phase 4: 高级特性
- Host 端生成器
- Device API (AscendC 内部调用)
- 性能优化
- 多流并行支持
📌 当前限制
- 数据类型: 仅支持 FP32
- 分布类型: 仅支持 Uniform (均匀分布)
- 生成器: 仅支持 Philox4x32_10
- 算子: 仅实现 stateless_random_uniform_v2
- 不支持: 正态分布、泊松分布、离散分布、准随机序列
🔧 设计参考
- API 设计: 参考 rocrand/cuRAND
- 生成器算法: Philox4x32_10 (计数器模式)
- 测试框架: 自研轻量级测试框架
文档维护: 请在实现新接口时及时更新本文档
【免费下载链接】ops-randops-rand是CANN (Compute Architecture for Neural Networks)算子库中提供的随机数生成库。项目地址: https://gitcode.com/cann/ops-rand
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
