Files
tilelang/testing/python/language/test_tilelang_language_cooperative.py
T
silentCoder-dev 23c446da6a [Fix] Add register to read A ptr in test_tilelang_language_cooperative.py (#1593)
* add register to read A ptr

* add randomize initial value for tensor

* remove manual boundary checking
2026-01-04 15:45:38 +08:00

41 lines
1.1 KiB
Python

import tilelang
import tilelang.language as T
import torch
import tilelang.testing
@tilelang.jit
def grid_sync(N=1024):
block = 64
@T.prim_func
def kernel(A: T.Tensor((N), T.float32)):
with T.Kernel(T.ceildiv(N, block), threads=128) as bx:
A_local = T.alloc_fragment((block), dtype=T.float32)
n_idx = bx * block
for i in T.Parallel(block):
A[n_idx + i] = n_idx + i
T.sync_grid()
for i in T.Parallel(block):
A_local[i] = A[N - n_idx - i - 1]
T.sync_grid()
A[n_idx + i] = A[n_idx + i] + A_local[i]
return kernel
@tilelang.testing.requires_cuda
@tilelang.testing.requires_cuda_compute_version_ge(6, 0)
def test_grid_sync():
N = 1024
kernel = grid_sync(N)
assert "cooperative_groups::this_grid().sync()" in kernel.get_kernel_source()
tensor = torch.rand((N), dtype=torch.float32, device="cuda")
kernel(tensor)
target = torch.full_like(tensor, tensor[0])
torch.testing.assert_close(tensor, target)
if __name__ == "__main__":
tilelang.testing.main()