• Aucun résultat trouvé

Chapitre 3: Propositions

III.3 Statuts XML

Afin de donner corps au concept de statut générique, j’ai conçu un format ouvert en XML pour la sauvegarde des statuts des algorithmes de génération de nombres pseudo-aléatoires et quasi-pseudo-aléatoires. Le langage XML permet d’une part, de générer des statuts lisibles grâce aux méta-informations contenues dans balises XML (elles donnent un sens aux données qu’elles contiennent), et d’autre part, de placer dans le fichier des méta-informations sur l’utilisation dans un contexte de calcul distribué de la série de nombres pseudo-aléatoires générée à partir du statut. Le Code 7 expose le format de ces statuts dans une version en attente de commentaires. Ce format est publié dans (R. Reuillon, D. Hill, et al., Rigorous distribution of stochastic simulations using the DistMe toolkit 2008a).

Pour tous les statuts XML, la balise XML racine est Status. Ensuite se trouvent trois méta-informations sur la séquence de nombres pseudo-aléatoires générée. Tout d’abord le tag XML distance contient un nombre entier qui indique le nombre d’itérations de l’algorithme depuis l’initialisation avec un statut appelé statut d’origine, dont la distance est fixée arbitrairement à 0. Cette indication est utile pour éviter les problèmes de chevauchement lors de parallélisation des algorithmes par un découpage en séquence. Dans le format XML proposé, les attributs subSerie et group sont des chaines de caractères correspondant respectivement à la désignation de la sous-série et à celle du groupe dont les significations sont expliquées au paragraphe suivant.

<Status>

<distance></distance> <subSerie></subSerie> <group></group>

<data class="Nom de l’algorithme"> </data>

</Status>

Code Code Code

Code 7777 Format d’un statut générique en XMLFormat d’un statut générique en XMLFormat d’un statut générique en XML Format d’un statut générique en XML

La Figure 37 présente un diagramme de classes illustrant les concepts de groupes et de sous-séries pour un générateur. Tout d’abord ce modèle s’applique à tous les algorithmes de génération de nombres pseudo-aléatoires. Les statuts sont regroupés

136

dans des sous-séries, elles mêmes regroupées dans des groupes. La notion de groupe correspond à un groupe de sous-séries indépendantes entre elles. Toutes les sous-séries appartenant à un même groupe ont été générées de sorte à être indépendantes entre elles. Une sous-série peut contenir plusieurs statuts. Ces statuts sont issus d’une parallélisation par un découpage en séquence de la sous-série. Ces statuts sont distingués entre eux par un attribut distance, qui permet de connaître le nombre d’itérations de l’algorithme de génération qui séparent chaque statut des autres. Le statut dont la distance est 0 est appelé le statut origine. Chaque statut est lié à des données spécifiques pour l’initialisation du générateur de nombres pseudo-aléatoires correspondant.

Figure Figure Figure

Figure 37373737 Diagramme UML de classes représentant les métadonnées et les données d’un statutDiagramme UML de classes représentant les métadonnées et les données d’un statutDiagramme UML de classes représentant les métadonnées et les données d’un statutDiagramme UML de classes représentant les métadonnées et les données d’un statut

Dans le cas de la parallélisation d’un générateur de nombres pseudo-aléatoires par paramétrisation: l’algorithme de paramétrisation est mis en œuvre pour générer des statuts pour le générateur de nombres pseudo-aléatoires correspondants à des sous-séries indépendantes entre elles. Ces statuts appartiennent chacun à des sous-sous-séries distinctes. Ces sous-séries sont regroupées dans un même groupe de sous-séries indépendantes. Chaque sous-série contient ainsi un unique statut permettant d’initialiser le générateur de nombres pseudo-aléatoires. Ce statut contient un attribut distance fixé arbitrairement à 0. Il est considéré comme le statut d’origine pour chacune des sous-séries. Une sous-série peut ensuite être parallélisée par découpage en séquence. Le générateur est déroulé à partir du statut origine d’une sous-série. Les statuts générés de la sorte appartiennent alors à la même sous-série mais ont un attribut distance différent comptabilisant le nombre d’itération de l’algorithme depuis le statut origine. Cet exemple est illustré par la Figure 38.

137

Cette notion de sous-série indépendante est utilisable avec toutes les techniques de parallélisation décrite dans le chapitre 1 de ce manuscrit. Par exemple, dans le cas d’une parallélisation par indexation de séquences. Les statuts sont générés aléatoirement, il est ainsi impossible de connaître le nombre d’itérations séparant chaque statut. On considère ces statuts comme menant à des sous-séries indépendantes comme dans le cas de la paramétrisation.

Figure Figure Figure

Figure 38383838 Utilisation des notions de groupes et de sousUtilisation des notions de groupes et de sousUtilisation des notions de groupes et de sous----séries pour une parallélisation d’un algorithme de Utilisation des notions de groupes et de sousséries pour une parallélisation d’un algorithme de séries pour une parallélisation d’un algorithme de séries pour une parallélisation d’un algorithme de génération de nombres pseudo

génération de nombres pseudo génération de nombres pseudo

génération de nombres pseudo----aléatoires par paramétrisation aléatoires par paramétrisation aléatoires par paramétrisation aléatoires par paramétrisation

Pour la parallélisation par saut de grenouille, un statut permet d’initialiser le générateur de façon à ce qu’il génère la sous-série voulue (un nombre tout les

n

de la série initiale du générateur de nombre pseudo-aléatoires parallélisé). Chaque statut constitue ainsi le statut origine d’une sous-série parmi les

n

sous-séries indépendantes. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="Status" type="s"/> <xsd:complexType name="s">

<xsd:sequence>

<xsd:element name="distance" type="xsd:integer" /> <xsd:element name="subSerie" type="xsd:string" />

<xsd:element name="group" type="xsd:string" /> <xsd:element name="data" type="dataJR" /> </xsd:sequence>

</xsd:complexType>

138

Code Code Code

Code 8888 Extrait du schéma XML vérifiant la conformité d’un statutExtrait du schéma XML vérifiant la conformité d’un statutExtrait du schéma XML vérifiant la conformité d’un statutExtrait du schéma XML vérifiant la conformité d’un statut XML pour l’algorithme James Random XML pour l’algorithme James Random XML pour l’algorithme James Random XML pour l’algorithme James Random (Partie commune)

(Partie commune)(Partie commune) (Partie commune)

Les statuts XML sont des modèles en XML de l’état d’un algorithme de génération de nombres pseudo-aléatoires. Le Code 8 présente un extrait du méta-modèle auquel doit être conforme tout statut XML générique pour l’algorithme James Random. Le tag XML data contient un attribut class indiquant le nom de l’algorithme de génération de nombres pseudo-aléatoires. A l’intérieur de la balise data se trouvent les données pour initialiser l’algorithme de génération de nombres pseudo-aléatoires.

<xsd:complexType name="data">

<xsd:attribute name="class" type="algo" /> </xsd:complexType> <xsd:simpleType name="algo"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="JR" /> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="dataJR"> <xsd:complexContent> <xsd:extension base="data"> <xsd:sequence> <xsd:element name="u"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="tabElement" minOccurs="97" maxOccurs="97" /> </xsd:sequence> </xsd:complexType> </xsd:element>

<xsd:element name="c" type="xsd:double" /> <xsd:element name="cd" type="xsd:double" /> <xsd:element name="cm" type="xsd:double" /> <xsd:element name="j97" type="xsd:int" /> </xsd:sequence>

</xsd:extension> </xsd:complexContent>

139 </xsd:complexType>

Code Code Code

Code 9999 Extrait du schéma XML vérifiant la conformité d’un statut XML pour l’algorithme James Random (Partie Extrait du schéma XML vérifiant la conformité d’un statut XML pour l’algorithme James Random (Partie Extrait du schéma XML vérifiant la conformité d’un statut XML pour l’algorithme James Random (Partie Extrait du schéma XML vérifiant la conformité d’un statut XML pour l’algorithme James Random (Partie propre à James Random)

propre à James Random) propre à James Random) propre à James Random)

Les trois éléments : distance, subSerie et data sont communs à l’ensemble des méta-modèles pour tous les statuts en XML, quelque soit l’algorithme de génération de nombres pseudo-aléatoires correspondant. Le tag distance est renseigné sous forme d’un entier, alors que les tags subSerie et group contiennent des chaînes de caractères. La partie variable, selon les méta-modèles, est la structure du tag data.

Le Code 9 présente un extrait du schéma XML définissant le méta-modèle pour la partie donnée des statuts génériques en XML pour le générateur James Random. Pour qu’un statut XML soit conforme à ce schéma, l’attribut class du tag data doit contenir la valeur « JR ». Et sa structure doit contenir une séquence u de 97 valeurs entières ainsi que 3 nombres doubles précisions : c, cd et cm ainsi qu’un entier j97. Cette structure correspond aux paramètres de l’algorithme décrit dans (James 1990).

<Status> <distance>15000000000000</distance> <subSerie>1</subSerie> <group>Demo</group> <data class="JR"> <u> <value index="0">0.27387481927871704</value> <value index="1">0.4186791181564331</value> <value index="96">0.9640908241271973</value> </u> <c>0.4831882119178772</c> <cd>0.45623308420181274</cd> <cm>0.9999998211860657</cm> <j97>7</j97> </data> </Status> Code Code Code

140

Un statut conforme à la description XML ci-dessus est présenté en Code 10. Sa distance par rapport au statut origine est de 15 000 milliards de tirages. Ce statut fait partie de la sous-série « 1 » qui appartient aux groupes « Demo » généré pour cet algorithme. On retrouve ensuite le tag XML data, qui comporte l’attribut class, dont la valeur est « JR » pour James Random . A l’intérieur de ce tag, sont présentes les données pour initialiser l’algorithme « James Random ». On y trouve un vecteur de 97 nombres doubles précisions, trois nombres doubles précisions et un nombre entier.

Bien que l’utilisation de statut constitue une bonne solution pour l’initialisation de générateurs de nombres pseudo-aléatoires en environnement distribué, l’utilisation de statuts est rudimentaire ou absente dans les bibliothèques de génération parallèle de nombres pseudo-aléatoires actuelle. Dans SPRNG (Mascagni et Srinivasan, Algorithm 806: SPRNG: A Scalable Library for Pseudorandom Number Generation 2000), la gestion des statuts est similaire à celle de CLHEP. La sérialisation se fait à l’aide de la méthode virtuelle pack_rng de la classe sprng. Celle-ci est redéfinie pour chaque générateur. La sauvegarde l’état du générateur se fait dans un format non documenté.

Dans la version actuelle (2.0) de SSJ (L'Ecuyer et Buist, Simulation in Java with SSJ 2005) la gestion des statuts est inexistante. Il n’y a pas de possibilité d’initialiser un générateur à partir d’un fichier ou d’une chaîne de caractère.

Dans la suite logicielle Dist, la classe statut, les classes data pour différents algorithmes de génération de nombres pseudo-aléatoires et quasi-aléatoires, ainsi que les mécanismes de sélection et de sérialisation des statuts sont implémentés dans la bibliothèque fondatrice DistTools. Celle-ci est présentée dans la partie suivante.

IV DistTools

DistTools est un progiciel qui implémente les fondations de la suite logicielle Dist. Cette partie présente les parties essentielles de DistTools. Elle décrit tout d’abord les classes représentant les statuts, qui contiennent les données pour l’initialisation et l’exécution des générateurs quasi-aléatoires et des générateurs pseudo-aléatoires parallèles. Elle expose ensuite les classes pour la gestion et l’interface avec une base de données de statuts. Elle présente enfin les classes de sérialisation et de sérialisation des objets statuts vers leurs représentations sous forme de chaînes de caractères.

141