CANN/asc-devkit:PhiloxRandom随机数生成API
PhiloxRandom【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品xAtlas A2 训练系列产品 / Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品x功能说明基于Philox随机数生成算法给定随机数种子生成若干的随机数。Philox随机数生成的核心算法是一个基于记数的伪随机数生成算法输入为一个128bit的记数器C两个32bit的keyk0和k1输出为4个32bit的整数。函数原型连续模式template uint16_t Rounds 7, typename T __aicore__ inline void PhiloxRandom(const LocalTensorT dstLocal, const PhiloxKey philoxKey, const PhiloxCounter philoxCounter, uint16_t count)stride模式template uint16_t Rounds 7, typename T __aicore__ inline void PhiloxRandom(const LocalTensorT dstLocal, const PhiloxKey philoxKey, const PhiloxCounter philoxCounter, const PhiloxRandomParams params)参数说明表 1模板参数说明参数名描述RoundsPhilox算法内部实现迭代次数支持取值7或10。T目的操作数数据类型支持的数据类型为uint32_t、int32_t、float。其中uint32_t/int32_t为数据类型范围内的均匀分布float为0-1范围内的均匀分布。表 2参数说明参数名输入/输出描述dstLocal输出目的操作数。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。philoxKey输入随机数种子。两个32bit的key定义如下using PhiloxKey uint32_t[2];philoxCounter输入随机数种子。一个128bit的记数器C由4个32bit组成定义如下using PhiloxCounter uint32_t[4];count输入生成目的操作数的元素个数。params输入stride模式计算所需的参数信息。PhiloxRandomParams类型定义如下struct PhiloxRandomParams { uint32_t stride; // 两行元素之间的间隔 uint32_t row; // 表示生成的行数 uint32_t column; // 表示生成的每一行的元素个数 }row * column大于0不大于LocalTensor的大小。column % 4 0stride % 4 0stride column。图 1PhiloxRandom示意图上图是一个生成随机数的示意图。连续模式下使用philoxCounter{0, 0, 0, 0}count32来生成32个随机数。stride模式下可按列分两次生成调用两次接口。第一次调用参数为philoxCounter{0, 0, 0, 0}stride8row4column4第二次调用参数为philoxCounter{1, 0, 0, 0}每次记数器C自增会生成128bit的随机数stride8row4column4。返回值说明无约束说明无调用示例完整算子样例请参考philoxrandom样例。// dstLocal存放计算结果的Tensor // philoxKey{0,0}, philoxCounter{0,0,0,0} // stride模式生成32*32个元素 PhiloxRandom10(dstLocal, philoxKey, philoxCounter, params); // 连续模式生成1024个元素 PhiloxRandom10(dstLocal, philoxKey, philoxCounter, 1024);结果示例如下[0.31179297 0.8263413 0.6849456 ... 0.10521233 0.29894042 0.96700084]【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考