In this chapter, scheduling is defined as the activity that consists in mapping a task graph onto a target platform. The task graph represents the application, nodes denote computational tasks, and edges model precedence constraints between tasks. For each task, an assignment (choose the processor that will execute the task) and a schedule (decide when to start the execution) are determined. The goal is to obtain an efficient execution of the application, which translates into optimizing some objective function.The traditional objective function in the scheduling literature is the minimization of the total execution time, or makespan. Section 0.2 provides a quick background on task graph scheduling, mostly to recall some definitions, notations, and well-known results.In contrast to pure makespan minimization, this chapter aims at discussing scheduling problems that arise at large scale, and involve one or several different optimization criteria, that depart from, or complement, the classical makespan objective. Section 0.3 assesses the importance of key ingredients of modern scheduling techniques: (i) multi-criteria optimization; (ii) memory management; and (iii) reliability. These concepts are illustrated in the following sections, which cover four case studies. Section 0.4 is devoted to illustrate multi-criteria optimization techniques, that mix throughput, energy and reliability. Sections 0.5 and 0.6 illustrate different memory management techniques to schedule large task graphs. Finally, Section 0.7 discusses the impact of checkpointing techniques to schedule parallel jobs at very large-scale. We conclude this chapter by stating some research directions in Section 0.8, by defining terms in Section 0.9, and by pointing to additional sources of information in Section 0.10.
Background on Scheduling 0.2.1 Makespan MinimizationTraditional scheduling assumes that the target platform is a set of p identical processors, and that no communication cost is paid. In that context, a task graph is a directed acyclic vertex-weighted graph G = (V, E, w), where the set V of vertices represents the tasks, the set E of edges represents precedence constraints between tasks (e = (u, v) ∈ E if and only if u ≺ v). and the weight function w : V −→ N * gives the weight (or duration) of each task. Task weights are assumed to be positive integers. A schedule σ of a task graph is a function that assigns a start time to each task: σ : V −→ N * such that σ(u) + w(u) ≤ σ(v) whenever e = (u, v) ∈ E. In other words, a schedule preserves the dependence constraints induced by the precedence relation ≺ and embodied by the edges of the dependence graph; if u ≺ v, then the execution of u begins at time σ(u) and requires w(u) units of time, and the execution of v at time σ(v) must start after the end 1