Minimizing I/Os in Out-of-Core Task Tree Scheduling
Résumé
Scientific applications are usually described as directed acyclic graphs,
where nodes represent tasks and edges represent dependencies between tasks. For
some applications, such as the multifrontal method of sparse matrix
factorization, this graph is a tree: each task produces a single output data,
used by a single task (its parent in the tree).
We focus on the case when the data manipulated by tasks have a large size,
which is especially the case in the multifrontal method. To process a task,
both its inputs and its output must fit in the main memory.
Moreover, output results of tasks have to be stored between their production
and their use by the parent task. It may therefore happen, during an execution,
that not all data fit together in memory. In particular, this is the case if
the total available memory is smaller than the minimum memory required to
process the whole tree. In such a case, some data have to be temporarily
written to disk and read afterwards. These Input/Output (I/O) operations are
very expensive; hence, the need to minimize them.
We revisit this open problem in this paper. Specifically, our goal is to
minimize the total volume of I/O while processing a given task tree. We first
formalize and generalize known results, then prove that existing solutions can be arbitrarily worse than
optimal. Finally, we propose a novel heuristic algorithm, based on
the optimal tree traversal for memory minimization. We demonstrate
good performance of this new heuristic through simulations on both
synthetic trees and realistic trees built from actual sparse
matrices.
Les applications de calcul scientifique sont souvent décrites comme des graphes de tâches
dirigés et acycliques, où les noeuds représentent les tâches et les arêtes représentent les dépendances
entre tâches. Pour certaines applications, comme les méthodes multifrontales de factorisation de matrices
creuses, le graphe correspondant est un arbre: chaque tâche produit un unique fichier de données
en sortie qui est utilisé par une unique tâche (son père dans l’arbre).
On s’intéresse ici dans le cas où les fichiers de données manipulés par les tâches sont de grande
taille, ce qui est en particulier le cas dans les méthodes multifrontales. Pour traiter une tâche, ses
fichiers d’entrée et de sortie doivent se trouver dans la mémoire principale. De plus, les fichiers de
sortie doivent être stockés entre leur création et leur utilisation par la tâche père. Il peut donc arriver
que, durant une exécution, la mémoire disponible soit inférieure à la mémoire minimum requise pour
traiter l’arbre complet.Dans ce cas, certaines données doivent être temporairement transférées sur un
disque pour être lues ultérieurement. Ces opérations d’Entrées/Sorties (E/S ou I/O en anglais) sont
très coûteuses, d’où le besoin de les minimiser.
Nous revisitons dans cet article ce problème ouvert. Plus précisément, notre objectif est de minimiser
le volume total d’Entrées/Sorties effectuées en traitant un arbre de tâche donné. Nous commençons
par formaliser et généraliser des résultats connus, puis nous prouvons que les solutions existantes
peuvent être arbitrairement loin de l’optimal. Finalement, nous proposons une nouvelle heuristique,
basée sur le parcours d’arbre minimisant l’utilisation mémoire. Nous établissons les bonnes
performances de cette heuristique à travers des simulations sur des arbres synthétiques ainsi que des
arbres réalistes construits à partir de matrices creuses réelles.
Origine | Fichiers produits par l'(les) auteur(s) |
---|
Loading...