block → iter
This commit is contained in:
parent
9da567cd57
commit
dee29a1a02
@ -90,7 +90,7 @@ def hCast{T,p:P & match{P,*void}} = *T~~p
|
|||||||
# tup{'b',VT,p:P} - loadBatchBit
|
# tup{'b',VT,p:P} - loadBatchBit
|
||||||
# tup{'g',VT,p:*T} - gives a generator supporting g{} for loadBatch and g{newValue} for storeBatch
|
# tup{'g',VT,p:*T} - gives a generator supporting g{} for loadBatch and g{newValue} for storeBatch
|
||||||
# tup{'g',p:*T} - the above, but without load support
|
# tup{'g',p:*T} - the above, but without load support
|
||||||
def mlExec{i, block, vars0, bulk, M} = {
|
def mlExec{i, iter, vars0, bulk, M} = {
|
||||||
def vproc2{T,p:P} = tptr{{i} => loadBatch{p, i, T}, {i,x} => storeBatch{p, i, x, M}}
|
def vproc2{T,p:P} = tptr{{i} => loadBatch{p, i, T}, {i,x} => storeBatch{p, i, x, M}}
|
||||||
def vproc2{S=='b', p:P} = tptr{{i} => b_getBatch{bulk, hCast{u64,p}, i}, '!'}
|
def vproc2{S=='b', p:P} = tptr{{i} => b_getBatch{bulk, hCast{u64,p}, i}, '!'}
|
||||||
def vproc2{S=='b',T,p:P} = tptr{{i} => loadBatchBit{T, hCast{u64,p}, i}, '!'}
|
def vproc2{S=='b',T,p:P} = tptr{{i} => loadBatchBit{T, hCast{u64,p}, i}, '!'}
|
||||||
@ -104,18 +104,18 @@ def mlExec{i, block, vars0, bulk, M} = {
|
|||||||
def vproc{S=='m'} = tptr{{_}=>M, '!'}
|
def vproc{S=='m'} = tptr{{_}=>M, '!'}
|
||||||
def vproc{t & ktup{t}} = vproc2{...t}
|
def vproc{t & ktup{t}} = vproc2{...t}
|
||||||
|
|
||||||
block{i, each{vproc, vars0}}
|
iter{i, each{vproc, vars0}}
|
||||||
}
|
}
|
||||||
|
|
||||||
# i0 - initial batch index; not used as begin because it's in a different scale compared to end
|
# i0 - initial batch index; not used as begin because it's in a different scale compared to end
|
||||||
def maskedLoop{bulk, i0}{vars,begin==0,end,block} = {
|
def maskedLoop{bulk, i0}{vars,begin==0,end,iter} = {
|
||||||
l:u64 = end
|
l:u64 = end
|
||||||
|
|
||||||
m:u64 = l / bulk
|
m:u64 = l / bulk
|
||||||
@for (i from i0 to m) mlExec{i, block, vars, bulk, maskNone}
|
@for (i from i0 to m) mlExec{i, iter, vars, bulk, maskNone}
|
||||||
|
|
||||||
left:= l & (bulk-1)
|
left:= l & (bulk-1)
|
||||||
if (left!=0) mlExec{m, block, vars, bulk, maskAfter{left}}
|
if (left!=0) mlExec{m, iter, vars, bulk, maskAfter{left}}
|
||||||
}
|
}
|
||||||
def maskedLoop{bulk} = maskedLoop{bulk,0}
|
def maskedLoop{bulk} = maskedLoop{bulk,0}
|
||||||
|
|
||||||
@ -129,36 +129,36 @@ def maskedLoop{bulk} = maskedLoop{bulk,0}
|
|||||||
# begin must be 0
|
# begin must be 0
|
||||||
# end is scalar element count
|
# end is scalar element count
|
||||||
# index given is a tuple of batch indexes to process
|
# index given is a tuple of batch indexes to process
|
||||||
def muLoop{bulk, unr, fromunr}{vars,begin==0,end,block} = {
|
def muLoop{bulk, unr, fromunr}{vars,begin==0,end,iter} = {
|
||||||
l:u64 = end
|
l:u64 = end
|
||||||
def step = 123123123
|
def step = 123123123
|
||||||
|
|
||||||
m:u64 = l / bulk
|
m:u64 = l / bulk
|
||||||
if (unr==1) {
|
if (unr==1) {
|
||||||
@for (i from 0 to m) mlExec{tup{i}, block, vars, bulk, maskNone}
|
@for (i from 0 to m) mlExec{tup{i}, iter, vars, bulk, maskNone}
|
||||||
|
|
||||||
left:= l & (bulk-1)
|
left:= l & (bulk-1)
|
||||||
if (left!=0) mlExec{tup{m}, block, vars, bulk, maskAfter{left}}
|
if (left!=0) mlExec{tup{m}, iter, vars, bulk, maskAfter{left}}
|
||||||
} else {
|
} else {
|
||||||
if (m > 0) {
|
if (m > 0) {
|
||||||
i:u64 = 0
|
i:u64 = 0
|
||||||
if (unr <= m) {
|
if (unr <= m) {
|
||||||
while ((i+unr) <= m) {
|
while ((i+unr) <= m) {
|
||||||
def is = each{{j}=>i+j, iota{unr}}
|
def is = each{{j}=>i+j, iota{unr}}
|
||||||
mlExec{each{{j}=>i+j, iota{unr}}, block, vars, bulk, maskNone}
|
mlExec{each{{j}=>i+j, iota{unr}}, iter, vars, bulk, maskNone}
|
||||||
i+= unr
|
i+= unr
|
||||||
}
|
}
|
||||||
fromunr{}
|
fromunr{}
|
||||||
}
|
}
|
||||||
if (unr==2) {
|
if (unr==2) {
|
||||||
if (i!=m) mlExec{tup{i}, block, vars, bulk, maskNone}
|
if (i!=m) mlExec{tup{i}, iter, vars, bulk, maskNone}
|
||||||
} else {
|
} else {
|
||||||
@for(j from i to m) mlExec{tup{j}, block, vars, bulk, maskNone}
|
@for(j from i to m) mlExec{tup{j}, iter, vars, bulk, maskNone}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
left:= l & (bulk-1)
|
left:= l & (bulk-1)
|
||||||
if (left!=0) mlExec{tup{m}, block, vars, bulk, maskAfter{left}}
|
if (left!=0) mlExec{tup{m}, iter, vars, bulk, maskAfter{left}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def muLoop{bulk, unr} = muLoop{bulk, unr, {}=>0}
|
def muLoop{bulk, unr} = muLoop{bulk, unr, {}=>0}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user