SIGN IN SIGN UP
taichi-dev / taichi UNCLAIMED

Productive, portable, and performant GPU programming in Python.

import taichi as ti
from tests import test_utils
@test_utils.test(require=ti.extension.quant, debug=True)
def test_1D_quant_array():
qu1 = ti.types.quant.int(1, False)
x = ti.field(dtype=qu1)
N = 32
ti.root.quant_array(ti.i, N, max_num_bits=32).place(x)
@ti.kernel
def set_val():
for i in range(N):
x[i] = i % 2
@ti.kernel
def verify_val():
for i in range(N):
assert x[i] == i % 2
set_val()
verify_val()
@test_utils.test(require=ti.extension.quant, debug=True)
def test_1D_quant_array_negative():
N = 4
qi7 = ti.types.quant.int(7)
x = ti.field(dtype=qi7)
ti.root.quant_array(ti.i, N, max_num_bits=32).place(x)
@ti.kernel
def assign():
for i in range(N):
assert x[i] == 0
x[i] = -i
assert x[i] == -i
assign()
@test_utils.test(require=ti.extension.quant, debug=True)
def test_1D_quant_array_fixed():
qfxt = ti.types.quant.fixed(bits=8, max_value=2)
x = ti.field(dtype=qfxt)
N = 4
ti.root.quant_array(ti.i, N, max_num_bits=32).place(x)
@ti.kernel
def set_val():
for i in range(N):
x[i] = i * 0.5
@ti.kernel
def verify_val():
for i in range(N):
assert x[i] == i * 0.5
set_val()
verify_val()
@test_utils.test(require=ti.extension.quant, debug=True)
def test_2D_quant_array():
qu1 = ti.types.quant.int(1, False)
x = ti.field(dtype=qu1)
M, N = 4, 8
ti.root.quant_array(ti.ij, (M, N), max_num_bits=32).place(x)
@ti.kernel
def set_val():
for i in range(M):
for j in range(N):
x[i, j] = (i * N + j) % 2
@ti.kernel
def verify_val():
for i in range(M):
for j in range(N):
assert x[i, j] == (i * N + j) % 2
set_val()
verify_val()
@test_utils.test(require=ti.extension.quant, debug=True)
def test_quant_array_struct_for():
block_size = 16
N = 64
cell = ti.root.pointer(ti.i, N // block_size)
qi7 = ti.types.quant.int(7)
x = ti.field(dtype=qi7)
cell.dense(ti.i, block_size // 4).quant_array(ti.i, 4, max_num_bits=32).place(x)
@ti.kernel
def activate():
for i in range(N):
if i // block_size % 2 == 0:
x[i] = i
@ti.kernel
def assign():
for i in x:
x[i] -= 1
@ti.kernel
def verify():
for i in range(N):
if i // block_size % 2 == 0:
assert x[i] == i - 1
else:
assert x[i] == 0
activate()
assign()
verify()