A MagicEight application is represented by a dependency graph of program objects. It may be started either by loading it from a file local to a node in MagicEight system, or loaded from memory by any application running on any node in the MagicEight system.
Once an application is loaded, demand for it's output will cause it to execute in the following manner. When a demand is made for a particular context of a stream, the demand is propagated backwards through the dependency graph, generating requests for computation. This demand driven execution is known as eduction.
A request for a computation is then partitioned using the resources available in a particular system and the parallelism provided by the particular algorithm. Once partitioned, particular Instances (or stream contexts) of each Task are placed in a heap local to the assigned node.
Once all dependencies on a Task Instance are cleared, it is scheduled (moved to the Ready Queue of a processing element in the local node) at an appropriate time. It will then be executed whenever the selected processing element becomes available.
Migration of task partitions after they have been assigned to a particular node is not supported by MagicEight. In the case of processor or communications fault with a node, a repeated demand for data should cause a rescheduling of the missing task partitions on remaining nodes.
magiceight-web@media.mit.edu, 9/98