BRAHMS primarily consists of the Engine (responsible for housekeeping, facilitating communications, scheduling, etc.) and the Components (user-authored plug-ins responsible for computing the actual SystemML processes). They talk to each other through the interface provided by the BRAHMS Component Interface. A lightweight wrapper sits on top of the Engine, providing an interface to the shell. For more, see Anatomy.


The first step is to design a SystemML system to be computed - for more on this topic, see the section Developing Systems in the User Guide. Once we have a system ready to be executed, the Engine is invoked by the user, passing an Execution File dictating what BRAHMS should do. The Execution File contains parameters such as the filename of the SystemML system to be computed, and the Execution Stop Time (how long to run it for). The Engine performs the following steps in response.

  • Init Phase
    • Load the SystemML system, instantiating a Process for each <Process> tag therein.
    • Initialise the Processes iteratively, until each has created all its outputs, and these have been seen by all receiving Processes to which they are Linked as inputs.
  • Run Phase (interleaved)
    • Service the Processes (ask them to compute)
    • Move Data through Links from Outputs to Inputs
    • Log any Outputs that the user requested be logged
  • Term Phase

For more, see Life Cycles.