PhiloxRandom
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
x |
|
x |
|
x |
|
x |
|
x |
|
x |
功能说明
基于Philox随机数生成算法,给定随机数种子,生成若干的随机数。
Philox随机数生成的核心算法是一个基于记数的伪随机数生成算法,输入为一个128bit的记数器C,两个32bit的key(k0和k1),输出为4个32bit的整数。
函数原型
- 连续模式
1 2
template <uint16_t Rounds = 7, typename T> __aicore__ inline void PhiloxRandom(const LocalTensor<T>& dstLocal, const PhiloxKey& philoxKey, const PhiloxCounter& philoxCounter, uint16_t count)
- stride模式
1 2
template <uint16_t Rounds = 7, typename T> __aicore__ inline void PhiloxRandom(const LocalTensor<T>& dstLocal, const PhiloxKey& philoxKey, const PhiloxCounter& philoxCounter, const PhiloxRandomParams& params)
参数说明
参数名 |
描述 |
|---|---|
Rounds |
Philox算法内部实现迭代次数,支持取值7或10。 |
T |
目的操作数数据类型,支持的数据类型为:uint32_t、int32_t、float。 其中uint32_t/int32_t为数据类型范围内的均匀分布,float为0-1范围内的均匀分布。 |
参数名 |
输入/输出 |
描述 |
||
|---|---|---|---|---|
dstLocal |
输出 |
目的操作数。 类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的起始地址需要32字节对齐。 |
||
philoxKey |
输入 |
随机数种子。两个32bit的key,定义如下:
|
||
philoxCounter |
输入 |
随机数种子。一个128bit的记数器C(由4个32bit组成),定义如下:
|
||
count |
输入 |
生成目的操作数的元素个数。 |
||
params |
输入 |
stride模式计算所需的参数信息。PhiloxRandomParams类型,定义如下:
|
图1 PhiloxRandom示意图


上图是一个生成随机数的示意图。
- 连续模式下使用philoxCounter={0, 0, 0, 0},count=32来生成32个随机数。
- stride模式下可按列分两次生成,调用两次接口。第一次调用参数为philoxCounter={0, 0, 0, 0},stride=8,row=4,column=4;第二次调用参数为philoxCounter={1, 0, 0, 0}(每次记数器C自增会生成128bit的随机数),stride=8,row=4,column=4。
返回值说明
无
约束说明
无
调用示例
1 2 3 4 5 6 7 | // dstLocal:存放计算结果的Tensor // philoxKey={0,0}, philoxCounter={0,0,0,0} // stride模式,生成32*32个元素 PhiloxRandom<10>(dstLocal, philoxKey, philoxCounter, params); // 连续模式,生成1024个元素 PhiloxRandom<10>(dstLocal, philoxKey, philoxCounter, 1024); |
结果示例如下:
[0.31179297 0.8263413 0.6849456 ... 0.10521233 0.29894042 0.96700084]
父主题: 随机函数