From 6205f48994571977d18f8d693fcf4e6461558cd3 Mon Sep 17 00:00:00 2001 From: Nicolas Pinto <pinto@mit.edu> Date: Sun, 3 Jul 2011 19:43:18 -0400 Subject: [PATCH] Cleaning up --- test/test_array.py | 212 +++++++++++++++------------------------------ 1 file changed, 68 insertions(+), 144 deletions(-) diff --git a/test/test_array.py b/test/test_array.py index e9cdf6a9..591b7e7e 100644 --- a/test/test_array.py +++ b/test/test_array.py @@ -5,8 +5,6 @@ import sys import pytools.test - - def have_cl(): try: import pyopencl @@ -22,36 +20,31 @@ if have_cl(): from pyopencl.characterize import has_double_support - - @pytools.test.mark_test.opencl def test_pow_array(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) - result = pow(a_gpu,a_gpu).get() - assert (np.abs(a**a - result) < 1e-3).all() + result = pow(a_gpu, a_gpu).get() + assert (np.abs(a ** a - result) < 1e-3).all() - result = (a_gpu**a_gpu).get() + result = (a_gpu ** a_gpu).get() assert (np.abs(pow(a, a) - result) < 1e-3).all() - - @pytools.test.mark_test.opencl def test_pow_number(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) result = pow(a_gpu, 2).get() - assert (np.abs(a**2 - result) < 1e-3).all() - + assert (np.abs(a ** 2 - result) < 1e-3).all() @pytools.test.mark_test.opencl @@ -69,7 +62,7 @@ def test_abs(ctx_getter): res = a.get() - for i in range (111): + for i in range(111): assert abs(res[i]) >= 0 assert res[i] == i @@ -79,13 +72,11 @@ def test_len(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_cpu = cl_array.to_device(queue, a) assert len(a_cpu) == 10 - - @pytools.test.mark_test.opencl def test_multiply(ctx_getter): """Test the muliplication of an array with a scalar. """ @@ -93,11 +84,9 @@ def test_multiply(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - for sz in [10, 50000]: for dtype, scalars in [ (np.float32, [2]), - #(np.complex64, [2, 2j]) ]: for scalar in scalars: a = np.arange(sz).astype(dtype) @@ -106,6 +95,7 @@ def test_multiply(ctx_getter): assert (a * scalar == a_doubled).all() + @pytools.test.mark_test.opencl def test_multiply_array(ctx_getter): """Test the multiplication of two arrays.""" @@ -113,16 +103,14 @@ def test_multiply_array(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) b_gpu = cl_array.to_device(queue, a) - a_squared = (b_gpu*a_gpu).get() - - assert (a*a == a_squared).all() - + a_squared = (b_gpu * a_gpu).get() + assert (a * a == a_squared).all() @pytools.test.mark_test.opencl @@ -132,13 +120,11 @@ def test_addition_array(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) - a_added = (a_gpu+a_gpu).get() - - assert (a+a == a_added).all() - + a_added = (a_gpu + a_gpu).get() + assert (a + a == a_added).all() @pytools.test.mark_test.opencl @@ -148,21 +134,20 @@ def test_addition_scalar(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) - a_added = (7+a_gpu).get() - - assert (7+a == a_added).all() - + a_added = (7 + a_gpu).get() + assert (7 + a == a_added).all() @pytools.test.mark_test.opencl def test_substract_array(ctx_getter): """Test the substraction of two arrays.""" #test data - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) - b = np.array([10,20,30,40,50,60,70,80,90,100]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) + b = np.array([10, 20, 30, 40, 50, + 60, 70, 80, 90, 100]).astype(np.float32) context = ctx_getter() queue = cl.CommandQueue(context) @@ -170,13 +155,11 @@ def test_substract_array(ctx_getter): a_gpu = cl_array.to_device(queue, a) b_gpu = cl_array.to_device(queue, b) - result = (a_gpu-b_gpu).get() - assert (a-b == result).all() - - result = (b_gpu-a_gpu).get() - assert (b-a == result).all() - + result = (a_gpu - b_gpu).get() + assert (a - b == result).all() + result = (b_gpu - a_gpu).get() + assert (b - a == result).all() @pytools.test.mark_test.opencl @@ -187,18 +170,16 @@ def test_substract_scalar(ctx_getter): queue = cl.CommandQueue(context) #test data - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) #convert a to a gpu object a_gpu = cl_array.to_device(queue, a) - result = (a_gpu-7).get() - assert (a-7 == result).all() - - result = (7-a_gpu).get() - assert (7-a == result).all() - + result = (a_gpu - 7).get() + assert (a - 7 == result).all() + result = (7 - a_gpu).get() + assert (7 - a == result).all() @pytools.test.mark_test.opencl @@ -208,16 +189,14 @@ def test_divide_scalar(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - a = np.array([1,2,3,4,5,6,7,8,9,10]).astype(np.float32) + a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) - result = (a_gpu/2).get() - assert (a/2 == result).all() - - result = (2/a_gpu).get() - assert (np.abs(2/a - result) < 1e-5).all() - + result = (a_gpu / 2).get() + assert (a / 2 == result).all() + result = (2 / a_gpu).get() + assert (np.abs(2 / a - result) < 1e-5).all() @pytools.test.mark_test.opencl @@ -228,19 +207,17 @@ def test_divide_array(ctx_getter): queue = cl.CommandQueue(context) #test data - a = np.array([10,20,30,40,50,60,70,80,90,100]).astype(np.float32) - b = np.array([10,10,10,10,10,10,10,10,10,10]).astype(np.float32) + a = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]).astype(np.float32) + b = np.array([10, 10, 10, 10, 10, 10, 10, 10, 10, 10]).astype(np.float32) a_gpu = cl_array.to_device(queue, a) b_gpu = cl_array.to_device(queue, b) - a_divide = (a_gpu/b_gpu).get() - assert (np.abs(a/b - a_divide) < 1e-3).all() - - a_divide = (b_gpu/a_gpu).get() - assert (np.abs(b/a - a_divide) < 1e-3).all() - + a_divide = (a_gpu / b_gpu).get() + assert (np.abs(a / b - a_divide) < 1e-3).all() + a_divide = (b_gpu / a_gpu).get() + assert (np.abs(b / a - a_divide) < 1e-3).all() @pytools.test.mark_test.opencl @@ -262,8 +239,6 @@ def test_random(ctx_getter): assert (a < 1).all() - - @pytools.test.mark_test.opencl def test_nan_arithmetic(ctx_getter): context = ctx_getter() @@ -272,10 +247,8 @@ def test_nan_arithmetic(ctx_getter): def make_nan_contaminated_vector(size): shape = (size,) a = np.random.randn(*shape).astype(np.float32) - #for i in range(0, shape[0], 3): - #a[i] = float('nan') from random import randrange - for i in range(size//10): + for i in range(size // 10): a[randrange(0, size)] = float('nan') return a @@ -286,14 +259,12 @@ def test_nan_arithmetic(ctx_getter): b = make_nan_contaminated_vector(size) b_gpu = cl_array.to_device(queue, b) - ab = a*b - ab_gpu = (a_gpu*b_gpu).get() + ab = a * b + ab_gpu = (a_gpu * b_gpu).get() assert (np.isnan(ab) == np.isnan(ab_gpu)).all() - - @pytools.test.mark_test.opencl def test_elwise_kernel(ctx_getter): context = ctx_getter() @@ -313,7 +284,7 @@ def test_elwise_kernel(ctx_getter): c_gpu = cl_array.empty_like(a_gpu) lin_comb(5, a_gpu, 6, b_gpu, c_gpu) - assert la.norm((c_gpu - (5*a_gpu+6*b_gpu)).get()) < 1e-5 + assert la.norm((c_gpu - (5 * a_gpu + 6 * b_gpu)).get()) < 1e-5 @pytools.test.mark_test.opencl @@ -347,34 +318,6 @@ def test_elwise_kernel_with_options(ctx_getter): assert la.norm(gv - gt) < 1e-5 -@pytools.test.mark_test.opencl -def test_elwise_kernel_with_options(ctx_getter): - context = ctx_getter() - queue = cl.CommandQueue(context) - - from pyopencl.clrandom import rand as clrand - - a_gpu = clrand(context, queue, (50,), np.float32) - b_gpu = clrand(context, queue, (50,), np.float32) - - from pyopencl.elementwise import ElementwiseKernel - - options = ['-DADD_ONE'] - lin_comb = ElementwiseKernel( - context, - "float a, float *x, float b, float *y, float *z", - "z[i] = a*x[i] + b*y[i]", - "linear_combination", - options=options, - ) - - c_gpu = cl_array.empty_like(a_gpu) - lin_comb(5, a_gpu, 6, b_gpu, c_gpu) - - assert la.norm((c_gpu - (5*a_gpu+6*b_gpu)).get()) < 1e-5 - - - @pytools.test.mark_test.opencl def test_take(ctx_getter): context = ctx_getter() @@ -383,9 +326,7 @@ def test_take(ctx_getter): idx = cl_array.arange(queue, 0, 200000, 2, dtype=np.uint32) a = cl_array.arange(queue, 0, 600000, 3, dtype=np.float32) result = cl_array.take(a, idx) - assert ((3*idx).get() == result.get()).all() - - + assert ((3 * idx).get() == result.get()).all() @pytools.test.mark_test.opencl @@ -398,8 +339,6 @@ def test_arange(ctx_getter): assert (np.arange(n, dtype=np.float32) == a.get()).all() - - @pytools.test.mark_test.opencl def test_reverse(ctx_getter): context = ctx_getter() @@ -414,8 +353,6 @@ def test_reverse(ctx_getter): assert (a[::-1] == a_gpu.get()).all() - - @pytools.test.mark_test.opencl def test_sum(ctx_getter): context = ctx_getter() @@ -429,9 +366,7 @@ def test_sum(ctx_getter): sum_a = np.sum(a) sum_a_gpu = cl_array.sum(a_gpu).get() - assert abs(sum_a_gpu-sum_a)/abs(sum_a) < 1e-4 - - + assert abs(sum_a_gpu - sum_a) / abs(sum_a) < 1e-4 @pytools.test.mark_test.opencl @@ -457,8 +392,6 @@ def test_minmax(ctx_getter): assert op_a_gpu == op_a, (op_a_gpu, op_a, dtype, what) - - @pytools.test.mark_test.opencl def test_subset_minmax(ctx_getter): context = ctx_getter() @@ -499,8 +432,6 @@ def test_subset_minmax(ctx_getter): assert min_a_gpu == min_a - - @pytools.test.mark_test.opencl def test_dot(ctx_getter): context = ctx_getter() @@ -516,9 +447,7 @@ def test_dot(ctx_getter): dot_ab_gpu = cl_array.dot(a_gpu, b_gpu).get() - assert abs(dot_ab_gpu-dot_ab)/abs(dot_ab) < 1e-4 - - + assert abs(dot_ab_gpu - dot_ab) / abs(dot_ab) < 1e-4 if False: @@ -538,7 +467,8 @@ if False: a_gpu_slice = a_gpu[start:end] a_slice = a[start:end] - assert la.norm(a_gpu_slice.get()-a_slice) == 0 + assert la.norm(a_gpu_slice.get() - a_slice) == 0 + @pytools.test.mark_test.opencl def test_if_positive(ctx_getter): @@ -559,8 +489,9 @@ def test_if_positive(ctx_getter): print(max_a_b_gpu) print(np.maximum(a, b)) - assert la.norm(max_a_b_gpu.get()- np.maximum(a, b)) == 0 - assert la.norm(min_a_b_gpu.get()- np.minimum(a, b)) == 0 + assert la.norm(max_a_b_gpu.get() - np.maximum(a, b)) == 0 + assert la.norm(min_a_b_gpu.get() - np.minimum(a, b)) == 0 + @pytools.test.mark_test.opencl def test_take_put(ctx_getter): @@ -570,9 +501,9 @@ def test_take_put(ctx_getter): for n in [5, 17, 333]: one_field_size = 8 buf_gpu = cl_array.zeros(queue, - n*one_field_size, dtype=np.float32) + n * one_field_size, dtype=np.float32) dest_indices = cl_array.to_device(queue, - np.array([ 0, 1, 2, 3, 32, 33, 34, 35], dtype=np.uint32)) + np.array([0, 1, 2, 3, 32, 33, 34, 35], dtype=np.uint32)) read_map = cl_array.to_device(queue, np.array([7, 6, 5, 4, 3, 2, 1, 0], dtype=np.uint32)) @@ -580,9 +511,10 @@ def test_take_put(ctx_getter): arrays=[buf_gpu for i in range(n)], dest_indices=dest_indices, src_indices=read_map, - src_offsets=[i*one_field_size for i in range(n)], + src_offsets=[i * one_field_size for i in range(n)], dest_shape=(96,)) + @pytools.test.mark_test.opencl def test_astype(ctx_getter): context = ctx_getter() @@ -607,9 +539,7 @@ def test_astype(ctx_getter): a2 = a_gpu.astype(np.float32).get() assert a2.dtype == np.float32 - assert la.norm(a - a2)/la.norm(a) < 1e-7 - - + assert la.norm(a - a2) / la.norm(a) < 1e-7 @pytools.test.mark_test.opencl @@ -624,13 +554,12 @@ def test_scan(ctx_getter): knl = cls(context, dtype, "a+b", "0") for n in [ - 10, 2**10-5, 2**10, - 2**20-2**18, - 2**20-2**18+5, - 2**10+5, - 2**20+5, - 2**20, 2**24 - ]: + 10, 2 ** 10 - 5, 2 ** 10, + 2 ** 20 - 2 ** 18, + 2 ** 20 - 2 ** 18 + 5, + 2 ** 10 + 5, + 2 ** 20 + 5, + 2 ** 20, 2 ** 24]: host_data = np.random.randint(0, 10, n).astype(dtype) dev_data = cl_array.to_device(queue, host_data) @@ -645,21 +574,17 @@ def test_scan(ctx_getter): collect() - - @pytools.test.mark_test.opencl def test_stride_preservation(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) - A = np.random.rand(3,3) + A = np.random.rand(3, 3) AT = A.T print(AT.flags.f_contiguous, AT.flags.c_contiguous) AT_GPU = cl_array.to_device(queue, AT) print(AT_GPU.flags.f_contiguous, AT_GPU.flags.c_contiguous) - assert np.allclose(AT_GPU.get(),AT) - - + assert np.allclose(AT_GPU.get(), AT) @pytools.test.mark_test.opencl @@ -675,10 +600,9 @@ def test_vector_fill(ctx_getter): a_gpu = cl_array.zeros(queue, 100, dtype=cl_array.vec.float4) - - if __name__ == "__main__": - # make sure that import failures get reported, instead of skipping the tests. + # make sure that import failures get reported, instead of skipping the + # tests. import pyopencl as cl import sys -- GitLab