Réseaux de Kahn

From Wikipedia, the free encyclopedia

Les réseaux de Kahn (en anglais, Kahn process networks souvent abrégé KPNs, ou plus simplement process networks) sont un modèle de calcul distribué dans lequel un groupe de processus déterministes communiquent entre eux à travers des files non bornées. Le réseau ainsi constitué a un comportement déterministe indépendant des différents temps de calcul ou de la latence des échanges de message. Bien que le modèle ait été initialement développé pour modéliser les systèmes distribués, il s’est révélé adéquat pour modéliser des systèmes de traitement du signal. En conséquence, les réseaux de Kahn sont utilisés pour modéliser les systèmes embarqués et les systèmes distribués (notamment pour le calcul haute-performance). Les réseaux sont nommés d’après Gilles Kahn qui les a décrits en 1974 dans un article intitulé The semantics of a simple language for parallel programming[1] (littéralement : la sémantique d’un langage simple pour le calcul parallèle).

Une façon commune de représenter un réseau de Kahn. Les cercles représentent des processus dont l’un est identifié par la lettre P. Les arcs A, B and C sont des canaux de communication directionnels.

Cas particuliers

Les réseaux de Kahn sont un modèle standard pour décrire des systèmes de traitement du signal où les données en flux continu sont traitées séquentiellement par des processus s’exécutant en parallèle. Du fait que chaque processus est indépendant et que son comportement ne dépend que de l’état de ses canaux de communication, exécuter le modèle ne nécessite pas de parallélisme physique ou de système à temps partagé.

Dans le modèle, les processus communiquent à l’aide de files de messages non bornées. Les processus lisent et écrivent des données atomiques. L’écriture dans une file n’est pas bloquante, puisque les files sont infinies. En revanche, lire sur une file vide est bloquant. Un processus lisant sur une file vide est donc bloqué tant qu’il n’y a pas de donnée disponible. Les processus ne peuvent pas tester si une file est vide ou non, avant d’essayer de lire dedans, ce critère garantit le déterminisme quel que soit l’ordre d’exécution des processus. Pour un historique de données donné, un processus doit être déterministe, de sorte qu’il produise les mêmes sorties en fonction des entrées. Ainsi, le temps ou ordre d’exécution des processus ne peut pas modifier le résultat de chaque processus et le comportement global du réseau.

  • Un processus peut ne pas avoir d’entrées, ou ne rien lire de ses entrées, il agit en ce cas en tant que source pure de données ;
  • Un processus peut ne pas avoir de sorties, ou ne pas écrire sur ses sorties ;
  • Tester si une entrée est vide peut être autorisé pour des raisons d’optimisation, à la condition expresse que ça ne modifie pas les sorties. Par exemple, un processus doit lire l’entrée 1, puis l’entrée 2, avant d’écrire sa sortie. S’il sait que la file 1 est vide mais que la 2 est prête, il peut gagner du temps en lisant d’abord la valeur de la file 2 avant d’être bloqué en lecture de la file 1. Cela peut permettre de gagner du temps notamment si le temps de lecture est long (allocation de ressources par exemple).

Lien avec les réseaux de Petri

Modélisation en réseau de Petri du processus P de l’introduction

Prenons le réseau schématisé dans l’introduction. Supposons que le processus P est constitué de sorte qu’il lise d’abord sur l’entrée A (FIFO A), puis sur B, qu’il calcule quelque chose avec les deux données, puis l’écrit sur la sortie C, puis recommence. On peut modéliser ce comportement à l’aide du réseau de Petri présenté ci-contre. Le jeton situé dans la place PE resource force une exécution séquentielle du réseau de Kahn. Lorsque des données arrivent via les entrées A ou B, des jetons sont placés respectivement dans les places FIFO A et FIFO B. La transition Read A peut-être effectué lorsqu’il y a au moins un jeton dans FIFO A et un jeton dans PE resource. Le résultat de la transition rempli la place nécessaire à la transition Read B suivant le même principe. La dernière transition Compute/Write C correspond au calcul du processus P et à l’écriture sur sa sortie C. Le franchissement de cette dernière transition rempli à nouveau la place PE resource, permettant de franchir à nouveau la transition Read A dès qu’un jeton est disponible dans FIFO A.

Lien avec les automates finis

Un automate fini représentant un processus

Un processus de Kahn peut être modélisé à l’aide d’un automate fini de deux états, dont le schéma est donné ci-contre :

  • Active (en cours) : le processus calcule ou écrit sur une de ses sorties ;
  • Wait (en attente) : le processus est bloqué en lecture sur une entrée.

En supposant que l’automate lise des données correspondant au comportement du processus, il pourrait donc lire trois types d’éléments Compute (calculer), Read (lire) et Write token (écrire). Une lecture le mène forcément dans l’état Wait, duquel il ne peut sortir qu’en lisant Get token, signifiant que le canal de communication contient au moins une valeur.

Propriétés

Utilisations

Notes et références

Related Articles

Wikiwand AI