Legate In A Nutshell#
Legate is a task-based programming model. In broad strokes, Legate takes a normal C/C++ program, and asks the user to apply the following transformations:
Functions -> Tasks
By-value arguments and data ->
ScalarBy-reference arguments and data -> Various kinds of
Store
You effectively tell Legate:
Tasks: here’s what functions I run.
Stores/Scalars: here’s what data they touch.
Marking task arguments as input/output: And here’s how they touch it.
These allow the Legate runtime to abstractly reason about the control and data flow of the program.
Logical Data Objects#
LogicalStore- An abstract handle to a dense collection of generic, mutable data.LogicalArray- A grouping of one or moreLogicalStores that must be partitioned in a related way (e.g. a data store accompanied by a null mask).Scalar- An abstract handle to generic, immutable data.
Runtime Objects#
Runtime- The “god object” of Legate which controls the entire execution. Almost all other objects are created through this.Library- An object to which tasks are registered. Effectively a namespace for tasks and their options.