Master 2013 2014
psar
floatOS : Driver OS pour la prise en charge des exceptions mathématiques dans le calcul en virgule flottante


Site :Trac-floatOS
Lieu :Jussieu
Encadrant : B. Folliot stage pour 2-4 étudiants
Dates :standard

Description

PSAR 2014

floatOS : Driver OS pour la prise en charge des exceptions mathématiques dans le calcul en virgule flottante

Stage pour 2-4 étudiants

Dans sa première version, la norme IEEE 754 décrit cette gestion alternative des exceptions de calcul d’une façon très (et probablement trop) proche du matériel, spécifiant juste l’installation d’un vecteur système (exception handler trap). Dans sa version courante (IEEE 754-2008), la norme spécifie ce qu’elle appelle des attributs de gestion alternative qui peuvent être activés pour des blocs d’instructions écrites dans un langage haut niveau. Ces attributs de gestion alternative forment une API très informelle pour la gestion des exceptions de calcul IEEE 754.

Problème : Bien que spécifié depuis 28 ans et important pour certains codes en virgule flottante, le support pour la gestion « non-defaut » des exceptions IEEE 754 est quasi inexistant à l’heure actuelle. Aucun système d’exploitation ni langage de programmation ne spécifie de support portable pour une telle gestion alternative des exceptions IEEE 754 [3,4,5,6,7]. Cette absence de support s’explique par une multitude de réalisations matérielles très variées entre les différente architectures et la nécessité d’un support vertical très profond, faisant intervenir à la fois le matériel, le système d’exploitation et les langages de programmation (et leur compilateur).

But du projet : Le but du projet est la réalisation d’un prototype d’un tel support pour la gestion alternative des exceptions IEEE 754 à tous les niveaux, pour un choix de processeur et système restreint (la prise en compte multi-OS, multi-processeur serait trop complexe dans un premier temps). On cible un support pour : un processeur Intel avec gestion du calcul en virgule flottante sur l’unité x87 (legacy 32 bits) ou l’unité SSE/AVX (64 bits), le système d’exploitation Linux et une API de gestion d’exceptions IEEE 754 pour le langage C.

Etapes : Le projet commencera par une phase de défrichage de l’existant (méthodes non portables à séquences assembleur, etc.), continuera avec une expérimentation avec les chamanismes matériels prévus à la fois par les unité x87 et SSE/AVX des processeurs Intel, proposera une API portable et utile à l’utilisateur de calcul en virgule flottante et terminera par une implémentation (prototypée) de cette implémentation.

Support OS : La réalisation se fera au sein de VMKit [9]. VMKit est une architecture de développement de machines virtuelles de haut niveau. Cette architecture offre une couche commune pour le runtime (GC, threads, ...) et pour l’exécution des instructions. VMkit est basée sur la machine LLVM [2] qui utilise le GC de Boehm et les threads POSIX. VMkit a été utilisée pour développer une JVM (J3) [3] et une machine .NET (N3) [4] montrant ainsi son adaptation au monde objet. Elle servira ici de support de « driver OS » pour le calcul en virgule flottante de calculs scientifiques.

Bibliographie

Références bibliographiques

[1] Institute of Electrical and Electronics Engineers (IEEE), IEEE Standard for Binary Floating-Point Arithmetic, IEEE Std 754-1985, IEEE, New York, NY, USA, 1985.

[2] IEEE Computer Society, IEEE Standard for Floating-Point Arithmetic, IEEE Std 754-2008, IEEE, New York, NY, USA, 2008.

[3] William Kahan, Branch Cuts for Complex Elementary Functions, or Much Ado About Nothing’s Sign Bit in The State of the Art in Numerical Analysis, (eds. Iserles and Powell), Clarendon Press, Oxford, 1987.

[4] William Kahan, How JAVA’s Floating-Point Hurts Everyone Everywhere, document électronique disponible à l’adresse http://www.cs.berkeley.edu/ wkahan/...

[5] William Kahan, A Demonstration of Presubstitution for Infinity/Infinity, document électronique disponible à l’adresse http://www.cs.berkeley.edu/ wkahan/...

[6] Back to the Future of Undebuggable Floating-Point Software in Science and Engineering, document électronique disponible à l’adresse http://www.cs.berkeley.edu/ wkahan/...

[7] William Kahan, Desperately Needed Remedies for the Undebuggability of Large Floating-Point Computations in Science and Engineering, séminaire Math-Infos, UPMC, Paris, Septembre 2013, cf. http://www-polsys.lip6.fr/ safey/se...

[8] O. Kupriianova, Ch. Lauter, The libieee754 compliance library for the IEEE 754-2008 Standard, 15th GAMM - IMACS International Symposion on Scientific Computing, Computer Arithmetic and Validated Numerics, Novosibirsk, Russie, septembre 2012

— -

[9] N. Geoffray, G. Thomas, C. Clément, B. Folliot et G. Muller. VMKit : a Substrate for Virtual Machines. Proc. of the ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments (VEE 2010), Pittsburgh, PA, pp. 51-61, Mars 2010.

[10] site de LLVM (Low Level Virtual Machine) : http://llvm.org

[11] N. Geoffray, G. Thomas, C. Clément et Bertil Folliot. A Lazy Developer Approach : Building a JVM with Third Party Software. In Conference of the Principles and Practives of Programming in Java, 2008.

[12] site VMkit : http://vmkit.llvm.org/