A target coordinates the scheduling and implementation of algorithms described in a particular domain. As part of the coordination, a target may provide an interface to software (compiler, assembler, simulator, etc.) or hardware. A typical domain supports many different types of schedulers and many different implementation technologies. This is made possible by having many different target types for each domain.
In a simulation domain, the target selects the scheduler to use (there can be several schedulers in a single domain) and starts and stops a simulation.
In a code generation domain, the target also selects the scheduler, but then also generates the code, compiles it, and runs it on a suitable platform.
Targets can be defined hierarchically; for example, a multiprocessor target may consist of several, possibly heterogeneous execution platforms, each specifying itself as a target. In this example, the top level target might handle the partitioning and interprocessor communication, and the lower level targets might handle the code generation, compilation, and execution. Targets play a much bigger role in code generation domains than in simulation domains.