Skip to content

Commit

Permalink
Revert "regent: Enable vectorization for scattered reads through opaq…
Browse files Browse the repository at this point in the history
…ue pointers"

This reverts commit c75ecf7.
  • Loading branch information
elliottslaughter committed May 31, 2018
1 parent 3311b38 commit 1ebd2fd
Show file tree
Hide file tree
Showing 10 changed files with 59 additions and 75 deletions.
60 changes: 30 additions & 30 deletions language/examples/pennant_fast.rg
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -1379,15 +1379,15 @@ 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)
z.ze = z.zetot / (z.zm + fuzz)
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)
Expand Down
22 changes: 3 additions & 19 deletions language/src/regent/codegen.t
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down
12 changes: 6 additions & 6 deletions language/src/regent/vectorize_loops.t
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions language/tests/regent/compile_fail/vectorize_loops14.rg
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
6 changes: 3 additions & 3 deletions language/tests/regent/compile_fail/vectorize_loops15.rg
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
6 changes: 3 additions & 3 deletions language/tests/regent/compile_fail/vectorize_loops16.rg
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
Loading

0 comments on commit 1ebd2fd

Please sign in to comment.