Seeding in SystemML/BRAHMS is described, here. A seed can be either a vector of one or more non-zero
Each Process is assigned a seed source from the following possibilities. First, a non-zero seed may be specified for the Process in the SystemML file. All elements must be non-zero, and its value is used directly as a repeatable seed source specific to the Process. Second, a scalar zero seed may be specified for the Process in the SystemML file. In this case, a non-repeatable seed source is associated with the Process. Third, a seed may be specified for the Execution in the Execution File. It must be scalar, be between 1 and 0x7FFFFFFF, and should (generally) be a smallish integer. Any Process that does not specify its own seed is associated with a repeatable seed source specific to the Process with its initial value based on the specified value and the index of the Process in the System (the initial value is always at least 0x80000000).
This source returns a seed which is non-repeatable (generated from RDTSC). Each element can take any value except zero. No special effort is made to control the value beyond this.
A repeatable source will return its own value, and then increment that value. If more elements are requested than are available, the seed is padded with the value 0xAAAAAAAA. Only the first element is incremented, and overflow raises an error. Overflow occurs if the first element increments to a value of zero. It is unlikely to be an issue, but you may want to vary the value of
Using Seeds (System)
To begin with, a system you build will have no explicit seeds anywhere, and every process will be passed non-repeatable seeds.
To simulate this non-deterministic system deterministically, the user may set the Execution File seed to a non-zero value. This will generate an entirely repeatable execution, unless any individual processes specify non-repeatable seeds.
To render the non-deterministic system, or parts of it, deterministic, the author may choose seeds for individual processes. These can then not be overridden by the Execution File seed.
To summarise, the general idea is that you seed Processes explicitly only when it is required that they produce identical output on all executions. The user of your System (even if that's you) can then generate repeatable or non-repeatable executions as required.
Using Seeds (Process)
|This is a documentation page for the BRAHMS Modular Execution (Simulation) Framework. For details of licensing and distribution, please click here. To advise of an error or omission, please click here.|