修正了 TPC 的一些错误,包括 Test 维护后 TPV 无法重新编译或重编译后越界的部分问题

This commit is contained in:
2026-07-20 11:12:30 +08:00
parent ab73420b4f
commit a277ded8d4
476 changed files with 4000 additions and 3439 deletions

View File

@@ -25,19 +25,19 @@ CLOCK_PER_SEC: t.CDefine = 1000
def test_avx2_add_sub_mul_div():
testcheck.section("AVX2 add/sub/mul/div 4d")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(2.0)
a.data[2] = t.CDouble(3.0)
a.data[3] = t.CDouble(4.0)
b: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
b.data[0] = t.CDouble(5.0)
b.data[1] = t.CDouble(6.0)
b.data[2] = t.CDouble(7.0)
b.data[3] = t.CDouble(8.0)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
# add
vipersimd.simd_add4d(a.data, b.data, out.data)
@@ -70,13 +70,13 @@ def test_avx2_add_sub_mul_div():
def test_avx2_neg_abs_sqrt():
testcheck.section("AVX2 neg/abs/sqrt 4d")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(-4.0)
a.data[2] = t.CDouble(9.0)
a.data[3] = t.CDouble(-16.0)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
# neg
vipersimd.simd_neg4d(a.data, out.data)
@@ -105,19 +105,19 @@ def test_avx2_neg_abs_sqrt():
def test_avx2_min_max():
testcheck.section("AVX2 min/max 4d")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(8.0)
a.data[2] = t.CDouble(3.0)
a.data[3] = t.CDouble(6.0)
b: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
b.data[0] = t.CDouble(5.0)
b.data[1] = t.CDouble(2.0)
b.data[2] = t.CDouble(7.0)
b.data[3] = t.CDouble(4.0)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
vipersimd.simd_min4d(a.data, b.data, out.data)
testcheck.check(out.data[0] == t.CDouble(1.0), "min[0]==1", "min[0]==1")
@@ -138,16 +138,16 @@ def test_avx2_min_max():
def test_avx2_scalar_ops():
testcheck.section("AVX2 scalar broadcast ops")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(2.0)
a.data[2] = t.CDouble(3.0)
a.data[3] = t.CDouble(4.0)
s: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1)
s: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 1)
s.data[0] = t.CDouble(10.0)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
vipersimd.simd_mul_scalar4d(a.data, s.data, out.data)
testcheck.check(out.data[0] == t.CDouble(10.0), "mul_scalar[0]==10", "mul_scalar[0]==10")
@@ -165,19 +165,19 @@ def test_avx2_scalar_ops():
def test_avx2_hsum_dot():
testcheck.section("AVX2 hsum/dot 4d")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(2.0)
a.data[2] = t.CDouble(3.0)
a.data[3] = t.CDouble(4.0)
b: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
b.data[0] = t.CDouble(5.0)
b.data[1] = t.CDouble(6.0)
b.data[2] = t.CDouble(7.0)
b.data[3] = t.CDouble(8.0)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 1)
vipersimd.simd_hsum4d(a.data, out.data)
testcheck.check(out.data[0] == t.CDouble(10.0), "hsum==10", "hsum==10")
@@ -192,21 +192,21 @@ def test_avx2_hsum_dot():
def test_avx2_fma():
testcheck.section("AVX2 FMA 4d")
a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
a.data[0] = t.CDouble(1.0)
a.data[1] = t.CDouble(2.0)
a.data[2] = t.CDouble(3.0)
a.data[3] = t.CDouble(4.0)
b: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
b.data[0] = t.CDouble(5.0)
b.data[1] = t.CDouble(6.0)
b.data[2] = t.CDouble(7.0)
b.data[3] = t.CDouble(8.0)
c_val: numpy.ndarray | t.CPtr = numpy.ones(pool, 4)
c_val: numpy.ndarray[t.CDouble] | t.CPtr = numpy.ones(pool, 4)
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
vipersimd.simd_fma4d(a.data, b.data, c_val.data, out.data)
testcheck.check(out.data[0] == t.CDouble(6.0), "fma[0]==6", "fma[0]==6")
@@ -227,9 +227,9 @@ def test_avx2_fma():
def test_batch_array_ops():
testcheck.section("Batch array operations")
n: t.CSizeT = 16
a: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(1.0), t.CDouble(17.0), t.CDouble(1.0))
b: numpy.ndarray | t.CPtr = numpy.full(pool, 16, t.CDouble(2.0))
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, 16)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(1.0), t.CDouble(17.0), t.CDouble(1.0))
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.full(pool, 16, t.CDouble(2.0))
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 16)
# add array
vipersimd.simd_add_array(a.data, b.data, out.data, n)
@@ -242,18 +242,18 @@ def test_batch_array_ops():
testcheck.check(out.data[3] == t.CDouble(8.0), "mul_arr[3]==8", "mul_arr[3]==8")
# sqrt array
c: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
c: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
c.data[0] = t.CDouble(4.0)
c.data[1] = t.CDouble(9.0)
c.data[2] = t.CDouble(16.0)
c.data[3] = t.CDouble(25.0)
out4: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
out4: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
vipersimd.simd_sqrt_array(c.data, out4.data, t.CSizeT(4))
testcheck.check(out4.data[0] == t.CDouble(2.0), "sqrt_arr[0]==2", "sqrt_arr[0]==2")
testcheck.check(out4.data[3] == t.CDouble(5.0), "sqrt_arr[3]==5", "sqrt_arr[3]==5")
# abs array
d: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
d: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
d.data[0] = t.CDouble(-1.0)
d.data[1] = t.CDouble(-2.0)
d.data[2] = t.CDouble(3.0)
@@ -264,13 +264,13 @@ def test_batch_array_ops():
testcheck.check(out4.data[3] == t.CDouble(4.0), "abs_arr[3]==4", "abs_arr[3]==4")
# dot array
e: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4)
e: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4)
e.data[0] = t.CDouble(1.0)
e.data[1] = t.CDouble(2.0)
e.data[2] = t.CDouble(3.0)
e.data[3] = t.CDouble(4.0)
f: numpy.ndarray | t.CPtr = numpy.ones(pool, 4)
out1: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1)
f: numpy.ndarray[t.CDouble] | t.CPtr = numpy.ones(pool, 4)
out1: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 1)
vipersimd.simd_dot_array(e.data, f.data, t.CSizeT(4), out1.data)
testcheck.check(out1.data[0] == t.CDouble(10.0), "dot_arr==10", "dot_arr==10")
@@ -393,9 +393,9 @@ def scalar_sqrt_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT):
def benchmark_simd_vs_scalar():
testcheck.section("Benchmark: SIMD vs Scalar")
a: numpy.ndarray | t.CPtr = numpy.full(pool, N_ELEM, t.CDouble(1.5))
b: numpy.ndarray | t.CPtr = numpy.full(pool, N_ELEM, t.CDouble(2.5))
out: numpy.ndarray | t.CPtr = numpy.zeros(pool, N_ELEM)
a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.full(pool, N_ELEM, t.CDouble(1.5))
b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.full(pool, N_ELEM, t.CDouble(2.5))
out: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, N_ELEM)
# --- SIMD add benchmark ---
t0: t.CLong = clock()