DEVS/fr

= Parallel DEVS =

Cette extension, développée par B.P. Zeigler a pour rôle de fournir une technique simple de parallélisation des calculs. Les extensions traditionnelles utilisent des techniques où des branches de la hiérarchie de modèles sont répartis sur des calculateurs. Un point de synchronisation est alors nécessaire pour effectuer un test sur la causalité des événements. Les techniques de synchronisation sont décrites dans [zeigler00] avec des techniques  optimistes, de type Time Warp, et pessimistes. Ces techniques, bien que très bien décrites, n'ont pas été mise en place pour des raisons d'utilités dans les modèles que nous utilisons.

La méthode DEVS parallèle utilise une méthode simple de parallélisation des calculs en utilisant une parallélisation des modèles lorsqu'au dépilement d'une date dans l'échéancier, toutes les fonctions de transition internes ou externes des modèles sont effectuées en parallèle. B.P. Zeigler définit DEVS parallèle à partir de DEVS classique. Nous utilisons DEVS classique avec ports. Le modèle atomique utilisant DEVS parallèle avec ports et le suivant est :

$$DEVS = \langle X, Y, S, \delta_{ext}, \delta_{int}, \delta_{conf}, \lambda,ta \rangle$$

Où :
 * $$X = \{(p,v)|p~IPorts, v \in V_X$$ est l'ensemble des valeurs d'entrée avec :
 * $$IPorts$$ l'ensemble des ports d'entrée,
 * $$V_X$$ l'ensemble des valeurs possibles sur les ports d'entrée,
 * $$Y = \{(p,v)|p~OPorts, v \in V_X$$ est l'ensemble des valeurs de sortie avec :
 * $$OPorts$$ l'ensemble des ports de sortie,
 * $$V_Y$$ l'ensemble des valeurs possibles sur les ports de sortie,
 * $$S$$ est l'ensemble des états,
 * $$\delta_{int} : S \rightarrow S$$ la fonction de transition interne,
 * $$\delta_{ext} : Q \times X^b \rightarrow$$ la fonction de transition externe où :
 * $$X^b$$ est un ensemble du sac d'éléments finis de $$X$$
 * $$\delta_{conf} : S \times X^b \rightarrow $$ la fonction de conflit où :
 * $$\delta_{conf}(s, \emptyset) = \delta_{int}(s)$$
 * $$\lambda : S \rightarrow Y^b $$ la fonction de sortie
 * $$ta : S \rightarrow \mathbb{R}_0^+ \cup \infty $$ la fonction d'avancée du temps où :
 * $$Q = {(s,e)|s \in S,0 < e < ta(s)}$$
 * $$e$$ est le temps écoulé depuis le dernier changement d'état.

La différence entre DEVS parallèle et le DEVS classique est l'utilisation de sacs d'événements en entrée sur la fonction de transition externe. Un sac, ou bag dans la terminologie de B.P. Zeigler, est un ensemble d'événements non triés provenant d'une ou plusieurs sources différentes.

La fonction de conflit (B.P.~Zeigler, dans [zeigler00], utilise le terme confluent transition function que nous traduisons ici par fonction de conflit), $$\delta_{conf}$$, introduite par DEVS parallèle, donne la possibilité au modélisateur de choisir, pour un modèle, entre ses événements externes et internes s'ils ont lieu à la même date. Cette fonction remplace la fonction de sélection de DEVS classique.

La structure d'un modèle couplé dans DEVS parallèle est identique à celle définie précédemment. Les ensembles $$EIC$$ et $$EOC$$, respectivement les ensembles de connexions entre le modèle couplé et les sous-modèles, et les sous-modèles vers le modèle couplé, n'existent plus en raison de la mise à plat de la hiérarchie de modèle DEVS. De la même manière, la fonction de sortie, $$\lambda$$, du modèle couplé n'a plus lieu d'exister. La définition du modèle couplé est la suivante :

$$N = \langle D, \{M_d\}, IC \rangle$$

Où pour chaque $$d \in D$$ :
 * $$M_d$$ est un modèle atomique DEVS parallèle

La différence entre DEVS parallèle et DEVS classique intervient surtout dans la définition des fonctions de transitions. Pour simplifier la définition de ces fonctions, nous définissons les ensembles suivants : $$IMM(s) = \{d|\sigma_d = ta(s)\}$$ $$INF(s) = \{d|i \in IC_{i,d}, i \in IMM(s) \wedge x^b_d \notin \emptyset \}$$ avec $$x^b$$ un sac d'événements en entrée : $$x^b_d = \{IC_{i,d}(\lambda_i(s_i))|i \in IMM(s) \cap IC_{i,d}\}$$ $$CONF(s) = IMM(s) \cap INF(s)$$ $$INT(s) = IMM(s)-INF(s)$$ $$EXT(s) = INF(s)-IMM(s)$$
 * Les modèles imminents, $$IMM(s)$$ dont des sorties vont être générées juste avant la prochaine transition :
 * Ensemble des modèles recevant au moins un message en entrée :
 * Un sous-ensemble des modèles de $$IMM(s)$$ recevant au moins une entrée et effectuant une transition interne :
 * Un sous-ensemble des modèles de $$IMM(s)$$ qui n'ont pas de messages d'entrée :
 * Un sous-ensemble des modèles de $IMM(s)$ recevant un événement en entrée mais n'effectuant de transition interne :

La fonction d'avancée du temps se traduit alors : $$ta(s) = minimum\{\sigma_d|d \in D\}$$ Où :
 * $$s \in S$$
 * $$\sigma_d = ta(s_d) - e_d$$

La fonction de transition interne résultante est le compromis des quatre types de transition, transition internes $$INT(s)$$, externes $$EXT(s)$$ et en conflit $$CONF(s)$$. Nous définissons :

$$\delta_{int}(s) = (\ldots,(s'_d,e'_d), \ldots)$$ Où :
 * $$(s'_d,e'_d) = (\delta_{int,d}(s_d),0) pour d \in INT(s)$$
 * $$(s'_d,e'_d) = (\delta_{ext,d}(s_d,e_d + ta(s),x^b_d),0)$$ pour $$d \in EXT(s)$$
 * $$(s'_d,e'_d) = (\delta_{conf,d}(s_d,x^b_d),0)$$ pour $$d \in CONF(s)$$
 * $$(s'_d,e'_d) = (s_d,e_d + ta(s))$$ dans les autres cas

La fonction de transition externe découpe le sac d'événements $$x^b$$ vers les modèles influencés par l'événements $$x^b_d$$. Elle est définie comme :

$$\delta_{ext}(s,e,x^b) = (\ldots,(s'_d,e'_d), \ldots)$$ Où :
 * $$0 < e < ta(s)$$
 * $$(s'_d,e'_d) = (\delta_{ext,d}(s_d,e_d + e, x^b_d),0)$$ pour $$d \in EIC$$
 * $$(s'_d,e'_d) = (s_d,e_d + e)(s))$$ dans les autres cas

Enfin, la fonction de conflit est appelée quant un modèle possède un événement interne et au moins un événement externe à la même date. À la différence de DEVS classique qui doit prendre en compte les événements des connexions de l'ensemble $$EIC$$, la fonction de conflit, dans un environnement à plat de la hiérarchie, se traduit de la même manière que la fonction de transition interne : $$\delta_{inf}(s,x^b) = (\ldots, (s'_d,e'_d),\ldots)$$ Où :
 * $$(s'_d,e'_d) = (\delta_{int,d}(s_d),0)$$ pour $$d \in INT(s)$$
 * $$(s'_d,e'_d) = (\delta_{ext,d}(s_d,e_d + ta(s),x^b_d),0)$$ pour $$d \in EXT(s)$$
 * $$(s'_d,e'_d) = (\delta_{conf,d}s_d,x^b_d),0)$$ pour $$d \in CONF(s)$$
 * $$(s'_d,e'_d) = (s_d,e_d + ta(s))$$ dans les autres cas