42.0 - Accumulate Deterministic Quantities

When a calculation is performed in parallel over multiple CPUs or cores, the order in which specific computations occur can and will change. This can cause roundoff error to accumulate differently. For some models, the final results of these differences are nearly impossible to detect. But for a wide class of models, these differences can magnify, resulting in a situation where every time a given model is run, there is a different result. It is important to note that all of these results are equally valid, as they are all within the range of finite-precision floating point error. Deterministic mode (set with the model deterministic command) sacrifices efficiency and memory to force the parallel computation to result in the same answer every time, regardless of the number of CPUs it is performed on or their relative speed.

When looping over a container in a parallel fashion, the ordered list of entries are split into sub-lists (called blocks) that are sent for processing to each processing thread. One strategy to enforce determinism is to form partial results for each of these blocks and store them in the same order as the blocks were created. During this operation in the cycle sequence, the partial results are combined in order to produce the final result. This ensures that the final result is the same regardless of the order of operations. This operation is not performed if deterministic mode is turned off.

Next Cycle Point: Contact Coupling