From 1ebd2fdc0da12397777ec4ea94f4ee0841ea244a Mon Sep 17 00:00:00 2001 From: Elliott Slaughter Date: Thu, 31 May 2018 14:56:02 -0700 Subject: [PATCH] Revert "regent: Enable vectorization for scattered reads through opaque pointers" This reverts commit c75ecf7ac50588e0e3f409ac404000c7bf112a6d. --- language/examples/pennant_fast.rg | 60 +++++++++---------- language/src/regent/codegen.t | 22 +------ language/src/regent/vectorize_loops.t | 12 ++-- .../regent/compile_fail/vectorize_loops14.rg | 6 +- .../regent/compile_fail/vectorize_loops15.rg | 6 +- .../regent/compile_fail/vectorize_loops16.rg | 6 +- .../regent/compile_fail/vectorize_loops17.rg | 6 +- .../regent/compile_fail/vectorize_loops18.rg | 6 +- .../regent/compile_fail/vectorize_loops19.rg | 6 +- .../regent/compile_fail/vectorize_loops3.rg | 4 +- 10 files changed, 59 insertions(+), 75 deletions(-) diff --git a/language/examples/pennant_fast.rg b/language/examples/pennant_fast.rg index 52751eb8e5..6758d240bb 100644 --- a/language/examples/pennant_fast.rg +++ b/language/examples/pennant_fast.rg @@ -134,7 +134,7 @@ where reads(rz_spans) do for z_span in rz_spans do - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -338,19 +338,19 @@ do for p_span in rp_spans do -- Save off point variable values from previous cycle. -- Initialize fields used in reductions. - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) p.pmaswt = 0.0 end - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) p.pf.x = 0.0 end - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) @@ -362,7 +362,7 @@ do -- -- Copy state variables from previous time step and update position. - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) @@ -372,7 +372,7 @@ do p.pu0.x = pu0_x p.pxp.x = px0_x + dth*pu0_x end - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) @@ -449,7 +449,7 @@ do -- Save off zone variable value from previous cycle. -- Copy state variables from previous time step. - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -613,7 +613,7 @@ do -- -- Compute zone densities. - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -622,7 +622,7 @@ do -- Reduce masses into points. if s_span.internal then - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -634,7 +634,7 @@ do p1.pmaswt += m end else - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -656,7 +656,7 @@ do var ss2 = max(ssmin * ssmin, 1e-99) var dth = 0.5 * dt - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -683,7 +683,7 @@ do -- -- Compute PolyGas and TTS forces. - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -757,7 +757,7 @@ do -- QCS corner divergence. if s_span.internal then - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s2 = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -835,7 +835,7 @@ do c.cdu = cond3 * du end else - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s2 = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -918,7 +918,7 @@ do if s_span.internal then var gammap1 = gamma + 1.0 - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s4 = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -945,7 +945,7 @@ do else var gammap1 = gamma + 1.0 - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s4 = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -972,7 +972,7 @@ do end -- QCS force. - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -999,14 +999,14 @@ do -- QCS vel diff. if s_span.internal then - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) z.z0tmp = 0.0 end - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -1023,21 +1023,21 @@ do z.z0tmp max= dux end - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) z.zdu = q1 * z.zss + 2.0 * q2 * z.z0tmp end else - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) z.z0tmp = 0.0 end - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -1054,7 +1054,7 @@ do z.z0tmp max= dux end - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -1064,7 +1064,7 @@ do -- Reduce forces into points. if s_span.internal then - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -1076,7 +1076,7 @@ do p1.pf.y += f.y end else - __demand(__vectorize) + --__demand(__vectorize) for s_raw = s_span.start, s_span.stop do var s = unsafe_cast(ptr(side(rz, rpp, rpg, rs), rs), s_raw) @@ -1111,7 +1111,7 @@ do -- 4a. Apply boundary conditions. -- - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) @@ -1131,7 +1131,7 @@ do do var fuzz = 1e-99 var dth = 0.5 * dt - __demand(__vectorize) + --__demand(__vectorize) for p_raw = p_span.start, p_span.stop do var p = unsafe_cast(ptr(point, rp), p_raw) @@ -1364,7 +1364,7 @@ do do var dtiny = 1.0 / dt - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -1379,7 +1379,7 @@ do do var fuzz = 1e-99 - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) @@ -1387,7 +1387,7 @@ do end end - __demand(__vectorize) + --__demand(__vectorize) for z_raw = z_span.start, z_span.stop do var z = unsafe_cast(ptr(zone, rz), z_raw) diff --git a/language/src/regent/codegen.t b/language/src/regent/codegen.t index b3ba3d0bab..935ea1de4e 100644 --- a/language/src/regent/codegen.t +++ b/language/src/regent/codegen.t @@ -1023,12 +1023,7 @@ function ref:__ref(cx, expr_type) values = data.zip(field_types, base_pointers, strides):map( function(field) local field_type, base_pointer, stride = unpack(field) - local vec - if std.type_eq(field_type, std.ptr) then - vec = expr_type.impl_type - else - vec = vector(field_type, std.as_read(expr_type).N) - end + local vec = vector(field_type, std.as_read(expr_type).N) return `(@[&vec](&[get_element_pointer(cx, self.node, region_types, self.value_type, field_type, base_pointer, stride, value)])) end) value_type = expr_type @@ -1089,10 +1084,6 @@ function ref:write(cx, value, expr_type) for _, field_name in ipairs(field_path) do result = `([result].[field_name]) end - if std.is_vptr(expr_type) and std.type_eq(field_type, std.ptr) then - field_value = `([field_value].value) - result = `([result].__ptr.value) - end if expr_type and (expr_type:isvector() or std.is_vptr(expr_type) or @@ -1322,9 +1313,8 @@ function vref:read(cx, expr_type) actions = quote [actions]; var [value] - [data.zip(field_paths, field_types):map( - function(pair) - local field_path, field_type = unpack(pair) + [field_paths:map( + function(field_path) local result = value local field_accesses = vars:map( function(v) @@ -1336,12 +1326,6 @@ function vref:read(cx, expr_type) for _, field_name in ipairs(field_path) do result = `([result].[field_name]) end - if std.is_vptr(expr_type) and std.type_eq(field_type, ptr) then - result = `([result].value) - field_accesses = field_accesses:map(function(field_access) - return `([field_access].__ptr.value) - end) - end return quote [result] = vector( [field_accesses] ) end end)] end diff --git a/language/src/regent/vectorize_loops.t b/language/src/regent/vectorize_loops.t index 0328fb1194..ded1506f40 100644 --- a/language/src/regent/vectorize_loops.t +++ b/language/src/regent/vectorize_loops.t @@ -838,16 +838,16 @@ function check_vectorizability.expr(cx, node) if cx:lookup_expr_type(node.index) == V then local value_type = std.as_read(node.value.expr_type) - ---- TODO: We currently don't support scattered reads from structured regions - ---- Update on 06/20/17: index types are no longer sliced. will reject - ---- all scattered reads for now. (wclee) + -- TODO: We currently don't support scattered reads from structured regions + -- Update on 06/20/17: index types are no longer sliced. will reject + -- all scattered reads for now. (wclee) if std.is_region(value_type) then cx:report_error_when_demanded(node, error_prefix .. "a scattered read from a structured region") return false -- TODO: This should be supported elseif std.is_region(value_type) and value_type:is_opaque() and - not std.is_bounded_type(std.as_read(node.index.expr_type)) then + not std.is_bounded_type(std.as_read(node.index.expr_type)) then cx:report_error_when_demanded(node, error_prefix .. "a scattered read from a different region") return false @@ -943,7 +943,7 @@ function check_vectorizability.expr(cx, node) -- TODO: We currently don't support scattered reads from structured regions -- Update on 06/20/17: index types are no longer sliced. will reject -- all scattered reads for now. (wclee) - elseif fact == V and not std.as_read(node.value.expr_type).index_type:is_opaque() then + elseif fact == V then cx:report_error_when_demanded(node, error_prefix .. "a scattered read from a structured region") return false @@ -1049,7 +1049,7 @@ end function check_vectorizability.type(ty) if (std.is_bounded_type(ty) and std.is_index_type(ty.index_type)) or std.is_index_type(ty) or std.is_rect_type(ty) then - return ty.dim == 0 + return false elseif ty:isprimitive() then return true elseif ty:isstruct() then diff --git a/language/tests/regent/compile_fail/vectorize_loops14.rg b/language/tests/regent/compile_fail/vectorize_loops14.rg index 0bee6292ab..4b6f331e63 100644 --- a/language/tests/regent/compile_fail/vectorize_loops14.rg +++ b/language/tests/regent/compile_fail/vectorize_loops14.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops14.rg:45: vectorization failed: loop body has aliasing update of path region(fs3()).v --- e.p1.p.v += e.p2.p.v --- ^ +-- vectorize_loops14.rg:45: vectorization failed: loop body has a scattered read from a structured region +-- e.p1.p.v += e.p2.p.v +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops15.rg b/language/tests/regent/compile_fail/vectorize_loops15.rg index 6ed532aab0..c1a49d14d1 100644 --- a/language/tests/regent/compile_fail/vectorize_loops15.rg +++ b/language/tests/regent/compile_fail/vectorize_loops15.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops15.rg:40: vectorization failed: loop body has aliasing update of path region(fs2()).v --- e.p1.v = e.p2.v --- ^ +-- vectorize_loops15.rg:40: vectorization failed: loop body has a scattered read from a structured region +-- e.p1.v = e.p2.v +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops16.rg b/language/tests/regent/compile_fail/vectorize_loops16.rg index be5311b549..d21404843e 100644 --- a/language/tests/regent/compile_fail/vectorize_loops16.rg +++ b/language/tests/regent/compile_fail/vectorize_loops16.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops16.rg:40: vectorization failed: loop body has aliasing update of path region(fs2()).v --- e.p2.v = e.p1.v --- ^ +-- vectorize_loops16.rg:40: vectorization failed: loop body has a scattered read from a structured region +-- e.p2.v = e.p1.v +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops17.rg b/language/tests/regent/compile_fail/vectorize_loops17.rg index fdfc79fa7b..6a2e5fe300 100644 --- a/language/tests/regent/compile_fail/vectorize_loops17.rg +++ b/language/tests/regent/compile_fail/vectorize_loops17.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops17.rg:41: vectorization failed: loop body has aliasing update of path region(fs2()).v --- e.p1.v = t --- ^ +-- vectorize_loops17.rg:40: vectorization failed: loop body has a scattered read from a structured region +-- var t = e.p2.v +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops18.rg b/language/tests/regent/compile_fail/vectorize_loops18.rg index 45aa0fc180..375609e180 100644 --- a/language/tests/regent/compile_fail/vectorize_loops18.rg +++ b/language/tests/regent/compile_fail/vectorize_loops18.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops18.rg:42: vectorization failed: loop body has aliasing update of path region(fs2()).v --- e.p1.v += t --- ^ +-- vectorize_loops18.rg:40: vectorization failed: loop body has a scattered read from a structured region +-- var t = e.p2.v +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops19.rg b/language/tests/regent/compile_fail/vectorize_loops19.rg index 3c39ed5061..bcc5ca8699 100644 --- a/language/tests/regent/compile_fail/vectorize_loops19.rg +++ b/language/tests/regent/compile_fail/vectorize_loops19.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops19.rg:42: vectorization failed: loop body has aliasing update of path region(fs2()).v --- e.p1.v += t --- ^ +-- vectorize_loops19.rg:42: vectorization failed: loop body has a scattered read from a structured region +-- e.p1.v += t +-- ^ import "regent" diff --git a/language/tests/regent/compile_fail/vectorize_loops3.rg b/language/tests/regent/compile_fail/vectorize_loops3.rg index 8072e386db..7ab73b59c0 100644 --- a/language/tests/regent/compile_fail/vectorize_loops3.rg +++ b/language/tests/regent/compile_fail/vectorize_loops3.rg @@ -13,9 +13,9 @@ -- limitations under the License. -- fails-with: --- vectorize_loops3.rg:40: vectorization failed: loop body has aliasing update of path region(fs2()).v +-- vectorize_loops3.rg:40: vectorization failed: loop body has a scattered read from a structured region -- e.p1.v = e.p2.v --- ^ +-- ^ import "regent"