• Aucun résultat trouvé

Outil de génération de séquences parallèles de nombres pseudo-aléatoires

Dans le document The DART-Europe E-theses Portal (Page 107-112)

Chapitre 2 : L’existant

IV.2 Outil de génération de séquences parallèles de nombres pseudo-aléatoires

IV.2.1 rStream

L’idée d’une interface unifiée orientée objet pour la génération parallèle de flux de nombres pseudo-aléatoires a été présentée dans (L’Ecuyer, Simard, et al. 2002). Elle a ensuite été implémentée dans la bibliothèque rStream (L'Ecuyer et Leydold, rstream:

Streams of random numbers for stochastic simulation 2005). rStream est intégrée dans

107

le logiciel de calcul statistique R 37 et constitue l’ensemble des classes dédiées à la génération de nombres pseudo-aléatoires. L’idée centrale de cette bibliothèque est de conceptualiser les flux de nombres pseudo-aléatoires comme des objets « stream » composés de multiples sous-flux ou « substream ».

Un seul algorithme de génération est implémenté dans cette bibliothèque. C’est un générateur à récurrences multiples sur 32 bits, parallélisé selon l’approche du découpage en séquence (cf. Chapitre 1) en utilisant une technique de division de cycle.

Les flux correspondent à des séquences de nombres espacées d’un nombre

z

de tirages.

Chaque flux est ensuite partitionné en

v

sous-flux espacés de

w

tirages38. IV.2.2 SSJ

SSJ (Stochastic Simulation in Java) (L'Ecuyer et Buist, Simulation in Java with SSJ 2005) est une bibliothèque pour simulation stochastique écrite en java et implémentée par P. L’Ecuyer. La partie génération de nombres pseudo-aléatoires parallèles de SSJ conceptualise les flux de nombres aléatoires de la même manière que dans rStream. Elle est plus riche que rStream et comporte plusieurs générateurs de nombres pseudo-aléatoires. Pour certains d’entre eux, aucune technique de division de cycle n’est disponible, comme pour le générateur Mersenne Twister 19937. L’instanciation des sous-séquences est alors effectuée en tirant au hasard une position dans le cycle de génération par la technique dite des séquences indexées. Dans ce cas le non chevauchement des sous-séquences n’est pas garanti. La distance minimale entre

n

statuts générés de la sorte est de 1 / n2 fois la période du générateur cible en moyenne (Wu et Huang 2006). Dans ce cas, les chevauchements sont hautement improbables du fait de la période de 219937 tirages du générateur.

IV.2.3 SPRNG

SPRNG, qui est présentée dans sa version 1.0 dans (Mascagni, Ceperley et Srinivasan, SPRNG: A Scalable Library for Pseudorandom Number Generation, 2000), est une bibliothèque de génération de nombres pseudo-aléatoires en environnement distribué.

Cette bibliothèque inclut :

• Plusieurs générateurs portables et testés.

• Une initialisation sans communications inter-processeur.

37 http://www.r-project.org

38 http://www.iro.umontreal.ca/~simardr/ssj/doc/pdf/guiderng.pdf

108

• Une reproductibilité en utilisant les paramètres pour discriminer les flux.

• Une reproductibilité en utilisant un unique germe global.

• Une minimisation des corrélations inter-processeurs grâce aux générateurs utilisés.

• Une interface uniforme en C, C++, FORTRAN et MPI.

• Une bonne extensibilité.

• Une suite de tests intégrée.

La technique de parallélisation des générateurs utilisée dans cette bibliothèque est la paramètrisation. Les autres méthodes ne sont délibérément pas prises en compte.

SPRNG implémente des générateurs linéaires congruentiels, des générateurs à registres à décalages bouclés, des générateurs à récursions multiples combinés et des générateurs de Fibonacci décalés. La version 4.0 est aujourd’hui disponible en C++ ou en Fortran39. IV.2.4 JAPARA

JAPARA (Coddington et Newell, JAPARA – A Java Parallel Random Number Library for High-Performance Computing 2004) est une bibliothèque implémentée pour étendre la librairie standard de java et notamment le paquetage java.util.random à la génération de séquences de nombres pseudo-aléatoires parallèles.

Les classes de génération de nombres pseudo-aléatoires du JDK (Java Development Toolkit) sont synchronisées. Elles sont ainsi utilisables dans un contexte multithread.

Cependant ce type d’utilisation d’un générateur aléatoire séquentiel présente tous les désavantages liés à l’approche de parallélisation dite « serveur central » présentée dans la partie III.3.1 du chapitre 1 de ce manuscrit. Pour palier à ce manque, la bibliotèque JAPARA propose trois générateurs de nombres pseudo-aléatoires parallèles implémentant l’API commune aux générateurs de nombres pseudo-aléatoires du paquetage de développement de java :

1. Un générateur congruentiel linéaire avec un modulo premier, recommandé dans (L’Ecuyer, Blouin et Couture, A Search for Good Multiple Recursive Generators 1993).

39 http://sprng.cs.fsu.edu

109

2. Un générateur à récursions multiples développé par L’Ecuyer (L’Ecuyer, Combined Multiple Recursive Generators 1996) (L’Ecuyer, Good Parameter and Implementations for Combined Multiple Recursive Random Number Generators 1999) et utilisé dans rStream.

3. Un générateur de Fibonacci décalé multiplicatif avec grand décalage présenté dans (Coddington, Mathew et Hawick, Interfaces and Implementations of Random Number Generators for Java Grande Applications 1999).

Les générateurs 1 et 2 sont parallélisés en utilisant une approche de découpage en séquence. Le troisième est parallélisé selon la technique des séquences indexées.

JAPARA permet la sauvegarde de l’état d’un générateur de nombres pseudo-aléatoires dans un fichier. Cependant il est conçu pour une utilisation dans laquelle plusieurs processus légers partagent un espace mémoire. Et il ne fournit pas de fonctionnalité pour initialiser facilement des générateurs qui l’exécutent sur des machines différentes.

JAPARA se conforme à l’API (Application Programming Interface) de la classe

java.util.Random conçue pour la génération de séquences de nombres pseudo-aléatoires en séquentiel. La génération des séquences de nombres pseudo-pseudo-aléatoires parallèles utilise un mécanisme de germes. Celui-ci ne permet pas de changer la méthode de parallélisation appliquée à un générateur séquentiel et limite l’utilisateur aux trois générateurs parallèles implémentés dans la bibliothèque.

IV.2.5 Des générateurs de nombres pseudo-aléatoires parallèles

En plus des bibliothèques de générateurs de nombres pseudo-aléatoires parallèles il existe des générateurs de nombres pseudo-aléatoires conçus, et implémentés, pour générer des nombres pseudo-aléatoires parallèles.

Parmi eux, on trouve PLFG (Parallel Lagged Fibonacci Generator) (Tan 2002), un générateur de nombres pseudo-aléatoires parallèle implémenté au dessus de MPI. Il utilise l’approche de parallélisation par indexation de séquence d’un générateur séquentiel de Fibonacci décalé recommandé par (D. E. Knuth, The art of computer programming, Seminumerical Algorithms 1997). Le générateur séquentiel présente une période de 2   (2l¡l¢Ÿg 1) tirages sur une architecture d’ordinateur 32 bits et de 2£p  (2l¡l¢Ÿg 1) tirages sur une architecture 64 bits. L’indexation des séquences

110

utilise le générateur Mersenne Twister 19937 (Matsumoto et Nishimura, Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator 1997) pour remplir la table d’historique de 23209 nombres du générateur de Fibonnaci décalé. Il est ainsi possible de générer l¤¥¥¦§l¡l¢Ÿxp séquences de nombres pseudo-aléatoires parallèles avec PLFG. Les auteurs présentent le fait que la période du générateur augmente avec l’augmentation de la taille des registres des machines comme une caractéristique « intéressante » de leur implémentation. Cependant le fait que le générateur ne produise pas les mêmes séquences de nombres sur différentes architectures pose problème pour son utilisation dans un environnement de calcul distribué hétérogène.

Un autre algorithme de génération de nombres pseudo-aléatoires en parallèle est basé sur le générateur Mersenne Twister. Ce générateur est de type

« Twisted Generalised Shift Feedback Register »

, un type particulier de générateur à registre à décalage bouclé. L’article (Matsumoto et Nishimura, Dynamic Creation of Pseudorandom Number Generators 2000) présente un algorithme de création de générateur de type Mersenne Twister (Matsumoto et Nishimura, Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator 1997). Cet algorithme permet de générer des paramètres pour un générateur de nombres pseudo-aléatoires de type Mersenne Twister générique. Les périodes des générateurs paramétrés s’échelonnent de 2521 à 244497. L’implémentation en C de l’algorithme40 permet de paramétrer jusqu’à 65536 générateurs pseudo-aléatoires générant des séquences de nombres hautement indépendantes en théorie.

IV.2.6 Récapitulatif

Le Tableau 5 récapitule les caractéristiques des bibliothèques de génération de nombres pseudo-aléatoires parallèle présentées dans cette partie.

40 http://www.math.sci.hiroshima-u.ac.jp/~m-mat

111

Tableau Tableau Tableau

Tableau 5555 Récapitulatif des caractéristiques des bibliothèques de génération de nombres pseudoRécapitulatif des caractéristiques des bibliothèques de génération de nombres pseudoRécapitulatif des caractéristiques des bibliothèques de génération de nombres pseudoRécapitulatif des caractéristiques des bibliothèques de génération de nombres pseudo----aléatoires aléatoires aléatoires aléatoires parallèle Les bibliothèques de génération de nombres pseudo-aléatoires parallèle permettent d’exécuter et de concevoir des simulations stochastiques distribuées. Pour faciliter la tâche des modélisateurs, plusieurs projets logiciels ont été développés pour distribuer automatiquement des simulations selon l’approche MRIP. Ces projets ont des objectifs différents et proposent différentes fonctionnalités comme : la prise en charge de la parallélisation du générateur de nombres pseudo-aléatoires ou la gestion d’un environnement complet d’exécution distribuée. Ces environnements sont présentés dans la partie suivante.

IV.3 Logiciel de distribution automatique des réplications

Dans le document The DART-Europe E-theses Portal (Page 107-112)