• Aucun résultat trouvé

Les fichiers statuts dans CLHEP

Dans le document The DART-Europe E-theses Portal (Page 130-134)

Chapitre 3: Propositions

III.1 Les fichiers statuts dans CLHEP

Le format d’un statut est généralement lié à la bibliothèque de génération de nombres pseudo-aléatoires avec laquelle il est généré. Le Code 4 présente un fichier statuts généré en appelant saveStatus sur une instance de la classe MTwistEngine de la bibliothèque d’outil pour la physique des hautes énergie CLHEP (A Class Library for High Energy Physics) (Lönnblad 1994). Cette classe implémente l’algorithme Mersenne Twister 19937 (Matsumoto et Nishimura, Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator 1997).

9876

264775515 4114332253 1693459191 1297443001 1812818420 390720553

1760801786 111913646 1261209382 1738580187 1759767223 54905799 553355281 39659507 497259375 1725209625 352772144 1691117641 1506880178 1389450757 960780497 582165663 1132749798 420530616 323055843 612563404 1731170488 1036460796 1128296847 964758519 794943841 731690510 984819129 764846241 1253276905 367050022 1452395346 1452191025 1595612734 1190923226

1888268903 510135841 458398934 952243819 1812103019 221128356 39010554 48997976 1460767063 213893624 1146382177 1202087495 544350193 122224664 1320665146 1437121558 1645892194 1743285185 1085054950 1111073014

130

537523505 1556959762 1866178558 588707324 1241404564 1415811824 1759681885 1313644106 999414262 1845651540 329184860 1554926281

2095295052 174189579 792553342 193112426 366963614 1744436161 742314800 759227466 1921816375 369528592 413617915 513709437 1130960544 1584124393 1967512242 1619392283 362674046 1245829496 1488080741 142998155

1082210214 … 3828382448 2436847781 128

Code Code Code

Code 4444 Extrait d’un statut généré par la classe MTwistEngine de CLHEPExtrait d’un statut généré par la classe MTwistEngine de CLHEPExtrait d’un statut généré par la classe MTwistEngine de CLHEPExtrait d’un statut généré par la classe MTwistEngine de CLHEP

Le statut expose les paramètres de l’algorithme Mersenne Twister 19937, cependant il ne contient aucune méta-information pour donner du sens à ces données. Dans sa version 32 bits, cet algorithme travaille sur un tableau de 624 entiers codés sur 32 bits, et utilise un entier qui correspond à l’index d’un nombre dans le tableau. On peut comprendre sans regarder le code source que les nombres de la deuxième ligne qui sont au nombre de 624 sont des représentations ASCII des entiers du tableau interne à l’algorithme et que le nombre présent à la troisième ligne du fichier est l’indice courant dans le tableau. Il faut étudier le code source de CLHEP pour comprendre l’intérêt du nombre présent à la première ligne. Celui-ci correspond à un code interne à CLHEP permettant de vérifier que le fichier est bien un statut pour la classe MTwistEngine.

La compréhension de la structure des statuts générés par la classe de CLHEP

HepJamesRandom, présentée dans le Code 5, est encore plus complexe. Cette classe implémente l’algorithme James Random (James 1990). Cet algorithme est initialisé en utilisant un tableau de 97 nombres doubles précisions, ainsi que trois nombres doubles précisions et un entier sur 32 bits. Après une étude approfondie du code source et un effort de rétro-ingénierie, on comprend que les nombres à virgule flottante en double précision sur 64 bits sont sauvegardés sous la forme d’une paire d’entiers non signés sur 32 bits.

131

Code 5555 Extrait d’un statut généré par la classe HepJamesRandom de CLHEPExtrait d’un statut généré par la classe HepJamesRandom de CLHEPExtrait d’un statut généré par la classe HepJamesRandom de CLHEPExtrait d’un statut généré par la classe HepJamesRandom de CLHEP

Lors du passage de la version 2.0.1.2 à la version 2.0.2.0, le format des statuts pour la classe James Random de CLHEP à été modifié. Le Code 6 présente l’ancien format, dans lequel le tableau de 97 nombres à virgule flottante double précision est codé selon une représentation ASCII avec un double par ligne. Même si une option de compilation permet d’utiliser l’ancien format avec les nouvelles versions de CLHEP, le nouveau format est par expérience incompatible avec les anciennes versions de CLHEP.

0

Code 6666 Extrait d’un statut généré par la classe HepJamesRandom de CLHEP pour les versions antérieures à 2.0.2.0Extrait d’un statut généré par la classe HepJamesRandom de CLHEP pour les versions antérieures à 2.0.2.0Extrait d’un statut généré par la classe HepJamesRandom de CLHEP pour les versions antérieures à 2.0.2.0Extrait d’un statut généré par la classe HepJamesRandom de CLHEP pour les versions antérieures à 2.0.2.0

Enfin, mauvaise nouvelle pour ceux qui avaient passé du temps à paralléliser les générateurs de la bibliothèque CLHEP (moi entre autre) et capitalisé sur la création de statuts aux formats CLHEP : cette bibliothèque ne sera plus développée mais simplement maintenue !

Les algorithmes de génération de nombres pseudo-aléatoires de la bibliothèque CLHEP sont implémentés dans des classes regroupées dans le paquetage « Random ». La Figure 33 présente un extrait de la hiérarchie des classes de ce paquetage. Les classes qui implémentent les algorithmes de génération de nombres pseudo-aléatoires héritent

132

de la superclasse HepRandomEngine. Les sous-classes présentées dans le diagramme correspondent aux implémentations des algorithmes :

• Ranecu (L'Ecuyer, Efficient and Portable Combined Random Number Generators 1988)

• Mersenne Twister 19937 dans sa version 32 bits (Matsumoto et Nishimura, Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator 1997)

• James Random (James 1990)

Chaque algorithme de ce paquetage permet de générer une séquence cyclique de nombres pseudo-aléatoires et possède son propre format de statut. Chacune de ces classes redéfinit la méthode saveStatus, produisant des formats de statut très différents les uns des autres et sans information commune.

Figure Figure Figure

Figure 333333 Diagramme de classe UML présentant un extrait de l’architecture du paquetage Random de CLHEP33Diagramme de classe UML présentant un extrait de l’architecture du paquetage Random de CLHEPDiagramme de classe UML présentant un extrait de l’architecture du paquetage Random de CLHEPDiagramme de classe UML présentant un extrait de l’architecture du paquetage Random de CLHEP

Dans CLHEP, lors de la restauration de l’état d’un générateur de nombres pseudo-aléatoires, un statut contenu dans un fichier dans un format dépendant d’un algorithme est lu par un objet instance d’une classe qui implémente cet algorithme de génération de nombres pseudo-aléatoires (Figure 34). Cette classe est ensuite utilisée pour générer une séquence spécifique de nombres pseudo-aléatoires. Le format du statut est ainsi spécifique de l’algorithme mis en œuvre.

133

Figure Figure Figure

Figure 343434 Diagramme UML de collaboration entre générateur et statut dans les implémentations d’algorithme de 34Diagramme UML de collaboration entre générateur et statut dans les implémentations d’algorithme de Diagramme UML de collaboration entre générateur et statut dans les implémentations d’algorithme de Diagramme UML de collaboration entre générateur et statut dans les implémentations d’algorithme de génération de nombres pseudo

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

génération de nombres pseudo----aléatoires comme CLHEPaléatoires comme CLHEPaléatoires comme CLHEP aléatoires comme CLHEP

En résumé les statuts générés par CLHEP n’ont pas de méta-informations qui les rendent compréhensibles, ne contiennent pas de méta-information sur la séquence de nombres pseudo-aléatoires qu’ils permettent de générer et ont un format propre à une classe.

Dans le document The DART-Europe E-theses Portal (Page 130-134)