## 编译器加入的随机数前导:读入 runtime 的值之后的 14 个 bundle 160: { s1: sld s6, [smem:0x3ffe0] } 161: { s0: seq.s32 p0, s6, 0 } 162: { s0: @p0 sbr.rel L_01c9 ; s1: @!p0 sld s7, [smem:0x0] ; va0: @!p0 vand.8x128.u32 v8, 0x7f, v0 ; va1: @!p0 veq.8x128.s32 vm2, v1, 1 } 163: { s0: @!p0 sxor.u32 s11, 0xae5a53a9, s6 ; s1: @!p0 sld s8, [smem:0x1] ; va0: @!p0 veq.8x128.s32 vm3, v1, 0 ; va1: @!p0 vshrl.8x128.s32 v9, v8, 0x1 } 164: { s0: smul.u32 s12, -2071460803, s11 } 165: { s0: sshrl.u32 s13, s12, 0x10 } 166: { s0: sshll.u32 s9, s7, 0x1 ; s1: sxor.u32 s14, s13, s12 } 167: { s0: smul.u32 s15, -905840163, s14 ; s1: sadd.s32 s10, s9, s8 } 168: { va0: vmov.8x128 v10, s10 } 169: { va1: vshll.8x128.s32 v11, v10, 0x6 } 170: { va0: vor.8x128.u32 v12, v11, v9 } 171: { va0: vxor.8x128.u32 v13, 0x43b0d7e5, v12 } 172: { va1: vshll.8x128.s32 v14, v13, 0x1e } 173: { va0: vsub.8x128.s32 v15, 0, v14 ; va1: vshll.8x128.s32 v16, v13, 0x1c } bundle 455:va0: setrngseed v13;bundle 456:va0: vrng.8x128.u32 v17 ## 去掉前导后,依次调用不同的 executable 第 1 次:装入并生成,与模型一致 True 第 2 次:读状态,与模型一致 True 第 3 次:生成,与模型一致 True 第 4 次:读状态,与模型一致 True 第 5 次:生成,与模型一致 True 第 6 次:读状态,与模型一致 True 第 7 次:装入第 4 次读出的状态并生成,与第 5 次的结果相同 True ## 保留编译器前导:前导用 runtime 写在 [smem:0x3ffe0] 的值计算状态 连续 4 次调用中 [smem:0x3ffe0] 的值:0x0f4defd2、0x18ec9681、0x98c500df、0xdbacfa47 连续两次调用读出的状态相同:False 同一次调用中两个 TensorCore 读出的状态相同:False ## 一颗芯片的两个 TensorCore 装入相同状态:两个 TensorCore 的输出相同 True TensorCore 0 装入“输入 ^ 0”:与模型一致 True TensorCore 1 装入“输入 ^ 1”:与模型一致 True