TP Alpa - Architectures systoliques "Multiplications de matrices rectangulaires"

Richard Ricordel
Sébastien Lubineau
Sébastien Matz

20 Janvier 2003


1. Introduction

Nous nous sommes fixé comme objectif pour ce TP, l'écriture d'un programme en Java permettant la simulation de divers architectures systoliques, en nous interessant plus particulièrement au cas de multiplications de matrices rectangulaires.

Nous avons préféré repartir de zéro, plutôt que de modifier l'exemple fourni. Bien que demandant un travail plus long, ce choix nous a permis de faire de gros progrès en Java et nous a laissé une plus grande liberté en ce qui concerne l'implémentation (nous avons pu choisir notre propre modèle objet face au problème proposé).

2. Quelques mots sur l'implémentation

La grande différence entre l'exemple fourni et notre implémentation se situe au niveau des threads. Dans l'exemple fourni, chaque cellule de l'architecture est géré par un "processus léger". Nous avons décidé de ne pas utilser ce style d'implémentation pour deux raisons:

A présent, nous allons présenter l'architecture logicielle de notre programme sous la forme de questions et de réponses:

Voilà, nous espérons que ces informations seront suffisantes pour comprendre la philosophie générale de notre simulateur. Il faut noter l'existence d'une classe Geometry qui permet de spécifier au simulateur l'aspect visuel des cellules et des liens et enfin la classe Simulator qui est la classe principale du programme.

3. Quelques exemples d'architectures

Voici quelques exemples d'architecture simulé à l'aide de notre programme (utilisation d'applets Java). Pour qu'ils fonctionnent, assurez-vous d'avoir un browser web compatible java 1.1).

Notez que les cellules apparaissent toujours en gris et que les liens apparaissent toujours en noir.

Architecture 1: "Accumulator"

Voici une première architecture qui réalise le cumul d'une liste de nombre entier. L'architecture Architecture_Accumulator est composé de deux cellules différentes:

Notez que la cellule de droite ignore les lettres qui prefixent certains nombres et que la lettre spécial "x" est vue comme un nombre 0.

Voici les fichiers Java servant à décrire cette architecture:

Architecture 2: "BufferDemo"

Voila une deuxième architecture simple Architecture_BufferDemo qui transmet une liste de nombre d'une cellule buffer à une autre. Cette architecture introduit une nouvelle cellule de type Cell_WriteBuffer servant à stocker des nombres. Notez que cette cellule n'est sensible qu'aux nombres préfixés par la lettre "b". La nouvelle cellule de type Cell_WriteBuffer est placé en bas et la cellule en haut est de type Cell_ReadBuffer.

Voici les fichiers Java servant à décrire cette architecture:

Multiplications de matrices rectangulaires

A présent, nous allons rentrer dans le vif du sujet et simuler des architectures réalisant des multiplications de matrices rectangulaires. Nous allons pour cela introduire un quatrième type de cellule Cell_MulAdd qui ressemble beaucoup à celle vue en cours. Pour bien comprendre comment elle fonctionne, voici une architecture de type Architecture_MatrixMul qui multiplie des matrices de taille (1 x 3) par des matrices de taille (3 x 1).

Notez que dès que la cellule Cell_MulAdd recoit un nombre préfixé par la lettre "g", elle transmet son état à son voisin de droite en le préfixant par la lettre "b".

Voici les fichiers Java servant à décrire cette architecture:

Voici d'autres exemples d'architectures de type Architecture_MatrixMul mais l'architecture est construite avec d'autres paramètres.

4. Fichiers sources et documentation

Fichiers sources:

Archive au format format tar.gz (contient les sources et le Makefile)

Documentation