diff --git a/test/test_sem.py b/test/test_sem.py index f7af36bf437c64347ca89735f6fceaffd8cf5278..38426cdb016e6cf59fdc785dfa08f5fd4143f25b 100644 --- a/test/test_sem.py +++ b/test/test_sem.py @@ -131,7 +131,7 @@ def test_sem(ctx_factory): #1/0 kernel_gen = lp.generate_loop_schedules(knl) - kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000), kill_level_min=5) + kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000)) a = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) b = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) @@ -248,7 +248,7 @@ def test_sem_nd(ctx_factory): #1/0 kernel_gen = lp.generate_loop_schedules(knl) - kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000), kill_level_min=5) + kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000)) a = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) b = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) @@ -284,61 +284,48 @@ def test_sem_3d(ctx_factory): field_shape = (K_sym, n, n, n) # K - run-time symbolic - n = 8 knl = lp.make_kernel(ctx.devices[0], "[K] -> {[i,j,k,e,m]: 0<=i,j,k,m<%d and 0<=e<K}" % n, [ - "[|i,j,k,m] <float32> ur[i,j,k] = sum_float32(m, D[i,m]*u[e,m,j,k])", - "[|i,j,k,m] <float32> us[i,j,k] = sum_float32(m, D[j,m]*u[e,i,m,k])", - "[|i,j,k:ilp,m] <float32> ut[i,j,k] = sum_float32(m, D[k,m]*u[e,i,j,m])", - - "lap[i,j,k,e] = " - " sum_float32(m, D[m,i]*(G[0,e,m,j,k]*ur[m,j,k] + G[1,e,m,j,k]*us[m,j,k] + G[2,e,m,j,k]*ut[m,j,k]))" - "+ sum_float32(m, D[m,j]*(G[1,e,i,m,k]*ur[i,m,k] + G[3,e,i,m,k]*us[i,m,k] + G[4,e,i,m,k]*ut[i,m,k]))" - "+ sum_float32(m, D[m,k]*(G[2,e,i,j,m]*ur[i,j,m] + G[4,e,i,j,m]*us[i,j,m] + G[5,e,i,j,m]*ut[i,j,m]))" + "CSE: ur(i,j,k) = sum_float32(@m, D[i,m]*u[e,m,j,k])", + "CSE: us(i,j,k) = sum_float32(@m, D[j,m]*u[e,i,m,k])", + "CSE: ut(i,j,k) = sum_float32(@m, D[k,m]*u[e,i,j,m])", + + "lap[e,i,j,k] = " + " sum_float32(m, D[m,i]*(G[0,e,m,j,k]*ur(m,j,k) + G[1,e,m,j,k]*us(m,j,k) + G[2,e,m,j,k]*ut(m,j,k)))" + "+ sum_float32(m, D[m,j]*(G[1,e,i,m,k]*ur(i,m,k) + G[3,e,i,m,k]*us(i,m,k) + G[4,e,i,m,k]*ut(i,m,k)))" + "+ sum_float32(m, D[m,k]*(G[2,e,i,j,m]*ur(i,j,m) + G[4,e,i,j,m]*us(i,j,m) + G[5,e,i,j,m]*ut(i,j,m)))" ], [ - lp.ArrayArg("u", dtype, shape=field_shape, order=order), + lp.ArrayArg("u", dtype, shape=field_shape, order=order), lp.ArrayArg("lap", dtype, shape=field_shape, order=order), - lp.ArrayArg("G", dtype, shape=(6,) + field_shape, order=order), - lp.ArrayArg("D", dtype, shape=(n, n), order=order), - lp.ScalarArg("K", np.int32, approximately=1000), + lp.ArrayArg("G", dtype, shape=(6,)+field_shape, order=order), + lp.ArrayArg("D", dtype, shape=(n, n), order=order), + lp.ScalarArg("K", np.int32, approximately=1000), ], name="semlap", assumptions="K>=1") - #print knl - #for tv in knl.temporary_variables.iteritems(): - #print tv - #1/0 + #knl = lp.realize_cse(knl, "D", np.float32, ["i_dr", "m_dr"]) + #knl = lp.realize_cse(knl, "D", np.float32, ["i_dr", "m_dr"]) + #knl = lp.realize_cse(knl, "u", np.float32, ["m_dr", "j_dr", "k_dr"]) + #knl = lp.add_prefetch(knl, "G", ["m", "j", "k"]) + + seq_knl = knl knl = lp.split_dimension(knl, "e", 16, outer_tag="g.0")#, slabs=(0, 1)) #knl = lp.split_dimension(knl, "e_inner", 4, inner_tag="ilp") - knl = lp.tag_dimensions(knl, dict(i="l.0", j="l.1")) - #knl = lp.realize_cse(knl, "build_ur", np.float32, ["j", "k"]) - #knl = lp.realize_cse(knl, "build_ur", np.float32, ["j", "k", "mp"]) - knl = lp.preprocess_kernel(knl) 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) - - a = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) - b = make_well_conditioned_dev_matrix(queue, n, dtype=dtype, order=order) - c = cl_array.empty_like(a) - refsol = np.dot(a.get(), b.get()) - - def launcher(kernel, gsize, lsize, check): - evt = kernel(queue, gsize(), lsize(), a.data, b.data, c.data, - g_times_l=True) - - if check: - check_error(refsol, c.get()) - - return evt + knl = lp.tag_dimensions(knl, dict(i="l.0", j="l.1")) - lp.drive_timing_run(kernel_gen, queue, launcher, 2*n**3) + kernel_gen = lp.generate_loop_schedules(knl, + loop_priority=["j_dr", "j_ds", "i_dt"]) + kernel_gen = lp.check_kernels(kernel_gen, dict(K=1000)) + K = 1000 + lp.auto_test_vs_seq(seq_knl, ctx, kernel_gen, + op_count=K*(n*n*n*n*2*3 + n*n*n*5*3 + n**4 * 2*3)/1e9, + op_label="GFlops", + parameters={"K": K}, print_seq_code=True)