Static Analysis of OpenStream Programs - Inria - Institut national de recherche en sciences et technologies du numérique
Rapport (Rapport De Recherche) Année : 2016

Static Analysis of OpenStream Programs

Analyse statique de programmes OpenStream

Résumé

This paper studies the applicability of polyhedral techniques to the parallel language Open- Stream [25]. When applicable, polyhedral techniques are invaluable for compile-time debugging and for generating efficient code well suited to a target architecture. OpenStream is a two-level language in which a control program directs the initialization of parallel task instances that communicate through streams, with possibly multiple writers and readers. It has a fairly complex semantics in its most general setting, but we restrict ourselves to the case where the control program is sequential, which is representative of the majority of the OpenStream applications. This restriction offers deterministic concurrency by construction, but deadlocks are still possible. We show that, if the control program is polyhedral, one may statically compute, for each task instance, the read and write indices to each of its streams, and thus reason statically about the dependences among task instances (the only scheduling constraints in this polyhedral subset). These indices may be polynomials of arbitrary degree, thus requiring to extend to polynomials the standard polyhedral techniques for dependence analysis, scheduling, and deadlock detection. Modern SMT allow to solve polynomial problems, albeit with no guarantee of success; the approach of Feautrier [10] may offer an alternative solution. We also establish two important results related to deadlocks in OpenStream: 1) a characterization of deadlocks in terms of dependence paths, which implies that streams can be safely bounded as soon as a schedule exists with such sizes, 2) the proof that deadlock detection is undecidable, even for polyhedral OpenStream.
Le but de ce rapport est d'évaluer la possibilité d'appliquer des techniques polyédriques au langage parallèle OpenStream [25]. Lorsqu'elles sont applicables, ces techniques sont très utiles pour les analyses à la compilation et l'optimisation du code pour une meilleure adaptation à l'architecture cible. OpenStream est un langage à deux niveaux dans lequel un programme de contrôle dirige l'initialisation d'instances de tâches parallèles qui communiquent au travers de streams qui peuvent avoir des écrivains et lecteurs multiples. OpenStream a une sémantique assez complexe dans sa forme la plus générale, mais nous nous restreignons au cas où le programme de contrôle est séquentiel, cas représentatif de la majorité des applications OpenStream. Avec cette restriction, les programmes OpenStream sont déterministes par construction, mais peuvent avoir des deadlocks (étreintes mortelles). Nous montrons que si le code de contrôle est polyédrique, on peut calculer de façon statique, pour chaque instance d'une tâche, les indices de lecture et d'écriture dans chaque stream, et donc raisonner sur les dépendances entre instances de tâches (les seules contraintes d'ordonnancement dans ce fragment polyédrique). Ces indices peuvent être des polynômes de degré arbitraire, ce qui requiert d'étendre aux polynômes les techniques polyédriques classiques d'analyse de dépendances, d'ordonnancement, de détection de deadlocks. Les solveurs SMT modernes permettent de résoudre de tels problèmes, bien que sans garantie de succès. L'approche de Feautrier [10] peut offrir une alternative. Nous montrons de plus deux résultats importants relatifs aux deadlocks dans OpenStream: 1) une caractérisation des deadlocks en termes de chemins de dépendances qui implique que les streams peuvent être bornés a priori, sans créer de deadlocks à l'exécution, dès lors qu'un ordonnancement existe avec de telles tailles, 2) la démonstration que la détection de deadlocks est indécidable, même pour le fragment polyédrique d'OpenStream.
Fichier principal
Vignette du fichier
RR-8764.pdf (971.09 Ko) Télécharger le fichier
Origine Fichiers produits par l'(les) auteur(s)
Loading...

Dates et versions

hal-01184408 , version 1 (14-08-2015)
hal-01184408 , version 2 (06-01-2016)

Licence

Identifiants

  • HAL Id : hal-01184408 , version 2

Citer

Albert Cohen, Alain Darte, Paul Feautrier. Static Analysis of OpenStream Programs. [Research Report] RR-8764, CNRS; Inria; ENS Lyon. 2016, pp.26. ⟨hal-01184408v2⟩
331 Consultations
309 Téléchargements

Partager

More