#2625·tilelang

[BUG][Fuzzer][wrong-code] `T.rng_init()` 默认的 `seq` 是仅包含 x 维,默默地为 y/z 维不同的线程提供一个 RNG 流

作者: Hughshine创建于 2026年7月12日更新于 2026年9月17日

import torch, tilelang, tilelang.language as T tilelang.disable_cache()

def build(explicit_seq): @tilelang.jit def kf(): @T.prim_func def main(Out: T.Tensor((2, 2), "int32")): # int32 buffer; uint32 is not torch-feedable with T.Kernel(1, threads=(2, 2)): tx = T.get_thread_binding(0); ty = T.get_thread_binding(1) if explicit_seq: T.rng_init(seed=1234, seq=tx * 2 + ty) # CONTROL: unique per (tx,ty) else: T.rng_init(seed=1234) # seq=None default (drops threadIdx.y) Out[tx, ty] = T.reinterpret(T.rng_rand(), dtype="int32") return main return kf()

for label, ex in [("default seq=None", False), ("explicit seq (control)", True)]: out = torch.zeros((2, 2), device="cuda", dtype=torch.int32); build(ex)(out) a = out.cpu().numpy() print(f"{label}: distinct={len(set(a.flatten().tolist()))}/4 Out[tx,0]==Out[tx,1]: " …

内容来源: tile-ai/tilelang