I added logging to fig_3_16 dependency graph example and exercised it with several different block sizes. The block where it computes the x[i] values is sometimes being executed twice. Below is a log for block_size=1 and N=8 that shows the "calc" executions occurring twice. It also has multiple calc executions when block_size=2, so it isn't a block_size=1 issue.
r:c= calc x[0]=0,
r:c=0:1, calc x[1]=0.5,
r:c= calc x[1]=0.5,
r:c=0:2,
r:c=0:3,
r:c=0:4,
r:c=1:2, calc x[2]=0.5,
r:c=1:3,
r:c=0:5,
r:c=1:4,
r:c= calc x[2]=0.5,
r:c=0:6,
r:c=1:5,
r:c=2:3, calc x[3]=0.35,
r:c=1:6,
r:c=0:7,
r:c=2:4,
r:c=2:5,
r:c=2:6,
r:c= calc x[3]=0.35,
r:c=1:7,
r:c=2:7,
r:c=3:4, calc x[4]=0.261765,
r:c=3:5,
r:c=3:6,
r:c= calc x[4]=0.261765,
r:c=3:7,
r:c=4:5, calc x[5]=0.207805,
r:c= calc x[5]=0.207805,
r:c=4:6,
r:c=4:7,
r:c=5:6, calc x[6]=0.171998,
r:c=5:7,
r:c= calc x[6]=0.171998,
r:c=6:7, calc x[7]=0.146639,
r:c= calc x[7]=0.146639,
I'm attaching the modified fig_3_16 example with logging and random delays inserted.
fig_3_16.zip
I added logging to fig_3_16 dependency graph example and exercised it with several different block sizes. The block where it computes the x[i] values is sometimes being executed twice. Below is a log for block_size=1 and N=8 that shows the "calc" executions occurring twice. It also has multiple calc executions when block_size=2, so it isn't a block_size=1 issue.
r:c= calc x[0]=0,
r:c=0:1, calc x[1]=0.5,
r:c= calc x[1]=0.5,
r:c=0:2,
r:c=0:3,
r:c=0:4,
r:c=1:2, calc x[2]=0.5,
r:c=1:3,
r:c=0:5,
r:c=1:4,
r:c= calc x[2]=0.5,
r:c=0:6,
r:c=1:5,
r:c=2:3, calc x[3]=0.35,
r:c=1:6,
r:c=0:7,
r:c=2:4,
r:c=2:5,
r:c=2:6,
r:c= calc x[3]=0.35,
r:c=1:7,
r:c=2:7,
r:c=3:4, calc x[4]=0.261765,
r:c=3:5,
r:c=3:6,
r:c= calc x[4]=0.261765,
r:c=3:7,
r:c=4:5, calc x[5]=0.207805,
r:c= calc x[5]=0.207805,
r:c=4:6,
r:c=4:7,
r:c=5:6, calc x[6]=0.171998,
r:c=5:7,
r:c= calc x[6]=0.171998,
r:c=6:7, calc x[7]=0.146639,
r:c= calc x[7]=0.146639,
I'm attaching the modified fig_3_16 example with logging and random delays inserted.
fig_3_16.zip