Bulk Synchronous Parallel ML | |
![]() | |
Développeur | Laboratoire d'Informatique Fondamentale d'Orléans (LIFO) de l'Université d'Orléans, Laboratory of Algorithms, Complexity and Logic (LACL) de l'Université Paris XII |
---|---|
Environnements | GNU/Linux, Unix |
Type | Bibliothèque logicielle |
Licences | GNU LGPL 2.1 |
Site Web | http://frederic.loulergue.eu/research/bsmllib/ |
modifier |
BSML est une bibliothèque logicielle pour Objective Caml. Elle donne accès aux paramètres BSP de l'architecture sous-jacente, en particulier au nombre de processeurs p de la machine parallèle (accessible par le biais de bsp_p
de type int
).
Le type 'a Bsml.par
représente un vecteur parallèle de taille p contenant des objets de type 'a
.
Il est noté < v0,...,vp − 1 > où vi est la valeur de type 'a
sur le processeur i.
mkpar
val mkpar : (int -> 'a) -> 'a par
apply
val apply : ('a -> 'b) par -> 'a par -> 'b par
put
val put : (int -> 'a) par -> (int -> 'a) par
proj
(duale de mkpar
)val proj : 'a par -> int -> 'a
À partir de sa version 0.5, BSML propose une syntaxe alternative visant à améliorer la lisibilité des programmes. Cette syntaxe permet d'exécuter des instructions de manière locale sur chaque processeur, elle fournit une abstraction des primitives et simplifie l'accès aux valeurs locales de chaque processeur.
On utilise la syntaxe << >>
pour représenter une section locale, le code entre chevrons étant exécuté localement. Cette construction retourne un vecteur parallèle constitué des p exécutions locales.
(* réplication d'une valeur v non-parallèle sur chaque processeur *) << v >>
La syntaxe $v$
, disponible à l'intérieur des sections locales, donne accès à la composante locale du vecteur v
. On peut accéder au numéro de processeur local (depuis une section locale) à l'aide de la variable $this$
.
(* vecteur parallèle où chaque processeur stocke son numéro *) << $this$ >> (* application d'une fonction f non-parallèle à chaque composante d'un vecteur parallèle v *) << f $v$ >> (* application d'une fonction f parallèle à chaque composante d'un vecteur parallèle v *) << $f$ $v$ >>