First Full Calculation
Below is how the calculation chain will look after changing the values of A1
and B1
, or after forcing the application to perform a full calculation on the entire set of formulas:
<calcChain xmlns="…"> <c r="B2" i="1"/> <c r="B3" s="1"/> <c r="B4" s="1"/> <c r="B5" s="1"/> <c r="B6" s="1"/> <c r="B7" s="1"/> <c r="B8" s="1"/> <c r="B9" s="1"/> <c r="B10" s="1"/> <c r="C10" s="1"/> <c r="D10" s="1"/> <c r="A2"/> <c r="A3" s="1"/> <c r="A4" s="1"/> <c r="A5" s="1"/> <c r="A6" s="1"/> <c r="A7" s="1"/> <c r="A8" s="1"/> <c r="A9" s="1"/> <c r="A10" s="1"/> </calcChain>
Now the order of calculation seems more in line with the way in which the formulas depend on each other: cells B2:B10
are calculated in order, and cells A2:A10
are calculated in order.
Additionally, the application has discovered that the formulas in column B
can be calculated in parallel with the formulas in column A
(i.e., they don't depend on each other). This is evidenced by the presence of @s="1"
on the cell element for cells B2:B10
, indicating that B2:10
are part of a "child-chain" starting with B2
. Note also that C10
and B10
are included in that child chain, even though these formulas do, in fact, depend on calculated values from column A
. This is due to the multi-threaded nature of the calculation engine. Currently the chain on which C10
and D10
reside can be calculated concurrently with the chain on which A2:A10
reside because by the time C10
and D10
need to be calculated (e.g., by CPU #1), A10
has already been calculated (e.g., by CPU #2). In some future calculation, the timing may be different, and at that time, the application will need to resort to moving C10
and D10
to a new calculation level (see §3.5.2.3).