From 0d8961dbb6b693fbd08d4e757cfe4ca9956f4919 Mon Sep 17 00:00:00 2001 From: Tim Warburton Date: Sun, 20 Nov 2011 13:23:30 -0600 Subject: [PATCH] Tim's SEM tweaks. --- test/test_sem_tim.py | 548 +++++++++++++++++++++++++++++++++++++++++++ test/test_tim.py | 215 +++++++++++++++++ 2 files changed, 763 insertions(+) create mode 100644 test/test_sem_tim.py create mode 100644 test/test_tim.py diff --git a/test/test_sem_tim.py b/test/test_sem_tim.py new file mode 100644 index 000000000..0a6d40e47 --- /dev/null +++ b/test/test_sem_tim.py @@ -0,0 +1,548 @@ +from __future__ import division + +import numpy as np +import pyopencl as cl +import loopy as lp + +from pyopencl.tools import pytest_generate_tests_for_pyopencl \ + as pytest_generate_tests + + + + +def test_laplacian(ctx_factory): + 1/0 # not adapted to new language + + dtype = np.float32 + ctx = ctx_factory() + order = "C" + + n = 8 + + from pymbolic import var + K_sym = var("K") + + field_shape = (K_sym, n, n, n) + + # load: 1+6 fields + 1/N D entry + # store: 1 fields + # perform: N*2*6 + 3*5 flops + # ratio: (12*N+15)/8 flops per 4 bytes on bus + # ~ 14 FLOPS per 4 bytes at N=8 + # ~ 525 GFLOPS max on a 150GB/s device at N=8 if done perfectly + + # K - run-time symbolic + knl = lp.make_kernel(ctx.devices[0], + "[K] -> {[i,j,k,e,m,o1,o2,o3,gi]: 0<=i,j,k,m,o1,o2,o3<%d and 0<=e {[i,j,k,e,m,o,gi]: 0<=i,j,k,m,o<%d and 0<=e {[i,j,k,e,m,o,gi]: 0<=i,j,k,m,o<%d and 0<=e {[i,j,k,m,e]: 0<=i,j,k,m<%d AND 0<=e {[i,ip,j,jp,k,kp,m,e]: 0<=i,j,k,m<%d AND 0<=o,ip,jp,kp<%d 0<=e {[i,ip,j,jp,k,kp,e]: 0<=i,j,k<%d AND 0<=ip,jp,kp<%d 0<=e u1[i ,jp,kp,e] = sum_float32(ip, I[i,ip]*u [ip,jp,kp,e])", + "[|i,j ,kp] u2[i ,j ,kp,e] = sum_float32(jp, I[j,jp]*u1[i ,jp,kp,e])", + "[|i,j ,k ] u3[i ,j ,k ,e] = sum_float32(kp, I[k,kp]*u2[i ,j ,kp,e])", + "[|i,j ,k ] Pu[i ,j ,k ,e] = P[i,j,k,e]*u3[i,j,k,e]", + "[|i,j ,kp] Pu3[i ,j ,kp,e] = sum_float32(k, V[kp,k]*Pu[i ,j , k,e])", + "[|i,jp,kp] Pu2[i ,jp,kp,e] = sum_float32(j, V[jp,j]*Pu[i ,j ,kp,e])", + "Pu[ip,jp,kp,e] = sum_float32(i, V[ip,i]*Pu[i ,jp,kp,e])", + ], + [ + lp.ArrayArg("u", dtype, shape=field_shape, order=order), + lp.ArrayArg("P", dtype, shape=interim_field_shape, order=order), + lp.ArrayArg("I", dtype, shape=(M, N), order=order), + lp.ArrayArg("V", dtype, shape=(N, M), order=order), + lp.ArrayArg("Pu", dtype, shape=field_shape, order=order), + lp.ScalarArg("K", np.int32, approximately=1000), + ], + name="sem_lap_precon", assumptions="K>=1") + + print knl + 1/0 + + knl = lp.split_dimension(knl, "e", 16, outer_tag="g.0")#, slabs=(0, 1)) + + knl = lp.tag_dimensions(knl, dict(i="l.0", j="l.1")) + + print knl + #1/0 + + kernel_gen = lp.generate_loop_schedules(knl) + kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000), kill_level_min=5) + + lp.auto_test_vs_ref(seq_knl, ctx, kernel_gen, + op_count=0, + op_label="GFlops", + parameters={"K": K}, print_seq_code=True,) + + + + +if __name__ == "__main__": + import sys + if len(sys.argv) > 1: + exec(sys.argv[1]) + else: + from py.test.cmdline import main + main([__file__]) diff --git a/test/test_tim.py b/test/test_tim.py new file mode 100644 index 000000000..316cbc997 --- /dev/null +++ b/test/test_tim.py @@ -0,0 +1,215 @@ +from __future__ import division + +import numpy as np +import pyopencl as cl +import loopy as lp + +from pyopencl.tools import pytest_generate_tests_for_pyopencl \ + as pytest_generate_tests + + + +def test_tim2d(ctx_factory): + dtype = np.float32 + ctx = ctx_factory() + order = "C" + + n = 8 + + from pymbolic import var + K_sym = var("K") + + field_shape = (K_sym, n, n) + + # K - run-time symbolic + knl = lp.make_kernel(ctx.devices[0], + "[K] -> {[i,j,e,m,o,gi]: 0<=i,j,m,o<%d and 0<=e {[i,j,e,m,o,gi]: 0<=i,j,m,o<%d and 0<=e {[i,j,k,e,m,o,gi]: 0<=i,j,k,m,o<%d and 0<=e 1: + exec(sys.argv[1]) + else: + from py.test.cmdline import main + main([__file__]) -- GitLab