mirror of
https://github.com/tile-ai/tilelang.git
synced 2026-10-21 06:40:23 +08:00
* [CI][Test] Add test cases for element_add * [Doc] fix typo * Parallelization * format * remove useless condition * format
113 lines
2.0 KiB
Python
113 lines
2.0 KiB
Python
from tilelang import tvm as tvm
|
|
import tilelang.testing
|
|
import tilelang as tl
|
|
import torch
|
|
|
|
|
|
def elementwise_add(
|
|
M,
|
|
N,
|
|
block_M,
|
|
block_N,
|
|
in_dtype,
|
|
out_dtype,
|
|
threads,
|
|
):
|
|
import tilelang.language as T
|
|
|
|
@T.prim_func
|
|
def main(
|
|
A: T.Buffer((M, N), in_dtype),
|
|
B: T.Buffer((M, N), in_dtype),
|
|
C: T.Buffer((M, N), out_dtype),
|
|
):
|
|
with T.Kernel(T.ceildiv(N, block_N), T.ceildiv(M, block_M), threads=threads) as (bx, by):
|
|
start_x = bx * block_N
|
|
start_y = by * block_M
|
|
|
|
for (local_y, local_x) in T.Parallel(block_M, block_N):
|
|
y = start_y + local_y
|
|
x = start_x + local_x
|
|
|
|
C[y, x] = A[y, x] + B[y, x]
|
|
|
|
return main
|
|
|
|
|
|
def run_elementwise_add(
|
|
M,
|
|
N,
|
|
in_dtype,
|
|
out_dtype,
|
|
block_M,
|
|
block_N,
|
|
num_threads=128,
|
|
):
|
|
program = elementwise_add(
|
|
M,
|
|
N,
|
|
block_M,
|
|
block_N,
|
|
in_dtype,
|
|
out_dtype,
|
|
num_threads,
|
|
)
|
|
|
|
mod, params = tl.lower(program)
|
|
mod = tl.Profiler(mod, params, [2], tl.TensorSupplyType.Integer)
|
|
|
|
def ref_program(A, B):
|
|
C = torch.add(A, B)
|
|
C = C.to(torch.__getattribute__(out_dtype))
|
|
return C
|
|
|
|
mod.assert_allclose(ref_program, atol=1e-2, rtol=1e-2)
|
|
|
|
|
|
def test_elementwise_add_f32():
|
|
run_elementwise_add(
|
|
512,
|
|
1024,
|
|
"float32",
|
|
"float32",
|
|
128,
|
|
256,
|
|
)
|
|
|
|
|
|
def test_elementwise_add_f16():
|
|
run_elementwise_add(
|
|
512,
|
|
1024,
|
|
"float16",
|
|
"float16",
|
|
128,
|
|
256,
|
|
)
|
|
|
|
|
|
def test_elementwise_add_i32():
|
|
run_elementwise_add(
|
|
512,
|
|
1024,
|
|
"int32",
|
|
"int32",
|
|
128,
|
|
256,
|
|
)
|
|
|
|
|
|
def test_elementwise_add_f32f16():
|
|
run_elementwise_add(
|
|
512,
|
|
1024,
|
|
"float32",
|
|
"float16",
|
|
128,
|
|
256,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
tilelang.testing.main()
|