## p = 0.25,stateful_bernoulli 每个 TC VREG 的变换指令 6.0 条:vshrl.8x128.s32 1,vor.8x128.u32 1,vadd.8x128.f32 1,vmax.8x128.f32 1,vlt.8x128.f32 1,vsel.8x128 1,vimm.8x128.s32 0.015625 实际概率 0.250000000000(与 p 相差 0.00e+00);65536 个样本中为真的比例 0.2504,标准误差 0.0017 { va0: vrng.8x128.u32 v22 } { va1: vshrl.8x128.s32 v23, v22, 0x9 } { va0: vor.8x128.u32 v24, 0x3f800000, v23 } { va1: vadd.8x128.f32 v25, -1.0, v24 } { va0: vmax.8x128.f32 v26, v25, 0.0 } ## p = 0.25,整数阈值 每个 TC VREG 的变换指令 3.0 条:vshrl.8x128.s32 1,vlt.8x128.s32 1,vsel.8x128 1,vimm.8x128.s32 0.015625 实际概率 0.250000000000(与 p 相差 0.00e+00);65536 个样本中为真的比例 0.2504,标准误差 0.0017 { va0: vrng.8x128.u32 v22 } { va1: vshrl.8x128.s32 v23, v22, 0x8 } { va0: vlt.8x128.s32 vm0, v23, 4194304 } { va0: vsel.8x128 v25, vm0, 0x1, v24 } { vst: vst.8x128 [vmem:0x0], v25 ; .encoding { vst.opcode = s0 } } ## p = 0.3,stateful_bernoulli 每个 TC VREG 的变换指令 6.0 条:vshrl.8x128.s32 1,vor.8x128.u32 1,vadd.8x128.f32 1,vmax.8x128.f32 1,vlt.8x128.f32 1,vsel.8x128 1,vimm.8x128.s32 0.015625 实际概率 0.300000071526(与 p 相差 7.15e-08);65536 个样本中为真的比例 0.3013,标准误差 0.0018 ## p = 0.3,整数阈值 每个 TC VREG 的变换指令 3.0 条:vshrl.8x128.s32 1,vlt.8x128.s32 1,vsel.8x128 1,vimm.8x128.s32 0.015625 实际概率 0.300000011921(与 p 相差 1.19e-08);65536 个样本中为真的比例 0.3013,标准误差 0.0018 ## 掩码直接用于 vsel:jnp.where(keep, x · 4/3, 0) 每个 TC VREG 的变换指令 4.0 条:vshrl.8x128.s32 1,vmul.8x128.f32 1,vlt.8x128.s32 1,vsel.8x128 1 取值:[0.0, 4.0],为 0 的比例 0.2504,均值 2.9985(期望 3) { va0: vrng.8x128.u32 v24 } { va1: vshrl.8x128.s32 v25, v24, 0x8 } { va0: vlt.8x128.s32 vm0, v25, 4194304 ; vld: vld.8x128 v25, [vmem:0x38] } { va0: vsel.8x128 v26, vm0, 0x0, v23 } { va0: vmul.8x128.f32 v26, 1.3333333730697632, v25 ; vst: vst.8x128 [vmem:0x200], v26 } { va0: vrng.8x128.u32 v29 }