修正了 TPC 的一些错误,包括 Test 维护后 TPV 无法重新编译或重编译后越界的部分问题
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user