@@ -82,33 +82,34 @@ def linearize_accesses(iet, key, cache, sregistry):
8282
8383 # For all unseen Functions, build the size exprs. For example:
8484 # `x_fsz0 = u_vec->size[1]`
85- imapper = DefaultOrderedDict (list )
85+ imapper = DefaultOrderedDict (dict )
8686 for (d , halo , _ ), v in mapper .items ():
8787 v_unseen = [f for f in v if f in functions_unseen ]
8888 if not v_unseen :
8989 continue
9090 expr = _generate_fsz (v_unseen [0 ], d , sregistry )
9191 if expr :
9292 for f in v_unseen :
93- imapper [f ]. append (( d , expr .write ))
93+ imapper [f ][ d ] = expr .write
9494 cache [f ].stmts0 .append (expr )
9595
9696 # For all unseen Functions, build the stride exprs. For example:
9797 # `y_stride0 = y_fsz0*z_fsz0`
9898 built = {}
99- mapper = DefaultOrderedDict (list )
99+ mapper = DefaultOrderedDict (dict )
100100 for f , v in imapper .items ():
101- for n , (d , _ ) in enumerate (v ):
102- expr = prod (list (zip (* v [n :]))[1 ])
101+ for d in v :
102+ n = f .dimensions .index (d )
103+ expr = prod (v [i ] for i in f .dimensions [n :])
103104 try :
104105 stmt = built [expr ]
105106 except KeyError :
106107 name = sregistry .make_name (prefix = '%s_stride' % d .name )
107108 s = Symbol (name = name , dtype = np .uint32 , is_const = True )
108109 stmt = built [expr ] = DummyExpr (s , expr , init = True )
109- mapper [f ]. append ( stmt .write )
110+ mapper [f ][ d ] = stmt .write
110111 cache [f ].stmts1 .append (stmt )
111- mapper .update ([(f , [] ) for f in functions_unseen if f not in mapper ])
112+ mapper .update ([(f , {} ) for f in functions_unseen if f not in mapper ])
112113
113114 # For all unseen Functions, build defines. For example:
114115 # `#define uL(t, x, y, z) u[(t)*t_stride0 + (x)*x_stride0 + (y)*y_stride0 + (z)]`
@@ -201,7 +202,8 @@ def _(f, szs, sregistry):
201202 pname = sregistry .make_name (prefix = '%sL' % f .name )
202203 cbk = lambda i , pname = pname : FIndexed (i , pname )
203204
204- expr = sum ([MacroArgument (d .name )* s for d , s in zip (f .dimensions , szs )])
205+ expr = sum ([MacroArgument (d0 .name )* szs [d1 ]
206+ for d0 , d1 in zip (f .dimensions , f .dimensions [1 :])])
205207 expr += MacroArgument (f .dimensions [- 1 ].name )
206208 expr = Indexed (IndexedData (f .name , None , f ), expr )
207209 define = DefFunction (pname , f .dimensions )
0 commit comments