MCPcopy Create free account
hub / github.com/apache/tvm / test_unary

Function test_unary

tests/python/codegen/test_target_codegen_vulkan.py:511–565  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

509@pytest.mark.gpu
510@pytest.mark.skipif(not env.has_vulkan(), reason="need vulkan")
511def test_unary():
512 test_funcs = [
513 (tvm.tirx.sin, lambda x: np.sin(x)),
514 (tvm.tirx.cos, lambda x: np.cos(x)),
515 (tvm.tirx.tan, lambda x: np.tan(x)),
516 (tvm.tirx.sinh, lambda x: np.sinh(x)),
517 (tvm.tirx.cosh, lambda x: np.cosh(x)),
518 (tvm.tirx.tanh, lambda x: np.tanh(x)),
519 (tvm.tirx.asin, lambda x: np.arcsin(x)),
520 (tvm.tirx.acos, lambda x: np.arccos(x)),
521 (tvm.tirx.atan, lambda x: np.arctan(x)),
522 (tvm.tirx.asinh, lambda x: np.arcsinh(x)),
523 (tvm.tirx.acosh, lambda x: np.arccosh(x)),
524 (tvm.tirx.atanh, lambda x: np.arctanh(x)),
525 ]
526
527 def run_test(tvm_intrin, np_func):
528 n = 16
529
530 @I.ir_module(s_tir=True)
531 class Module:
532 @T.prim_func(s_tir=True)
533 def main(var_A: T.handle, var_B: T.handle):
534 m = T.int32(is_size_var=True)
535 A = T.match_buffer(var_A, (m,), "float32")
536 B = T.match_buffer(var_B, (m,), "float32")
537 for i_0 in T.thread_binding((m + 63) // 64, thread="blockIdx.x"):
538 for i_1 in T.thread_binding(64, thread="threadIdx.x"):
539 with T.sblock("B"):
540 v_i = T.axis.spatial(m, i_0 * 64 + i_1)
541 T.where(i_0 * 64 + i_1 < m)
542 T.reads(A[v_i])
543 T.writes(B[v_i])
544 B[v_i] = tvm_intrin(A[v_i])
545
546 target = tvm.target.Target("vulkan")
547 dev = tvm.device(target.kind.name, 0)
548 func = tvm.compile(Module, target=target)
549
550 if tvm_intrin in [tvm.tirx.asin, tvm.tirx.acos]:
551 data = np.random.uniform(-1.0, 1.0, size=n)
552 elif tvm_intrin == tvm.tirx.atanh:
553 data = np.random.uniform(-0.999, 0.999, size=n)
554 elif tvm_intrin == tvm.tirx.acosh:
555 data = np.random.uniform(1.0, 5.0, size=n)
556 else:
557 data = np.random.uniform(0.1, 0.9, size=n)
558
559 a = tvm.runtime.tensor(data.astype("float32"), dev)
560 b = tvm.runtime.tensor(np.zeros(n, dtype="float32"), dev)
561 func(a, b)
562 tvm.testing.assert_allclose(b.numpy(), np_func(a.numpy()), atol=1e-3, rtol=1e-3)
563
564 for func in test_funcs:
565 run_test(*func)
566
567
568@pytest.mark.gpu

Callers

nothing calls this directly

Calls 1

run_testFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…