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