# Etude d'une machine modulaire de simulation de réseaux neuromimétiques: conception d'un circuit intégré reconfigurable avec primitive d'apprentissage.

Nicolas A Mauduit

## ► To cite this version:

Nicolas A Mauduit. Etude d'une machine modulaire de simulation de réseaux neuromimétiques: conception d'un circuit intégré reconfigurable avec primitive d'apprentissage. Sciences de l'ingénieur [physics]. Université de Paris Sud Centre Orsay, 1990. Français. NNT: 1990PA112244. tel-04160940v2

HAL Id: tel-04160940

https://theses.hal.science/tel-04160940v2

Submitted on 8 Sep 2023

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
ORSAY
N° d'ordre :

UNIVERSITE DE PARIS-SUD
CENTRE ORSAY

THESE

Présentée pour obtenir le titre de
DOCTEUR EN SCIENCE
par

Nicolas MAUDUIT

SUJET :

Etude d'une machine modulaire de simulation de réseaux neuromimétiques:
conception d'un circuit intégré reconfigurable avec primitive d'apprentissage.

Soutenue le 27 septembre 1990 devant la Commission d'examen

MM. René Castagné      Président
Jean Aubert
Francis Devos
Jean-Bernard Theeten
Jean-Jacques Niez      Rapporteur
Philip Treleaven       Rapporteur
Remerciements

J'adresse mes sincères remerciements à:

Jean Gobert et Jean-Bernard Theeten, qui m'ont témoigné leur confiance en m'accueillant dans la division 31 (Architecture des Microprocesseurs) des Laboratoires d'Electronique Philips, et accordé une grande liberté d'action,

Francis Devos, professeur encadrant mes travaux, dont les conseils ont marqué les points charnière du déroulement du projet,

Marc Duranton, ingénieur responsable de l'étude, qui m'a guidé dans les différentes étapes de mon travail,

l'ensemble des membres de la division 31, qui m'ont "supporté" tout au long de mon séjour parmi eux, entretenant une ambiance de travail chaleureuse et fructueuse,

aux membres de la division 21 (Recherche Exploratoire) dont les travaux sur la théorie des réseaux de neurones et les algorithmes ont exercé une influence déterminante sur les choix des primitives à implémenter et des paramètres caractérisant le circuit, ainsi que sur le potentiel d'utilisation de cette architecture,

aux membres de la division 32 (Systèmes d'Imagerie Professionnelle) dont les travaux utilisant les réseaux de neurones ont permis de tester l'architecture sur des applications significatives,

aux équipes de VLSI Technology à Palaiseau et de IMSC à Issy-les-Moulineaux dont le soutien durant la phase de conception a permis la réalisation du composant, et à la société Tektronix pour son test,

la société Telmat, avec la collaboration de laquelle la réalisation d'une machine de simulation contenant de nombreux circuits et bénéficiant d'un environnement de programmation est devenue possible.
<table><tr><td>3.2</td><td>Evaluations de niveau circuit</td><td>53</td></tr><tr><td>3.2.1</td><td>La Mémoire Synaptique</td><td>55</td></tr><tr><td>3.2.2</td><td>Les multiplieurs</td><td>56</td></tr><tr><td>3.2.3</td><td>L'arbre d'additionneurs</td><td>59</td></tr><tr><td>3.2.4</td><td>Découplage des éléments mémorisants</td><td>70</td></tr><tr><td>3.2.5</td><td>Le registre d'apprentissage</td><td>71</td></tr><tr><td>3.2.6</td><td>Unité Arithmétique et Logique</td><td>73</td></tr><tr><td>3.2.7</td><td>Bus dédiés</td><td>73</td></tr><tr><td>3.3</td><td>Evaluations de niveau système</td><td>74</td></tr><tr><td>3.3.1</td><td>Systèmes à un circuit</td><td>76</td></tr><tr><td>3.3.2</td><td>Systèmes à plusieurs circuits</td><td>84</td></tr></table>

<table><tr><td>4</td><td>Architecture retenue</td><td>89</td></tr><tr><td>4.1</td><td>Détails de l'architecture interne du circuit</td><td>90</td></tr><tr><td>4.1.1</td><td>Les opérateurs</td><td>93</td></tr><tr><td>4.1.2</td><td>Le test</td><td>106</td></tr><tr><td>4.2</td><td>Les possibilités d'utilisation du circuit</td><td>107</td></tr><tr><td>4.2.1</td><td>Architectures d'usage général</td><td>107</td></tr><tr><td>4.2.2</td><td>Architectures optimisées pour une application</td><td>110</td></tr><tr><td>4.3</td><td>Performances envisageables</td><td>111</td></tr><tr><td>4.3.1</td><td>Circuits contrôlés par un Transputer</td><td>112</td></tr><tr><td>4.3.2</td><td>Circuits contrôlés par un microprocesseur classique</td><td>114</td></tr><tr><td>4.3.3</td><td>Circuits contrôlés par un DSP</td><td>115</td></tr><tr><td>4.3.4</td><td>Circuits contrôlés par un RISC</td><td>115</td></tr><tr><td>4.3.5</td><td>Architectures dédiées</td><td>116</td></tr></table>

<table><tr><td>5</td><td>Résultats obtenus</td><td>119</td></tr><tr><td>5.1</td><td>Le circuit</td><td>120</td></tr><tr><td>5.1.1</td><td>Détails concernant la phase de conception</td><td>120</td></tr><tr><td>5.1.2</td><td>Test de 15 prototypes à vitesse nominale</td><td>123</td></tr><tr><td>5.1.3</td><td>Erreurs de conception</td><td>124</td></tr><tr><td>5.1.4</td><td>Mesure de l'activité du circuit</td><td>126</td></tr><tr><td>5.2</td><td>Les cartes</td><td>127</td></tr><tr><td>5.2.1</td><td>Test fonctionnel: une carte PC</td><td>128</td></tr><tr><td>5.2.2</td><td>Test d'architecture: une carte Tnode</td><td>129</td></tr><tr><td>5.3</td><td>La programmation d'un système de circuits</td><td>130</td></tr><tr><td>5.3.1</td><td>Programmation du circuit en OCCAM sur les cartes de test</td><td>130</td></tr><tr><td>5.3.2</td><td>Contrôle parallèle de plusieurs circuits</td><td>131</td></tr></table>
<table><tbody><tr><td>5.4</td><td>Mise en œuvre d'applications</td><td>132</td></tr><tr><td>5.4.1</td><td>Compression d'image par analyse en composantes principales</td><td>132</td></tr><tr><td>5.4.2</td><td>Reconnaissance de forme, apprentissage par rétropropagation du gradient</td><td>135</td></tr><tr><td><b>6</b></td><td><b>Perspectives d'évolution</b></td><td><b>141</b></td></tr><tr><td>6.1</td><td>Exploitation des résultats</td><td>142</td></tr><tr><td>6.2</td><td>Architectures de systèmes basées sur ce circuit</td><td>143</td></tr><tr><td>6.3</td><td>Elargissements possibles du fonctionnement du circuit</td><td>143</td></tr><tr><td>6.3.1</td><td>Elargissement du domaine d'utilisation</td><td>143</td></tr><tr><td>6.3.2</td><td>Elargissement des fonctionnalités</td><td>144</td></tr><tr><td>6.4</td><td>Une machine neuronale: l'environnement logiciel</td><td>144</td></tr><tr><td><b>7</b></td><td><b>Conclusion</b></td><td><b>147</b></td></tr><tr><td>7.1</td><td>Bilan de la plate-forme de travail obtenue</td><td>148</td></tr><tr><td>7.2</td><td>Perspectives d'évolution du sujet de recherche</td><td>150</td></tr><tr><td>7.3</td><td>Perspectives concernant la plate-forme de travail</td><td>151</td></tr><tr><td><b>A</b></td><td><b>Mécanisme de contrôle de LNEURO</b></td><td><b>155</b></td></tr><tr><td>A.1</td><td>Caractéristiques électriques du circuit LNEURO 1.0</td><td>155</td></tr><tr><td>A.1.1</td><td>Jeu d'instruction du circuit LNEURO 1.0</td><td>156</td></tr><tr><td>A.1.2</td><td>BUS d'entrée/sortie dédiés</td><td>157</td></tr><tr><td>A.1.3</td><td>Commandes accessibles par un contrôle externe</td><td>157</td></tr><tr><td>A.2</td><td>Jeu d'instruction du circuit LNEURO 1.0</td><td>158</td></tr><tr><td>A.2.1</td><td>Data transfer instructions</td><td>158</td></tr><tr><td>A.2.2</td><td>Learning instructions</td><td>160</td></tr><tr><td>A.2.3</td><td>Resolution instructions</td><td>163</td></tr><tr><td>A.2.4</td><td>General purpose instructions</td><td>164</td></tr><tr><td><b>B</b></td><td><b>LNEURO 1.0 dans une carte SuperNode</b></td><td><b>167</b></td></tr><tr><td><b>C</b></td><td><b>Exemples de programmation</b></td><td><b>173</b></td></tr></tbody></table>
Liste des Figures

<table><tr><td>1.1</td><td>Représentation schématique d'un réseau de neurones</td><td>13</td></tr><tr><td>1.2</td><td>Diverses architectures de réseaux de neurones</td><td>13</td></tr><tr><td>2.1</td><td>Circuit analogique à base de résistances</td><td>21</td></tr><tr><td>2.2</td><td>Mécanisme de transfert de charge d'une synapse CCD</td><td>22</td></tr><tr><td>2.3</td><td>Principe de fonctionnement d'un réseau de neurones optiques</td><td>24</td></tr><tr><td>2.4</td><td>Principe de fonctionnement d'un réseau de neurones à train d'impulsions</td><td>25</td></tr><tr><td>2.5</td><td>Domaines d'utilisation de différentes architectures de neuro-ordinateurs</td><td>32</td></tr><tr><td>3.1</td><td>Formes de parallélisme</td><td>50</td></tr><tr><td>3.2</td><td>Parallélisme avec plusieurs circuits</td><td>52</td></tr><tr><td>3.3</td><td>Diagramme fonctionnel à l'origine du module VLSI</td><td>54</td></tr><tr><td>3.4</td><td>Multiplieur bit-série avec décalage du résultat partiel</td><td>57</td></tr><tr><td>3.5</td><td>Multiplieur bit-série avec décalage du multiplicande</td><td>58</td></tr><tr><td>3.6</td><td>Additionneur à retenue série</td><td>60</td></tr><tr><td>3.7</td><td>Arbre binaire d'additionneurs classique</td><td>61</td></tr><tr><td>3.8</td><td>Diagramme de propagation dans un arbre d'additionneurs série</td><td>64</td></tr><tr><td>3.9</td><td>Diagramme de propagation dans un arbre d'additionneurs avec "Carry Lookahead"</td><td>65</td></tr><tr><td>3.10</td><td>Propagation dans un additionneur "mou" de cinq nombres de 7 bits</td><td>66</td></tr><tr><td>3.11</td><td>Propagation dans un additionneur de cinq entiers de 7 bits "mou", généralisé à des opérateurs à quatre entrées</td><td>68</td></tr><tr><td>3.12</td><td>Cycle de fonctionnement du Transputer INMOS</td><td>77</td></tr><tr><td>3.13</td><td>Cycle pour 1 neurone binaire, contrôle par Transputer seul, multiplieur 1 bit</td><td>79</td></tr></table>
<table>
  <tbody>
    <tr>
      <td>3.14</td>
      <td>Cycle pour 1 neurone binaire, contrôle par Transputer + automatode seuillage et mise à jour, multiplieur 1 bit</td>
      <td>79</td>
    </tr>
    <tr>
      <td>3.15</td>
      <td>Cycle pour neurone 8 bits, contrôle par Transputer + automatode seuillage et mise à jour, multiplieur 2 bits</td>
      <td>80</td>
    </tr>
    <tr>
      <td>3.16</td>
      <td>Cycle pour neurone 8 bits, contrôle par Transputer + mémoire programme + automatode seuillage et mise à jour, multiplieur 1 bit</td>
      <td>81</td>
    </tr>
    <tr>
      <td>4.1</td>
      <td>Diagramme fonctionnel du circuit LNEURO 1.0</td>
      <td>91</td>
    </tr>
    <tr>
      <td>4.2</td>
      <td>Schéma du chemin de données pour un groupe de quatre neurones</td>
      <td>96</td>
    </tr>
    <tr>
      <td>4.3</td>
      <td>Schéma de principe d'une unité d'apprentissage</td>
      <td>97</td>
    </tr>
    <tr>
      <td>4.4</td>
      <td>Schéma du Registre d'Etat de Neurones</td>
      <td>98</td>
    </tr>
    <tr>
      <td>4.5</td>
      <td>Schéma du bloc de quatre neurones</td>
      <td>100</td>
    </tr>
    <tr>
      <td>4.6</td>
      <td>Schéma de principe d'une fonction d'apprentissage pour un coefficient synaptique</td>
      <td>101</td>
    </tr>
    <tr>
      <td>4.7</td>
      <td>Un schéma d'assemblage de circuits et de Transputers</td>
      <td>109</td>
    </tr>
    <tr>
      <td>4.8</td>
      <td>Systèmes comportant des automates externes</td>
      <td>110</td>
    </tr>
    <tr>
      <td>4.9</td>
      <td>Système dédié à une application</td>
      <td>111</td>
    </tr>
    <tr>
      <td>4.10</td>
      <td>Diagramme surface/temps du circuit LNEURO 1.0</td>
      <td>112</td>
    </tr>
    <tr>
      <td>5.1</td>
      <td>Masques de LNEURO 1.0</td>
      <td>122</td>
    </tr>
    <tr>
      <td>5.2</td>
      <td>TRAMs INMOS sur leur carte mère</td>
      <td>128</td>
    </tr>
    <tr>
      <td>5.3</td>
      <td>Image originale</td>
      <td>134</td>
    </tr>
    <tr>
      <td>5.4</td>
      <td>Image décodée</td>
      <td>135</td>
    </tr>
    <tr>
      <td>5.5</td>
      <td>Image différence, amplifiée 16 fois</td>
      <td>136</td>
    </tr>
    <tr>
      <td>B.1</td>
      <td>Cycle du Transputer INMOS</td>
      <td>167</td>
    </tr>
    <tr>
      <td>B.2</td>
      <td>Schéma d'un module pour carte mère TNode, partie Transputer</td>
      <td>169</td>
    </tr>
    <tr>
      <td>B.3</td>
      <td>Schéma d'un module pour carte mère TNode, partie Transputer</td>
      <td>170</td>
    </tr>
    <tr>
      <td>B.4</td>
      <td>Schéma d'un module pour carte mère TNode, partie LNEURO</td>
      <td>171</td>
    </tr>
    <tr>
      <td>B.5</td>
      <td>Schéma d'un module pour carte mère TNode, partie LNEURO</td>
      <td>172</td>
    </tr>
  </tbody>
</table>
Liste des Tableaux

<table><tr><td>2.1</td><td>Performances de quelques machines neuronales</td><td>36</td></tr><tr><td>2.2</td><td>Performances de quelques ordinateurs sur des simulations neuronales</td><td>37</td></tr><tr><td>3.1</td><td>Table de l'algorithme de multiplication par recodage en paires de bits</td><td>59</td></tr><tr><td>3.2</td><td>Addition 30 + 177 par sommation conditionnelle</td><td>62</td></tr><tr><td>3.3</td><td>Propagation dans différentes architectures d'arbres d'additionneurs</td><td>64</td></tr><tr><td>3.4</td><td>Simulation de propagation dans des arbres d'additionneurs en cellules précaractérisées</td><td>67</td></tr><tr><td>3.5</td><td>Paramètres de l'évaluation surface/temps des opérateurs</td><td>75</td></tr><tr><td>3.6</td><td>Evaluation surface/temps des opérateurs pour un circuit</td><td>82</td></tr><tr><td>3.7</td><td>Evaluation surface/temps des opérateurs pour un circuit (suite)</td><td>83</td></tr><tr><td>3.8</td><td>Evaluation en Mconnexions/s d'options d'architecture pour la phase de résolution</td><td>84</td></tr><tr><td>3.9</td><td>Evaluation en Mconnexions/s d'options d'architecture pour la phase d'apprentissage</td><td>85</td></tr><tr><td>4.1</td><td>Evaluation d'architectures classiques en NIPS</td><td>112</td></tr></table>
# Chapitre 1

## Introduction
## 1.1 Présentation du domaine

De grands espoirs sont fondés sur les différentes approches du parallélisme tant pour dépasser les performances des machines se conformant à l'architecture de Von Neuman, que pour aborder certains problèmes selon une approche différente de l'algorithmique classique, où l'émergence d'une solution est l'aboutissement d'un processus collectif. Au sein du mouvement actuel de développement des architectures parallèles, les réseaux de neurones formels ont subi un essor tout particulier, résultant d'un demi-siècle d'études pluridisciplinaires [McCu 43]. Ce regain d'intérêt est dû en partie à l'évolution des algorithmes d'apprentissage [Hebb 49, Rose 62, Min 69] [Koho 77, Ama 77, Hop 82, McCl 86, LeC 87] qui permettent de maîtriser de mieux en mieux le fonctionnement de ce type d'automates, ainsi qu'au développement des moyens de simulation qui autorisent l'utilisation de réseaux de plus en plus importants.

Les réseaux de neurones formels peuvent être appréhendés comme des assemblages d'automates reproduisant de manière simplifiée le fonctionnement des neurones biologiques. Selon ce modèle, le corps de la cellule somme les influences des cellules qui sont connectées à ses dendrites à travers des synapses. Les synapses modulent l'activité des cellules amont, selon des coefficients synaptiques qui sont le résultat d'une phase d'apprentissage, et peuvent être excitatrices ou inhibitrices. Ensuite, si la somme des influences afférentes dépasse le seuil requis, le corps déclenche la transmission de son état d'excitation vers d'autres cellules à travers son axone: elles reçoivent ce signal par une de leurs dendrites qui lui est connectée.

Ces automates modélisant les neurones peuvent être assemblés selon des architectures nombreuses, dont on peut distinguer les familles suivantes:

* Les réseaux pleinement connectés, où la sortie d'un neurone est connectée à tous les neurones du réseau (Hebb, Kohonen...). Fonctionnalité: mémoire associative, regroupement de points, auto-organisation...

* Les réseaux en couches, où la sortie d'un neurone n'est connectée qu'à des entrées de neurones appartenant à la couche suivante (perceptrons, réseaux en arbres...). La fonctionnalité d'un perceptron non linéaire à trois couches est celle d'un séparateur non convexe dans l'espace de ses entrées,

* Les réseaux récurrents, qui sont principalement des réseaux en couches
<figure><img src="image_2.png" /><figcaption>Figure 1.1: Représentation schématique d'un réseau de neurones</figcaption></figure>

dont certaines entrées sont connectées à des sorties des couches suivantes,

* Les réseaux avec délais temporels, où les neurones sont mis à jour à des instants différents à partir d'un état donné (par opposition au mode synchrone de mise à jour),

* Les réseaux d'ordre supérieur. Dans ce type de réseaux, les synapses prennent en compte les signaux provenant de plusieurs neurones pour propager une excitation vers l'entrée d'un neurone.

<figure><img src="image_3.png" /><figcaption>Figure 1.2: Diverses architectures de réseaux de neurones</figcaption></figure>
### 1.1.1 Modèles mathématiques

Deux modes de comportement seront distingués dans cette étude des modèles de réseaux de neurones: la relaxation (ou résolution) et l'apprentissage.

Le mode de relaxation est l'établissement de l'état vers lequel un réseau de neurones se dirige après une perturbation de ses entrées. Dans le mode de relaxation, le comportement des réseaux neuronaux étudiés est généralement décrit par l'équation suivante: si $C_{ij}$ représente le coefficient synaptique pondérant la connexion du neurone $j$ d'état $V_j$ au neurone $i$ d'état $V_i$, pour un ensemble de $N$ neurones afférents au neurone considéré, et $f$ une fonction de seuillage, on obtient:

$$V_j = f\left(\sum_{i=1}^{N} C_{ij} * V_i + \theta_i\right) \qquad (1)$$

(on peut remarquer que le terme $\theta_i$ peut être remplacé par la contribution d'un neurone du réseau constamment actif et connecté à chaque neurone).

Le mode d'apprentissage vise à déterminer, à partir d'exemples prototypes, les valeurs des coefficients synaptiques qui confèrent au réseau de neurones le comportement adéquat en mode de relaxation. Une certaine généralisation est attendue pour étendre le comportement appris à des exemples différents des prototypes ayant servi à l'apprentissage. De nombreux algorithmes ont été publiés concernant ce problème crucial, tant pour s'adapter aux variantes d'architectures de réseaux de neurones que pour améliorer les performances de généralisation du réseau de neurones et de temps de convergence du processus d'apprentissage.

On peut citer par exemple la loi de Hebb, qui s'applique aux réseaux pleinement connectés, et qui vise à renforcer une connexion lorsque les deux neurones qu'elle relie sont actifs sur le prototype considéré. L'algorithme mis en œuvre est simple: si $V_i$ et $V_j$ sont de même signe, alors la connexion $C_{ij}$ est renforcée, sinon sa valeur est diminuée.

On peut aussi citer la règle de la rétropropagation du gradient, qui s'applique aux réseaux en couches de type perceptrons. Pour modifier les coefficients synaptiques, l'erreur constatée sur la couche finale pour le prototype considéré est propagée vers les couches antérieures selon une évaluation de la contribution de chaque poids, et la correction sur ces poids est effectuée au passage selon l'importance de leur contribution à l'erreur finale. Ce mécanisme d'apprentissage peut être décrit de la manière suivante: Pour chaque présentation d'un vecteur d'entrée $V^h$, on calcule de proche en proche l'état des sorties $S^h$ selon l'équation 1, où $f$ est une fonction
différentiable.

Notons $A_i = \sum_j C_{ij} * V_j$, et $x_i = f[A_i]$.

Le vecteur désiré $Y^h$ est confronté à la sortie $S^h$ pour calculer une fonction de coût, par exemple la fonction quadratique $Q(C) = (1/N) \sum_h Q_h$, avec $Q_h = \sum_s [S_s^h - Y_s^h]^2$, où s indice uniquement les cellules de la dernière couche. On cherche ensuite à minimiser $Q$, par une descente suivant le gradient de $Q$ par rapport à $C$, c'est à dire les $\partial Q / \partial C_{ik}$ pour tout i,k. On obtient l'algorithme suivant:

si i est une cellule de sortie, $f_s = 2 * [S_s^h - Y_s^h] * f'(A_s)$,

sinon, $f_i = f'(A_i) * \sum_j C_{ji} * f_j$,

et l'on met à jour les coefficients synaptiques selon $C_{ij}^h = C_{ij}^{h-1} - \eta^h * f_i * x_j$ ($\eta^h$ est un terme de gain).

### 1.1.2 Quelques domaines d'application

Les réseaux de neurones réalisant des tâches de classification, les applications les plus fréquemment citées les mettant en œuvre relèvent du domaine du traitement du signal:

* classification portant sur des variables temporelles (reconnaissance vo-cale, de signaux radar, décorrélation de signaux...),

* classification portant sur des variables non temporelles (traitement de l'image: segmentation, analyse de texture, reconnaissance de forme...),

* asservissement (contrôle adaptatif: pendule inverse, pilotage de véhicule, contrôle de processus...)

Des applications plus proches du domaine de l'intelligence artificielle sont aussi à l'étude: moteur d'inférence pour un système de règles, optimisation combinatoire (problème du voyageur de commerce), fusion de données...

Les réseaux de neurones ne sont à l'heure actuelle utilisés dans des applications commerciales que de manière très ponctuelle, ou en complément à un traitement classique.

## 1.2 Intérêt des architectures dédiées

La meilleure connaissance du comportement des réseaux neuronaux a entraîné l'étude de réseaux de taille de plus en plus grande, dont la simulation sur des machines séquentielles prend un temps très important: par exemple,
pour un réseau pleinement connecté, l’algorithme correspondant à une étape de relaxation a une complexité en $o(N^2)$, ($N$ nombre de neurones du réseau), et de nombreuses itérations sont généralement nécessaires pour atteindre un état stable. Très rapidement, un besoin de machines dédiées s’est fait sentir, pour répondre de manière plus adaptée à ce type de problèmes.

Avec les multiples architectures de circuits et de machines proposées à ce jour, un nombre croissant de réalisations sont apparues. Les approches suivies ont des objectifs variés, de la plus grande généralité d'un accélérateur de traitement vectorisant les sommes de produits[HNC,SAIC], à la plus grande spécificité d'un circuit dont ni les coefficients synaptiques ni la structure du réseau ne sont programmables [Graf 86], tirant parfois parti de caractéristiques technologiques particulières. Ces diverses architectures s'adaptent plus ou moins directement au parallélisme massif du problème; d'autre part, la simulation du réseau de neurones ne représente souvent qu'une partie d'une chaîne de traitements effectués sur une machine classique.

## 1.3 Les objectifs de l'étude

Nous proposons un composant neuromimétique modulaire et reconfigurable, afin de pouvoir accélerer la simulation de diverses architectures de réseaux de neurones. Ce composant a été réalisé dans une technologie classique (CMOS), afin de pouvoir l'interfacer aisément avec sa machine hôte. L'environnement obtenu peut aussi bénéficier de la structure parallèle de la machine hôte choisie (T-Node), l'objectif étant de proposer un circuit pouvant prendre place dans une famille d'architectures sur lesquelles on simule des réseaux de neurones avec divers degrés de reconfigurabilité. Par les gains en vitesse de simulation attendus et les possibilités d'étude de systèmes à base de composants neuromimétiques, cette démarche permettra de mieux connaître le domaine des réseaux de neurones, et de proposer ensuite des architectures plus adaptées à ce type de problèmes.
Bibliographie

[Ama 77] S. I. Amari 1977 *Biol. Cybern.* **26**, 175-185

[Graf 86] H. P. Graf, L. D. Jackel, R. E. Howard, B. Straughn, J. S. Denker, W. Hubbard, D. M. Tennant, and D. Schwartz 1986 *VLSI implementation of a neural network memory with several hundreds of neurons*, A.I.P Conf. Proc. *Snowbird*, pp 408-413

[Hebb 49] D. O. Hebb 1949 *The Organisation Of Behaviour, Wiley, New-York*

[HNC] 1990 documentation technique de Hecht-Nielsen Neurocomputers, H.N.C. 5501 Oberlin Drive, San Diego, CA 92121-1718, U.S.A.

[Hop 82] John J. Hopfield 1982 *Neural networks and physical systems with emergent collective computational abilities*, Biophysics pp. 2554-2558 vol. 79

[Koho 77] Teuvo Kohonen 1977 *Associative Memory- A System Theoretic Approach*, Springer, New-York

[LeC 87] Yann Le Cun 1987 *Modèles connexionnistes de l’apprentissage, thèse*, Paris

[McCl 86] McClelland, Rumelhart, and the PDP Research Group 1986 *Parallel Distributed Processing, Explorations in the microstructure of Cognition, Vol. 1: foundations*, The MIT Press

[McCu 43] Warren S. McCulloch and Walter H. Pitts 1943 *A logical calculus of the ideas immanent in nervous activity, réimprimé en "Émbodyements de Mind"*, Warren S. McCulloch, The M.I.T. Press 1965-1970-1988

[Min 69] Marvin L. Minsky, Seymour A. Papert 1969 *Perceptrons*
[Rose 62] Frank Rosenblatt 1962 *Principles of Perceptrons, Spartan, Washington D.C.*

[SAIC] 1990 documentation technique de Science Applications International Corporation, 10260 Campus Point Drive, MS 71, San Diego, CA 92121, U.S.A.
# Chapitre 2

## Les systèmes existants
## 2.1 Choix technologiques

### 2.1.1 Calculateurs analogiques

Parmi les nombreux laboratoires ayant proposé des circuits permettant de simuler le comportement des réseaux de neurones, nombreux sont ceux qui ont choisi une technologie leur permettant le calcul analogique de la somme des états de neurones pondérés par les coefficients synaptiques, ainsi que la fonction de seuillage. Différents mécanismes ont été utilisés pour réaliser ces fonctionnalités, en particulier la pondération et la sommation, qui doivent présenter un caractère de parallélisme.

Les technologies analogiques présentent plusieurs avantages sur les technologies numériques. Les principaux sont de permettre une densité d'intégration plus grande par une meilleure compacité des cellules opératives utilisées pour simuler les réseaux neuronaux (produit, somme, fonction de seuil), ainsi que par la possibilité de connexion entre ces cellules permettant des signaux multivalués. On peut ainsi obtenir, dans ces technologies, des circuits neuronaux dotés d'un parallélisme total. De plus, le bruit produit intrinsèquement par ces circuits, paramètre essentiel à la convergence de certains algorithmes, est de nature différente de celui que l'on peut simuler sur des circuits digitaux, et où la quantification est considérée comme un convénient. Enfin, la ressemblance plus grande entre les réseaux de neurones ainsi implémentés et leur modèle est parfois considérée comme un avantage supplémentaire.

En contrepartie, le stockage des données analogiques s'avère problématique (persistance des données dans le cas de la charge d'un condensateur, reprogrammabilité des hologrammes pour des données représentées par des intensités lumineuses...). D'autre part, la mise au point de la structure fine des circuits analogiques est souvent délicate, en particulier si l'on veut tirer parti de toute la dynamique des signaux autorisée par la technologie (la prise en compte de l'influence mutuelle des signaux électriques s'avère nécessaire et peut conduire à une perte de densité d'intégration pour éviter ces phénomènes). Néanmoins, pour la conception de circuits intégrés analogiques, les outils actuels facilitent la tâche de mise au point avec l'aide de simulateurs précis et performants. De plus, la précision intrinsèque à certains disposifs analogiques peut s'avérer insuffisante pour une implémentation simple d'algorithmes tels que la rétropropagation du gradient de l'erreur, par exemple. Enfin, les composants analogiques nécessitent souvent un interfaçage spécifique avec leur machine hôte, qui interprète les
résultats.

Voici quelques exemples d'implémentation analogiques de réseaux de neurones:

* A.T.&T./Holmdel [Graf 86,Graf 87] a réalisé un circuit CMOS où les coefficients synaptiques sont des résistances fixes; le mécanisme utilisé permet de choisir entre des connexions excitatrices, inhibitrices, ou bien pas de connexion entre neurones selon l'état d'une paire de cellules mémoire particulières. Cette approche du calcul neuronal bénéfice de particularités technologiques permettant de réaliser la fonction de seuil avec un opérateur de faible surface (amplificateur utilisé en mode non linéaire), et la sommation parallèle des courants par les neurones (OU cablé). Ce circuit contient 54 neurones, en réseau pleinement connecté (Figure 2.1). Son temps de relaxation reste inférieur à 900 ns pour un fonctionnement en mémoire associative d'une capacité de 10 mots de 40 bits.

<figure><img src="image_4.png" /><figcaption>Figure 2.1: Circuit analogique à base de résistances</figcaption></figure>

Bell/Morristown travaille sur un projet d'extension de la machine de Boltzmann au calcul analogique, avec la conductance des connexions mémorisées dans des EEPROM et les charges électriques stockées dans des CCD (utilisation de résistances et de transistors BICMOS), l'architecture proposée étant du même type que celle qui vient d'être présentée.
D'autres laboratoires ont utilisé des variantes technologiques pour la réalisation des synapses autour d'une même architecture pleinement connectée: le M.I.T. Lincoln [Sage 86], avec des connexions programmables en continu (MNOS CCD: stockage de charges électriques); le mécanisme de transfert de charge est décrit dans la figure 2.2.

<figure><img src="image_5.png" /><figcaption>Figure 2.2: Mécanisme de transfert de charge d'une synapse CCD</figcaption></figure>

A.T.&T./Murray Hill [Spen 86], avec des connexions multivaluées programmées par des impulsions créant des conductances réversibles dans un film d'oxide de bismuth; le Jet Prop Lab [Thak 86], plaçant les coefficients synaptiques dans une ROM sur un film de a-Si:H; l'université de Séville, [Rod 88] proposant un circuit où les charges sont dans des condensateurs commutables. Ces différents principes de réalisation se différencient par la dynamique des coefficients, éventuellement leur programmabilité.

Certains laboratoires proposent une version semi-parallèle de cette architecture: Caltech [Agra 88], pour intégrer un nombre plus élevé de cellules (synapses mémorisées dans des éléments CCD); Thomson CSF propose une technologie inhabituelle [Cham 87], avec écriture des synapses par effet ferroélectrique.
* Caltech [Sivi 86,Sivi 87,Mead 80] a aussi étudié l'intégration sur le même circuit de fonctions neuronales et des capteurs photosensibles permettant dén nourrir les entrées, pour obtenir une rétine intelligente; cette approche présente l'avantage de supprimer les problèmes de prétraitement.

* De nombreux dispositifs optiques ont été proposés [Psal 85,Far 87], en particulier pour atteindre des réseaux de grande taille. Les principaux avantages sont ici la vitesse de propagation des signaux, leur indépendance, la facilité de sommer des quantités de lumière en parallèle... Une lentille cylindrique permet de distribuer les entrées (en ligne sur la figure 2.3) sur toute la colonne correspondante de l'opérateur de pondération, un modulateur spatial de lumière. Selon les dispositifs employés, les coefficients de pondération peuvent être reprogrammables, électriquement ou optiquement. Un tube télévision ou des CCD peuvent jouer le rôle de modulateur spatial de lumière. La sommation de la lumière en intensité (quantité non signée) est obtenue par une autre lentille cylindrique placée entre le modulateur et la colonne de capteurs en sortie (travailler en lumière polarisée permet d'ajouter la notion de signe, mais complique les dispositifs de manière conséquente). Les lentilles cylindriques sont souvent remplacées par des hologrammes. On peut mentionner des éssais d'intégration de l'ensemble du dispositif dans un matériau photo-réfractif, qui fait office d'hologramme reconfigurable optiquement pour la pondération cette fois, mais ce principe est plus loin d'être opérationnel.

Les performances découlent du degré de parallèlisme autorisé pour les interconnexions (ordre $N^4$ si l'on utilise un hologramme volumique pour traiter des neurones déntrée disposés en deux dimensions, pour un potentiel de $10^{10}$ connexions par $cm^3$ [Psal 88]), mais aussi de la vitesse des moyens de calcul optiques. De plus, les signaux optiques peuvent se déplacer dans l'espace sans interagir. Toutefois les dispositifs faisant appel à des moyens optiques restent encore au stade de machines de laboratoire à cause des difficultés d'intégrer les composants, et des réglages qu'ils nécessitent souvent. Un autre frein est la mise en œuvre de moyens d'apprentissage efficaces, en raison des mécanismes de mémorisation des coefficients synaptiques (le temps d'écriture d'un hologramme est de l'ordre de la seconde [Lin 89], et dépend de la puissance du laser d'écriture utilisé); de plus la dynamique sur les grandeurs mises en jeu reste difficilement maîtrisable
<figure><img src="image_6.png" /><figcaption>Figure 2.3: Principe de fonctionnement d'un réseau de neurones optiques</figcaption></figure>

avec les matériaux actuels; enfin un interfaçage des signaux optiques avec l'environnement électronique est nécessaire. Des systèmes réalisant des mécanismes d'apprentissage optique sont néanmoins proposés (mémoire associative [Psal 85], rétropropagation du gradient dans des réseaux multicouches [Wag 87, Kita 89]...), même si le champ d'application de ces technologies reste limité au mode de relaxation à l'heure actuelle. Des solutions mixtes électrooptiques visent à réunir certains avantages des deux approches pour proposer des solutions plus utilisables, au détriment des performances pures, exploitant par exemple des modes de connexion ou de contrôle optiques et des cellules de calcul électroniques [Frye 89], ou bien des propriétés de génération de signaux aléatoires (dans une machine de Boltzmann analogique: [Gard 90]).

Le calcul neuronal, qui tolère une certaine imprécision, a trés tôt été un champ d'investigation pour appliquer des technologies optiques, et l'activité dans ce domaine permet d'espérer des résultats très prometteurs dans le futur pour des tailles de réseaux et des vitesses de calcul non envisageables par des moyens électriques.

Une solution aux problèmes liés à l'utilisation de technologies analogiques est recherchée dans une utilisation mixte avec des technologies digitales, par exemple avec un stockage digital des coefficients synaptiques (éventuellement à l'extérieur du circuit), et une conversion pour effectuer les calculs en
parallèle de manière analogique dans le circuit. Certains outils de conception de circuits intégrés facilitent cette approche, en proposant des cellules précaractérisées analogiques et digitales, que l'on peut placer ensemble sur le circuit.

D'autres circuits enfin tendent à mimer le comportement des réseaux de neurones biologiques de manière plus proche que ne l'autorisent les circuits digitaux conventionnels, tout en conservant les avantages des circuits numériques. Par exemple, le circuit de l'université d'Edimburg ([Mur 88]) modélise les états de neurones par des trains d'impulsions numériques, dont la fréquence représente le degré d'activation des neurones, à l'aide d'un oscillateur controlé par une tension, et qui est sommée par un OU cablé intégrant les impulsions dans un condensateur (approximation restant satisfaisante tant qu'un nombre réduit de signaux sont à sommer, deux impulsions simulwanées ne comptant que pour une) (Figure 2.4).

<figure><img src="image_7.png" /><figcaption>Figure 2.4: Principe de fonctionnement d'un réseau de neurones à train d'impulsions</figcaption></figure>

### 2.1.2 Calculateurs digitaux

Les systèmes digitaux permettant la simulation de réseaux de neurones sont variés et de plus en plus nombreux. Différentes familles peuvent être distinguées:
* Les systèmes faisant intervenir des ordinateurs classiques optimisés pour le calcul vectoriel, parallèle, systolique... ont une place à part, étant d'usage trés général et bénéficiant de technologies souvent particulières aux très hautes performances (par exemple le bipolaire ECL, l'arséniure de gallium...). L'objectif de ce type de machines n'étant pas de proposer une architecture optimisée pour la simulation de réseaux de neurones, mais un compromis destiné à couvrir une gamme plus large de problèmes, elles ne sont citées qu'à titre de référence dans cette étude. L'application de ces technologies apporte un gain en vitesse d'au moins un ordre de grandeur par rapport aux technologies CMOS couramment utilisées dans les machines dédiées aux réseaux de neurones, mais leur coût et la difficulté de mettre au point de telles technologies les placent hors de portée pour des machines à diffusion limitée,

* Moins généraux que les machines précédemment citées, les systèmes accélérateurs de calculs conçus autour de processeurs de signal permettent aussi la simulation de réseaux de neurones moyennant une programmation appropriée. Le domaine du traitement numérique du signal étant en expansion, ces circuits sont commercialisés à grande échelle, et utilisent les derniers apports des technologies CMOS classiques pour rester dans la course à la performance pure. Pour un coût modeste, ils apportent un gain en performances par rapport aux microordinateurs ou stations de travail de par leur temps de cycle court (pipeline, jeu d'instructions réduit, bus adresses et données séparés...), mais restent limités en raison de leur structure séquentielle,

* Les circuits ASIC<fnref n="1" /> (prédiffusés, précaractérisés, ou spécifiés par l'utilisateur) sont souvent employés dans les machines de laboratoire, et utilisent des processus de fabrication éprouvés, et le gain en temps de développement se fait au détriment de l'optimisation de la technologie. Néanmoins ce type de circuit est conçu en fonction de l'utilisation que l'on veut en faire, et les gains attendus de ces architectures spécifiques sont supposés compenser largement l'utilisation de technologies non optimales. On peut aussi classer ici les machines construites à partir de composant discrets MSI<fnref n="2" /> ou LSI<fnref n="3" />, dont la technologie est plus conservatrice (TTL<fnref n="4" />...) mais qui possèdent aussi une certaine souplesse

<footnote n="1">¹Application Specific Integrated Circuit</footnote>

<footnote n="2">²Medium Scale Integration</footnote>

<footnote n="3">³Large Scale Integration</footnote>

<footnote n="4">⁴Transistor Transistor Logic</footnote>
architecturale, et un choix plus vaste de primitives de calcul.

Les avantages des circuits digitaux l'emportent dans de nombreux cas sur leur inconvénients: stabilité de stockage, dynamique des signaux maîtrisée, interfaçabilité aisée avec le système hôte, avec en contrepartie une densité d'intégration moindre, d'un facteur pouvant être très important selon les opérateurs. Cet aspect entrainant un facteur de parallélisme moins élevé, cela peut conduire les systèmes digitaux à une vitesse de calcul plus faible, en particulier pour les réseaux de grande taille.

## 2.2 Choix architecturaux

### 2.2.1 Machines non dédiées aux réseaux de neurones

#### Calculateurs vectoriels

Les ordinateurs Cray représentent l'archétype du calculateur vectoriel; l'architecture de ce type de machines est fondée sur une répartition des données en plusieurs bancs mémoire afin de pouvoir y accéder en parallèle et les traiter par une (parfois plusieurs) unité arithmétique très performante au prix d'un entrelacement important des instructions. Ces grosses machines traitent de préferrence des calculs matriciels; les algorithmes neuronaux peuvent généralement être traduits avec une formulation matricielle, mais cela conduit souvent à la manipulation d'énormes matrices creuses (réseaux en couches...); cela entraine un travail de codage délicat pour tirer pleinement parti des possibilités des calculateurs vectoriels.

On peut classer ici les accélérateurs orientés réseaux de neurones utilisant un DSP<fnref n="5" />; à une échelle moindre, ces systèmes visent à traiter systématiquement un flot de données. L'ambition de ces machines étant moins grande, elles ne présentent en général pas de parallélisme, ou alors assez faible (4 circuits à programmer en MIMD<fnref n="6" /> pour la carte à DSPs 24 bits Fujitsu MB86220 [Iwa 89]). En revanche, l'architecture des DSPs et les compilateurs qui les accompagnent peuvent favoriser le traitement de problèmes d'essence neuronale en optimisant plutôt les accès mémoire que le pipeline

<footnote n="5">⁵Digital Signal Processor: conçus pour le traitement du signal, ces processeurs possèdent des fonctionnalités de calcul qui s'approchent de plus en plus de celles des microprocesseurs classiques, avec un gain en performance au détriment de modes d'adressage plus restreints.</footnote>

<footnote n="6">⁶Multiple Instructions Multiple Data: les processeurs sont indépendants, tant du point de vue du programme que des données</footnote>
régulier propre au calcul matriciel. Les accélérateurs de simulations com-
mercialisés actuellement utilisent ce type d'architecture: la société S.A.I.C.
[Work 88] propose DELTA2 (doté d'une unité de calcul en virgule flottante,
avec l'environnement logiciel SFINX [Paik 87] développé par UCLA), la firme
NeuralWare, Nestor [Reil 87], et la société H.N.C. [Hec1 88], AXON (un envi-
ronnement complet de programmation est vendu avec ces cartes pour ordina-
teurs personnels). Certains laboratoires de recherche suivent aussi cette voie
pour construire des applications basées sur les réseaux de neurones, comme
Bell/AT&T, tirant parti d'un DSP développé par ailleurs, pour une applica-
tion de reconnaissance de caractères manuscrits [LeC 89,LeC 90]; T.I. Bed-
ford propose un circuit développé spécifiquement pour simuler les réseaux de
neurones, mais dont l'architecture se rapproche fortement de celle des DSP
classiques, avec des instructions spécifiques et un espace d'adressage large, et
un circuit donnant des facilités de communication pour autoriser l'expansion
du réseau avec plusieurs cartes ([Gart 87]). L'attrait des DSP provient du
bon niveau de performance et de l'environnement de programmation qu'ils
offrent pout un coût modique, qui s'explique par leur architecture, mais
aussi de leur conception soignée et de leur technologie performante qui sont
rentabilisées par une diffusion vaste.

Machines parallèles

Ces calculateurs sont dotés de plusieurs unités de traitement d'usage
général suceptibles de travailler simultanément, chacune possédant sa
propre mémoire ou pouvant faire appel à une mémoire partagée
[Int 89,Tel 88,VanT 90]. Les calculateurs MIMD semblent appropriés à la si-
mulation de réseaux de neurones, qui est un problème parallèle par essence.
Une solution venant rapidement à l'esprit consiste en l'attribution d'un ou
de quelques neurones par processeur, mais la communication des états de
neurones aux autres processeurs peut devenir un goulot d'étranglement, en
particulier pour les réseaux fortement connectés. Les communications qui ne
sont pas câblées sont alors assurées par des réseaux d'interconnexion, par un
partage de ressources, ou bien par passage de proche en proche entre proces-
seurs ou à l'aide de mécanismes dédiés au routage. Dans le cas des réseaux
d'interconnexion, ceux-ci peuvent être reconfigurables statiquement (avant
chargement du programme), semi-dynamiquement (lors de points d'arrêt)
ou dynamiquement (par échange de message entre les deux seuls processeurs
mis en cause).

Divers algorithmes ont été proposés pour tirer le meilleur parti des
structures de communication particulières à chaque machine (par exemple, pour les réseaux pleinement connectés avec apprentissage selon la règle de Kohonen sur des machines à Transputers [Au 89], ou pour les réseaux en couches avec apprentissage par rétropropagation du gradient de l'erreur [Wang 88]).

### Machines systoliques

Les calculateurs systoliques contournent le problème des communications en n'en autorisant que dans un voisinage donné de chaque processeur élémentaire, pour créer un maillage de processeurs. D'autre part, le contrôle de ces machines est généralement de type SIMD<fnref n="7" />. Cela s'adapte bien aux traitements envisagés (calcul de structure, simulation d'écoulement aérodynamique, imagerie...), où généralement une masse considérable de données se propage d'un bord à l'autre de la machine, les données étant traitées de façon similaire pendant leur traversée. En revanche, la simulation des réseaux de neurones y est moins appropriée que sur les machines précédentes: le mécanisme de routage de message étant généralement plus frustre et moins efficace, il peut créer des contraintes importantes de programmation (et un engorgement des canaux de communication) si l'algorithme employé exige des connexions sur un voisinage étendu. Le domaine neuronal de prédilection des machines systoliques reste donc les réseaux de neurones simples et réguliers. La régularité du principe systolique est un inconvénient dans le cas des matrices d'interconnexions creuses, qui se traduit par une perte d'efficacité.

Les machines n'autorisant des communications que de proche en proche [Leti 89], permettent la simulation de réseaux de type Hopfield pleinement connecté avec des performances moyennes: SYMPATI2, dédiée au traitement d'image, avec 256 processeurs élémentaires 8 bits connectés en treillis, simule au maximum un réseau pleinement connecté de 256 neurones. La mise à jour se fait en 700 µs dans la phase d'apprentissage et en 400 µs dans la phase de relaxation, pour 256 neurones pleinement interconnectés.

Une souplesse plus grande est apportée par l'utilisation de processeurs élémentaires 1 bit, qui permettent de choisir la précision des coefficients grâce à leur mode de calcul bit-série: le GAPP de N.C.R. [NCR 84], dont un avantage est d'être modulaire, permettant de construire une machine adaptée à la taille d'un problème. Ce processeur s'est vu adjoindre un mécanisme de

<footnote n="7">⁷Single Instruction Multiple Data, un programme commun est exécuté par tous les processeurs, sur des données différentes</footnote>
routage [Sig 88] pour étendre son champ d'utilisation.

Des calculateurs importants ont été construits selon le même principe, comme la Connection Machine [Tuck 88]. On obtient alors des systèmes comportant plus de processeurs élémentaires que dans les calculateurs parallèles (plus simples, mais suffisants pour le calcul neuronal). Leur potentiel de communication peut les différencier pour la simulation des réseaux neuronaux, cet aspect devenant prépondérant. Par exemple, la machine AAP2 développée au Japon par N.T.T. [Wata 89] contenant 65536 processeurs élémentaires (64 par circuit), se prête efficacement à la programmation (en APL) d'algorithmes variés grâce à ses différents modes de communications, avec seulement 20% de temps consacré à la diffusion de messages dans le cas d'un apprentissage par rétropropagation du gradient. Pour comparaison, la Connection Machine souffre de son système centralisé de communication point à point (hypercube entre circuits de 16 processeurs élémentaires), mais atteint néanmoins un haut niveau de performances, par l'importance des moyens mis en œuvre [Sing 90].

## Machines flots de données

Le mode de contrôle adopté ici diffère légèrement du systolique car les cellules, proches physiquement des cellules systoliques, sont commandées indépendamment par les données qui leur parviennent, permettant leur utilisation pour des problèmes plus variés [Ko 88]. Néanmoins le problème de la communication entre les cellules demeure, plus ou moins aigu selon les algorithmes. La machine de Manchester est un exemple connu mettant en œuvre ce principe, mais n'a pas à ma connaissance donné lieu à des simulations neuronales. Ce type de machines reste confidentiel aujourd'hui, en dépit de leur large potentiel d'opérations, sans doute en raison de la difficulté de les exploiter à travers un compilateur.

## 2.2.2 Machines dédiées aux réseaux de neurones

La solution la plus souple pour l'architecture d'un système destiné à simuler les réseaux de neurones reste de le construire autour de circuits digitaux conçus spécialement dans ce but. Cette approche permet de traiter séparément les paramètres du système, comme par exemple la dynamique des coefficients, la modularité des circuits, leur reconfigurabilité, la structure du réseau de neurones simulé, les fonctionnalités à implanter... Dans le cas de l'utilisation d'ASICs, ce qui permet de réduire l'effort de conception, la contrepartie est une densité d'intégration moindre. Cette souplesse
des systèmes digitaux est sans doute la clé de leur développement, dans la phase actuelle de connaissance du domaine des réseaux de neurones, où le besoin d'architectures figées destinées à une application précise commence à peine à se faire sentir, mais où l'on cherche plutôt à optimiser les paramètres décrivant les réseaux.

Le parallélisme total n'étant pas envisageable pour conserver un rapport surface utile - surface d'interconnexions suffisant, les possibilités d'architecture les plus étudiées réalisent soit un semi-parallélisme divergent (mise à jour partielle de tous les neurones à partir de la contribution d'un neurone), soit un semi-parallélisme convergent (mise à jour d'un neurone à partir de la contribution de tous les neurones afférents; pour mémoire, la figure 3.1).

* la première méthode est la plus fréquemment employée [Wein 88,Per 88,Bla 88]. Elle présente l'avantage d'une grande régularité des besoins en opérateurs (principalement registres à décalages), et donc une implémentation de type systolique assez directe, où chaque processeur élémentaire dispose de tous les paramètres nécessaires à chaque étape de son calcul. En contrepartie, un inconvénient de cette approche est de favoriser les apprentissages locaux, si l'on veut éviter de faire circuler une information globale dans la boucle de registres, et nécessite une mise à jour complète du réseau qui n'est pas nécessairement requise par l'algorithme. Il est de plus nécessaire de répartir la boucle des registres à décalage sur plusieurs circuits si l'on désire les cascader, avec circulation des états de neurones de circuit en circuit.

* la seconde méthode, moins répandue [Pere 88,Hér 86,Gué 88,Clea 87], présente toutefois l'intérêt de présenter un flot de résultats plus régulier, l'apprentissage pouvant être effectué après chaque cycle, lorsque l'on dispose d'un nouvel état de neurone, en faisant intervenir ou non une information globale. La cascadabilité reste assez directe, en répartissant de même les poids synaptiques sur plusieurs circuits, mais en dupliquant les états de neurones afférents, afin de faire exécuter en parallèle sur les différents circuits une partie du calcul de l'état du neurone courant; il reste alors à regrouper les résultats intermédiaires calculés par les différents circuits avant de procéder à la mise à jour en parallèle des circuits suivants.

De grandes entreprises Japonaises ou américaines étudient aussi ce
type de composants, et commencent à en commercialiser, de taille mo-
deste (le MB4442, un circuit analogique à un neurone par Fujitsu [Fuji 89],
l'AMD1220, un circuit digital de 8 neurones par µDevice [µD 90], le
Neuro-7 par NEC, le gate-array d'Hitachi contenant 6 neurones et 84
synapses [Yasu 89]...), ou plus importante (le N64 Intel contient 64 neu-
rones analogiques avec apprentissage, le NU32 de Neural Semiconductor
regroupe 32 neurones digitaux codés sur 32 bits [NS 90], sans mécanisme
d'aprentissage...); certains constructeurs songent à proposer une intégration
sur tranche de silicium pour atteindre des tailles importantes de réseaux
[Hi 89]. Les modules proposés par Hitachi présentent l'avantage de posséder
un mode de contrôle asynchrone, permettant en principe une cascadabilité
aisée, les neurones ayant une fonctionnalité de sommateur d'impulsions dans
le temps.

La figure 2.5, d'après [Rec 88], réunit les domaines de capacité des différentes architectures de neuro-ordinateurs.

<figure><img src="image_8.png" /><figcaption>Figure 2.5: Domaines d'utilisation de différentes architectures de neuro-ordinateurs</figcaption></figure>
## 2.3 Choix systèmes

### 2.3.1 Impact sur la programmabilité

La facilité de programmation d'une application incluant la simulation de réseaux de neurones dépend du degré de sophistication des outils proposés, depuis la compilation pour le contrôle d'une machine dédiée jusqu'à un moyen spécifique de description du réseau et de son comportement.

Les systèmes fondés sur un accélérateur de calcul classique bénéficient en général d'un environnement de programmation complet comportant compilateurs C, PASCAL, FORTRAN, etc..., ainsi qu'une couche plus ou moins élaborée permettant la description (sous une forme déclarative, graphique...) d'une famille de réseaux assez large et pouvant être étendue en réutilisant des procédures de base.

Certaines machines parallèles bénéficient d'un environnement de programmation particulier pouvant faciliter l'implémentation de l'algorithme neuronal désiré: par exemple POOMA [VanT 90], sur laquelle est implémenté POOL [Ame 89], un langage orienté objet (communication par échanges de messages); l'environnement de programmation neuronal GENESIS [Wil1 89], de Caltech, est fondé sur un mécanisme d'acteurs, avec un interpréteur interfacé avec X-windows (XODUS: pour plus de détails, se référer à [Wil1 89]).

Les machines spécifiques, en revanche, sont très souvent dotées d'un environnement de programmation beaucoup plus frustre, en raison de la difficulté ou de l'inefficacité d'implémenter un système d'exploitation et de compilateurs standards, ou bien de l'ampleur de la tâche, surtout pour les machines de laboratoire destinées à une diffusion réduite. La programmation efficace de ces machines est dépendante d'une bonne connaissance de leur structure, et passe par l'utilisation délicate et ingrate d'un langage de bas niveau.

### 2.3.2 Portabilité, généralisation des résultats

La société américaine T.R.W. propose, avec la série Mark II, Mark III et Mark IV [Kuc 87], des environnements de performances de plus en plus grandes en faisant appel à des moyens de sophistication croissante (simulateur logiciel, accélérateur de calcul, circuit dédié), mais restant totalement compatibles. Il est ainsi possible, dans ce type d'environnement, de réutiliser exactement des résultats de simulation pour une application particulière nécessitant du matériel spécifique.
## 2.4 Performances obtenues et fonctionnalités

### 2.4.1 Familles de réseaux de neurones couvertes

Lénsemble des réseaux de neurones couvert par un système est généralement d'autant moins vaste que ses performances sont grandes.

Les systèmes faisant appel à des accélérateurs de calcul classiques permettent généralement la simulation des réseaux de neurones, mais aussi du calcul matriciel ou parallèle. Ces systèmes, souvent construits autour de DSP, et peuvent exécuter tout type de programme, utilisant plus ou moins les possibilités accélératrices du système.

Les procédés analogiques permettant un parallélisme total sont la plupart du temps dédiés à un seul type de réseau de neurones (par exemple les réseaux pleinement connectés pour le circuit BELL A.T.&T.), et ne peuvent être utilisés pour d'autre types de tâches.

Les systèmes dédiés digitaux pourraient autoriser une utilisation détournée de leur opérateurs pour faire du calcul matriciel par exemple. N'étant pas conçus pour cela au départ, ces facilités sont rarement proposées dans leur environnement de programmation, et seraient incomplètes par rapport à ce que l'on peut attendre d'une machine vectorielle (par exemple, possibilité de faire des produits scalaires ou des sommes de vecteurs, mais pas de produits matriciels, ou bien impossibilité d'utiliser des matrice de taille importante...).

### 2.4.2 Reconfigurabilité des machines

Les circuits analogiques permettent rarement une forme de cascadabilité en raison de la difficulté de propager les signaux analogiques en dehors du circuit. La taille maximale des réseaux est donc fixe (54 neurones pour le circuit BELL A.T.&T.). Certains circuits offrent néanmoins cette possibilité moyennant une conversion de signal en sortie, ce qui peut engendrer un bruit systématique [Eber 89], mais autorise l'accroissement de la capacité de la machine. La reconfigurabilité des circuits analogiques est encore plus délicate: si un dispositif a été conçu pour une dynamique de p bits, ou bien s'il permet de simuler une couche de N neurones, ces valeurs resteront figées et ne pourront pas être modifiées selon les besoins (en particulier, la précision sur les paramètres est liée à la technologie).

En revanche, les machines digitales présentent des facilités plus ou moins directes de cascadabilité, permettant d'élaborer des réseaux plus grands avec plusieurs circuits tout en gardant des performances comparables (les
pertes de performances proviennent souvent de la bande passante des bus sur lesquels circulent des paramètres du réseau); des réseaux multicouches peuvent aussi être élaborés à l'aide de circuits représentant chacun une couche. D'autre part, les machines digitales présentent des possibilités plus ou moins étendues de reconfigurabilité, tant sur la dynamique des grandeurs manipulées que sur certains aspects d'architecture des réseaux.

### 2.4.3 Performances de quelques machines

Remarque préliminaire: la comparaison des performances des systèmes simulant les réseaux de neurones n'a qu'une signification limitée: l'unité couramment employée (le nombre d'interconnexions calculées par seconde) est encore plus inadaptée pour rassembler des chiffres concernant des machines aux fonctionnalités plus disparates encore que les processeurs classiques, dont les programmes de test (Benchmarks) étalonnés en MIPS<fnref n="8" /> sont tant décriés. La taille des réseaux et les architectures possibles, la précision des coefficients, les algorithmes autorisés... seraient à prendre en compte pour pondérer les comparaisons. D'autre part, les performances annoncées sont souvent des valeurs maximales, ne tenant pas compte des temps d'établissement d'un pipeline, d'élaboration du contrôle des parties opératives, de l'acheminement des données...

Ces réserves faites, les chiffres de la table 2.1, d'après [Hec2 88], permettent de situer les ordres de grandeurs des performances d'une sélection de systèmes neuronaux réalisés à ce jour (la dernière colonne indique si le système est expérimental ou diffusé commercialement).

<footnote n="8">⁸Million d'Instructions Par Seconde</footnote>
<table><caption>Table 2.1: Performances de quelques machines neuronales</caption><thead><tr><th>Nom</th><th>An</th><th>Technologie</th><th>nombre de P.E. <sup>10</sup></th><th>nb. de connex.</th><th>connex./s (apprent.)</th><th>Laboratoire, Développeurs</th><th>Diff. <sup>9</sup></th></tr></thead><tbody><tr><td>Perceptron</td><td>57</td><td>Electroméca.</td><td>8</td><td>512</td><td>10<sup>3</sup></td><td>Cornell/Rosenblatt</td><td>Exp.</td></tr><tr><td>Adaline</td><td>60</td><td>Electrochim.</td><td>1</td><td>16</td><td>10<sup>4</sup></td><td>Standford/Widrow</td><td>Exp.</td></tr><tr><td>Madaline</td><td>62</td><td>Electronique</td><td>8</td><td>128</td><td>10<sup>4</sup></td><td>Standford/Widrow</td><td>Com.</td></tr><tr><td></td><td>84</td><td>Electroopt.</td><td>32</td><td>10<sup>3</sup></td><td>10<sup>5</sup></td><td>Caltech/Psaltis</td><td>Exp.</td></tr><tr><td rowspan="3">MARK III</td><td>85</td><td>Electronique</td><td>8*10<sup>3</sup></td><td>4*10<sup>5</sup></td><td>3*10<sup>5</sup></td><td>T.R.W./Hecht-Nielsen</td><td>Exp.</td></tr><tr><td>85</td><td>Electronique</td><td>4*10<sup>3</sup></td><td>1.6*10<sup>4</sup></td><td>4.9*10<sup>5</sup></td><td>I.B.M./Cruz</td><td>Exp.</td></tr><tr><td>85</td><td>Optique</td><td>6.4*10<sup>3</sup></td><td>1.6*10<sup>7</sup></td><td>1.6*10<sup>5</sup></td><td>Hughes/Soffer</td><td>Exp.</td></tr><tr><td rowspan="3">MARK IV<br>Odyssey</td><td>86</td><td>Electronique</td><td>2.5*10<sup>5</sup></td><td>5*10<sup>6</sup></td><td>5*10<sup>6</sup></td><td>T.R.W./Hecht-Nielsen</td><td>Exp.</td></tr><tr><td>86</td><td>Electronique</td><td>8*10<sup>3</sup></td><td>2.5*10<sup>5</sup></td><td>2*10<sup>5</sup></td><td>T.I./Penz</td><td>Com.</td></tr><tr><td>86</td><td>Electronique</td><td>256</td><td>6.4*10<sup>4</sup></td><td>6*10<sup>9</sup></td><td>AT&T/Jackel</td><td>Exp.</td></tr><tr><td rowspan="2">ANZA</td><td>86</td><td>Optique</td><td>1.6*10<sup>4</sup></td><td>2*10<sup>5</sup></td><td>2*10<sup>7</sup></td><td>Colorado U./Anderson</td><td>Exp.</td></tr><tr><td>87</td><td>Electronique</td><td>3*10<sup>4</sup></td><td>5*10<sup>5</sup></td><td>1.4*10<sup>5</sup><br>(2.5*10<sup>4</sup>)</td><td>H.N.C./Hecht-Nielsen</td><td>Com.</td></tr><tr><td>Parallon2</td><td>87</td><td>Electronique</td><td>10<sup>4</sup></td><td>5.2*10<sup>4</sup></td><td>3*10<sup>4</sup><br>(1.5*10<sup>4</sup>)</td><td>HumanDevices/Bogoch</td><td>Com.</td></tr><tr><td>Delta</td><td>87</td><td>Electronique</td><td>10<sup>5</sup></td><td>10<sup>5</sup></td><td>10<sup>7</sup><br>(2*10<sup>6</sup>)</td><td>S.A.I.C./Works</td><td>Com.</td></tr><tr><td>ANZA+</td><td>87</td><td>Electronique</td><td>10<sup>5</sup></td><td>1.5*10<sup>5</sup></td><td>6*10<sup>6</sup><br>(1.5*10<sup>6</sup>)</td><td>H.N.C./Hecht-Nielsen</td><td>Com.</td></tr></tbody></table>

<footnote n="9">⁹Diffusion commerciale ou machine expérimentale</footnote>

<footnote n="10">¹⁰Processeurs Elémentaires</footnote>
Ces valeurs indicatives peuvent être rapprochées de mesures de performances d'ordinateurs classiques sur des tâches équivalentes, dont la table 2.2 donne quelques exemples.

<table><caption>Table 2.2: Performances de quelques ordinateurs sur des simulations neu-ronales</caption><thead><tr><th>Nom</th><th>Type</th><th>Millions de connexions/s</th></tr></thead><tbody><tr><td>PC/AT</td><td>Séquentiel</td><td>0.025</td></tr><tr><td>Ridge 32</td><td>Séquentiel</td><td>0.05</td></tr><tr><td>VAX 750</td><td>Séquentiel</td><td>0.1</td></tr><tr><td>SUN 3</td><td>Séquentiel</td><td>0.25</td></tr><tr><td>MARK III</td><td>Architecture Bus</td><td>0.5</td></tr><tr><td>Convex C-1</td><td>Parallèle</td><td>1.8</td></tr><tr><td>16K CM-1</td><td>Array Processeur en hypertore</td><td>2.6</td></tr><tr><td>10 Warp</td><td>Array Processeur linéaire</td><td>17</td></tr><tr><td>Odyssey</td><td>Architecture Bus</td><td>20</td></tr><tr><td>SAIC Delta2</td><td>Carte DSP dédiée</td><td>22</td></tr><tr><td>20 Warp</td><td>Array Processeur linéaire</td><td>32</td></tr><tr><td>Cray XMP 1-2</td><td>Ordinateur vectoriel</td><td>50</td></tr><tr><td>Caltech</td><td>Circuit CCD dédié</td><td>500</td></tr><tr><td>64K CM-2</td><td>Array Processeur en hypertore</td><td>1300</td></tr><tr><td></td><td>Systèmes optiques</td><td>&gt; 10000</td></tr></tbody></table>

<footnote n="11">¹¹[Foge 88]</footnote>

<footnote n="12">¹²[Pom 88]</footnote>

<footnote n="13">¹³[Work 88]</footnote>

<footnote n="14">¹⁴[Fau 90]</footnote>

<footnote n="15">¹⁵[Agra 90]</footnote>

<footnote n="16">¹⁶[Sing 90]</footnote>

<footnote n="17">¹⁷[John 89,Lu 90]</footnote>
Bibliographie

[Agra 88] A. Agranat, A. Yariv 1988 *Semiparallel microelectronic implementation of neural network models using CCD technology*, *Electronics Letters*, vol. 23, No 11, pp 580-581

[Agra 90] Aharon J. Agranat, Charles F. Neugebauer and Amnon Yariv 1990 *A CCD Based Neural Network Integrated Circuit with 64K Analog Programmable Synapses*, soumis à la Conf. IJCNN San Diego

[μD 90] Micro Device 1990 *Documentation technique du MD1220, Orlando, Floride U.S.A.*, importateur français Tekelek Airtronic

[Ame 89] Pierre America 1989 *Issues in the Design of a Parallel Object-Oriented Language, Rapport Interne Philips*

[Au 89] B. Dorizzi, J. M. Auger 1989 *Implémentation de l'algorithme de Kohonen sur Transputers, La lettre du Transputer*, pp 17-29, dèc. 89

[Bla 88] François Blayo - Philippe Hurat 1988 *A Systolic Architecture Dedicated to Neural Networks, Actes Conf. NEuro Paris, I.D.S.E.T.* 1989, pp 701-709

[Clea 87] John G. Cleary 1987 *A Simple VLSI connectionist architecture, Actes Conf. I.C.N.N. San Diego, Vol. 3, pp 419-426*

[Cham 87] E. De Chambost 1987 *Communication privée*

[Eber 89] Silvio Eberhardt, Tuan Duong, and Anil Thakoor 1989 *Design of parallel hardware neural network systems from custom analog VLSI 'building block' chips, Actes Conf. I.J.C.N.N. Washington, Vol. 2, pp 183-190*
[Far 87] N. H. Farhat, S. Miyahara and K. S. Lee 1987 optical analog of two-dimensional neural networks and their application in recognition of radar targets, A.I.P Conf. Actes Snowbird, pp 146-152

[Fau 90] Bernard Faure and Guy Mazaré 1990 Implementation of Backpropagation on a VLSI Asynchronous Cellular Architecture, Actes Conf. I.C.N.N. Paris, Vol. 2, pp 631-634

[Foge 88] F. Fogelman-Soulié 1988 Connexionism: a tutorial, Neuro-Nîmes 88

[Frye 89] R. C. Frye, E. A. Rietman, C. C. Wong, B. L. Chin 1989 An investigation of adaptive learning implemented in an optically controlled neural network, Actes Conf. I.J.C.N.N. Washington, Vol. 2, pp 457-463

[Fuji 89] Fujitsu limited 1989 Documentation technique préliminaire du MB4442, Kawasaki, Japon, 25 mai 1989

[Gard 90] P. Garda, E. Belhaire 1990 An Analog Chip Set for Multi-Layered Synchronous Boltzmann Machines, Actes Conf. I.C.N.N. Paris, Vol. 2, pp 585-588

[Gart 87] Simon C. J. Garth 1987 A Chipset for High Speed Simulation of Neural Network, Actes IEEE first Int'l Conf. Neural Networks, I.E.E.E. Pres, Junin 1987, Vol. III, pp 443-452

[Graf 86] H. P. Graf, L. D. Jackel, R. E. Howard, B. Straughn, J. S. Denker, W. Hubbard, D. M. Tenant, and D. Schwartz 1986 VLSI implementation of a neural network memory with several hundreds of neurons, A.I.P Conf. Actes Snowbird, pp 182-187

[Graf 87] Hans P. Graf and Paul de Vegvar 1987 A CMOS Implementation of Neural Network Model, Actes Standford Conf. Advanced Research in VLSI, pp 351-367, MIT Press

[Gué 88] Anne Guérin, Christian Jutten, Jeanny Hérault 1989 Neurocomputer: "CRASY" a cost-effective solution, Actes Conf. NEuroParis, I.D.S.E.T., pp 756-765

[Hec1 88] Robert Hecht-Nielsen 1988 Neurocomputer Applications, Neural Computers, NATO ASI series, pp 445-453
[Hec2 88] Robert Hecht-Nielsen 1988 *Neurocomputing: picking the human brain, in IEEE Spectrum, mars 88, pp36-41*

[Hér 86] J. Hérault, C. Jutten 1986 *Space or time adaptive signal processing by neural network models, Actes Conf. I.N.N.C. Snowbird*, pp 206-211

[Hi 89] Yuso Hirai, Katsuhiro Kamada, Minoru Yamada, Mitsuo Ooyama 1989 *A digital neuro-chip with unlimited connectability for large scale neural network, Actes Conf. I.J.C.N.N. Washington, Vol. 2*, pp 163-169

[Int 89] 1989 iAPX 488, documentation technique Intel

[Iwa 89] Akira Iwata, Yukio Yoshida, Satoshi Matsuda, Yukimasa Sato, and Nobuo Suzumura 1989 *An Artificial Neural Network accelerator using general purpose 24 bits floating point Digital Signal Processors, Actes Conf. I.J.C.N.N. Washington, Vol. 2*, pp 171-175

[John 89] Kristina M. Johnson and Garret Moddel 1989 *Motivations for using ferroelectric liquid crystal spatial light modulators in neurocomputing, Applied Optocs, Vol. 28, Num. 22, 15 nov. 1989*, pp 4888-4899

[Kita 89] Ken-ichi Kitayama, Hisao Yoshinaga, and Tsutomu Hara 1989 *Experiments of learning in optical perceptron-like and multilayer neural networks Actes Conf. I.J.C.N.N. Washington, Vol. 2*, pp 465-471

[Ko 88] Israel Koren and Bilha Mendelson, Irit Peled and Gabriel M. Silberman 1988 *A Data-Driven VLSI Array for Arbitrary Algorithms, Computer, Octobre 88, pp 30-43*

[Kuc 87] Robert M. Kuczewski, Michael H. Myers, William J. Crawford 1987 *Neurocomputer Workstations and processors: Approaches and Applications, Actes Conf. I.C.N.N. San Diego, Vol. 3*, pp 487-489

[LeC 89] Y. LeCun, B. Boser, J. S. Denker, D. Henderson. R. E. Howard, W. Hubbard, L. D. Jackel 1989 *Backpropagation Applied to Handwritten Zip Code Recognition, Neural Computation, Vol. 1*, pp 541-551
[LeC 90] Y. LeCun, B. Boser, J. S. Denker, D. Henderson. R. E. Howard, W. Hubbard, L. D. Jackel *1990 Handwritten Digit Recognition with a Backpropagation Network*, Actes Conf. NIPS 1990, vol. 2

[Lin 89] Freddie Lin, Gajendra Savant (Khune), Robert Brown, Chai-pei Kuo and Thomasz Jannson *1989 Highly-parallel optical adaptive neural computers with layered and segmented structures*, Actes Conf. I.J.C.N.N. Washington, Vol. 2, pp 487-494

[Leti 89] CEA Département d'Electronique et d'Instrumentation Nucléaire 1989 SYMPATI2, SYstème MultiProcesseur Adapté au Traitement d'Image, Document CEA

[Lu 90] Taiwei Lu, Kyusun Choi, Shudong Wu, Xin Xu, and Francis T. S. Yu *1990 Optical disk based neural network*, Applied Optics, Vol. 28, Num. 22, 15 nov. 1989, pp 4722-4724

[Mead 89] M. A. Mahowald Carver A. Mead *1989, Silicon Retina, in Analog VLSI and Neural Systems*, pp 257-278, Addisson-Wesley Publishing Company

[Mur 88] Alan F. Murray and Anthony V. W. Smith *1988, Asynchronous VLSI Neural Networks Using Pulse-Stream Arithmetic*, I.E.E.E. Jour. of Solid-State circuits, Vol. 23, No. 3, pp 688-697

[NCR 84] *1984 Design Entry, articles extraits d'Electronic Design*, 31 Octobre 1984 au 10 Janvier 1985

[NS 90] Neural Semiconductor *1990 Documentation technique du NU32, Neural Semiconductor*, U.S.A., importateur français Tekelek Airtronic

[Paik 87] Eugene Paik, David Gunger, Joseph Skrzypek *1987 UCLA SFINX - A Neural Network Simulation Environment*, Actes Conf. I.C.N.N. San Diego, Vol. 3, pp 367-375

[Per 88] L. Personnaz, A. Johannet, G. Dreyfus, M. Weinfeld *1989 Towards a Neural Network Chip: a Performance Assessment and a Simple Exemple*, Actes Conf. NEuro Paris, I.D.S.E.T., pp 682-691

[Pere 88] Peretto Pierre, Van Zurk Robert et Mougin André *1988 Conception et réalisation d'un neuro-ordinateur de 128 unités*, Comptes rendu de fin d'étude M.R.E.S.
[Pom 88] Dean A. Pomerleau, George L. Gusciora, David S. Touretzky, H. T. Kung 1988 Neural Network simulation at WARP speed: How we got 17 million connections per second, Actes Conf. I.C.N.N. San Diego, Vol. 2, pp 143-150

[Psal 85] D. Psaltis and N. Farhat 1985 Optical Information Processing Based on an Associative-Memory Model of Neural Nets with Thresholding and Feedback, Optics Letters Vol. 10, No 2, pp 98-100

[Psal 88] Demetri Psaltis, David Brady, and Kelvin Wagner 1988 Adaptative optical networks using photorefractive crystals, Applied Optics vol. 27, No 9, pp 1752-1759

[Rec 88] M. Recce and P. C. Trealeven 1988 Parallel Architectures for Neural Computers, in Neural Computers, Ed. R. Eckmiller et P. Malsburg, Springer Verlag

[Reil 87] Douglas L. Reilly, Christopher Scofield, Charles Elbaum, Leon N. Cooper 1987 Learning System Architecture Composed of Multiple Learning Modules, Actes Conf. I.C.N.N. San Diego, Vol. II, pp 495-503

[Rod 88] A. Rodríguez-Vázquez, A. Rueda, J. L. Huertas, R. Domínguez-Castro Switched-Capacitor Neural Network for Linear Programming, Electronics Letter vol. 24 No. 8 pp 496-497

[Sage 86] J. P. Sage, K. Thompson, and RT. S. Withers 1986 An artificial neural network integrated circuit based on MNOS/CCD principles, A.I.P Conf. Actes Snowbird, pp 381-385

[Sig 88] Jacqueline Signorini 1988 Interfacing Real-Time Data Streams for Neural Networks, Actes Conf. NEuro Paris, I.D.S.E.T. 1989, pp 673-681

[Sing 90] Alexander Singer 1990 Exploiting the inherent parallelism of artificial neural networks to achieve 1300 million interconnects per second, Actes Conf. I.C.N.N. Paris, Vol. 2, pp 656-660

[Sivi 86] Massimo A. Sivilotti, Michael R. Emerling and Carver A. Mead 1986 VLSI Architectures for Implementation of Neural Networks, A.I.P Conf. Actes Snowbird, pp 408-413
[Sivi 87] Massimo A. Sivilotti, Michelle A. Mahowald and Carver A. Mead
1987, *Real-Time Visual Computations Using Analog CMOS Pro-
cessing Arrays*, Actes Standford Conf. Advanced Research in VLSI,
pp 295-312, MIT Press

[Spen 86] E. G. Spencer *Programmable Bistable Switches and Resistors for Neural Networks*, A.I.P Conf. Actes Snowbird, pp 414-419

[Tel 88] 1988 Documentation Technique sur TNode et Tandem

[Thak 86] A. P. Thakoor, J. L. Lamb, A. Moopenn, and John Lambe
*Bi-nary Synaptic Connections Based on Memory Switching in a-Si:H*,
A.I.P Conf. Actes Snowbird, pp 426-431

[Tuck 88] Lewis W. Tucker and George G. Robertson 1988 *Architecture and Applications of the Connection Machine*, Computer, Août 88, pp 26-38

[VanT 90] Rob A. H. van Twist 1990 *Pooma: Parallel Computer Systems for Data Intensive Applications*, Rapport Interne Philips

[Wag 87] Kelvin Wagner and Demetri Psaltis 1987 *Multilayer optical learning networks*, Applied Optics vol. 26, No 23, pp 5061-5076

[Wang 88] Implementation of Threshold Automata Networks with Multi-
layered on a Hypercube F.P.S. T20 1988 *Rapport de recherche*
I.M.A.G., Grenoble

[Wata 89] Takumi Watanabe, Yoshi Sugiyama, Toshio Kondo, Yoshihiro Kietamura 1989 *Neural Network Simulation on a Massively Parallel Cellular Array Processor: AAP2*, Actes Conf. I.J.C.N.N. Washington, Vol. 2, pp 155-161

[Wein 88] Michel Weinfeld, Gérard Dreyfus, Anne Johannet, Léon Person-
naz 1988 *A fully digital CMOS integrated feedback network includ-
ing the learning process*, Actes Conf. I.N.N.C. Snowbird

[Will 89] Matthew A. Wilson, Upinder S. Bhalla, John D. Uhley, James M. Bower 1988 *GENESIS: A system for simulating neural networks*, in *Advances in Neural Network Information Processing Systems*, Ed. D. Touretzky, Morgan Kaufmann Publishers, San Mateo
[Wil2 89] Matt Wilson, John Uhley, Upinder Bhalla, David Bilitch, Mark Nelson, James Bower 1988 *GENESIS & XODUS, General Purpose Neural Network Simulation Tool, in Advances in Neural Network Information Processing Systems*, Ed. D. Touretzky, Morgan Kaufmann Publishers, San Mateo

[Work 88] George A. Works 1988 *The Creation of DELTA: a New Concept in ANS Processing, Actes Conf. I.C.N.N. San Diego, Vol. II, pp 159-164*

[Yasu 89] Moritoshi Yasunaga, Noboru Masuda, Mitsuo Asai, Minoru Yamada, Akira Masaki, Yuzo Hirai 1989 *A wafer scale integration neural network utilizing completely digital circuits*, Actes Conf. I.J.C.N.N. Washington, Vol. 2, pp 213-217
# Chapitre 3

## Options d'architectures
## 3.1 Fonctionnalités et caractéristiques requises

La simplicité étant souvent gage de réussite, nous nous sommes attachés à conserver cette caractéristique durant l'établissement du cahier des charges du système, utilisant cette règle pour trancher, parfois au détriment de la performance qu'aurait autorisée une solution plus ambitieuse ou novatrice.

### 3.1.1 Interfaçabilité

La première exigence concernant notre accélérateur de simulations de réseaux de neurones porte sur la technologie: l'interfaçabilité du système doit être aisée avec les machines utilisées pour les simulations, et sur lesquelles les prétraitements et postraitements continueront d'être conduits; le système devra néanmoins procurer un gain appréciable en vitesse de simulation par rapport aux ordinateurs séquentiels classiques (stations de travail, minical-culateurs, ordinateurs centraux...).

### 3.1.2 Versatilité

L'architecture du circuit représentera un réseau de neurones pleinement connecté, de façon à être directement utilisable pour simuler des réseaux pleinement connectés et des réseaux en couches (entre autres), les deux familles les plus répandues à l'heure de l'établissement du cahier des charges. De même, dans le but de disposer d'un module destiné à un éventail large d'applications, nous avons décidé de le doter de primitives de calcul suffisamment générales pour qu'elles soient utilisables dans la plupart des algorithmes de simulation des réseaux de neurones en vigueur actuellement, en phase de relaxation comme en phase d'apprentissage. Par exemple, pour préserver la généralité du système, la fonction de seuillage sera être réalisée à l'extérieur du circuit, par l'intermédiaire du processeur hôte: ce paramètre est d'une variabilité trop grande pour être exclusivement réalisé par les ressources matérielles du circuit, dont l'utilité première est le calcul en parallèle.

Le gain en vitesse de simulation est attendu pour un domaine d'utilisation s'étalant des simulations d'ordre général (mise au point d'algorithmes, d'architectures de réseaux...) aux applications dans un cadre plus restreint et défini avec précision, possédant des contraintes temporelles et matérielles strictes.
3.1.3 Cascadabilité

Afin de pouvoir s'adapter à des tailles différentes de réseaux de neurones tout en conservant son attrait en terme de performances, le système sera cascadable, permettant à l'aide de plusieurs circuits de disposer des ressources matérielles pour la simulation à pleine vitesse de réseaux plus grands que celui contenu en un seul circuit. L'objectif est de se doter d'un module matériel de simulation de réseaux de neurones, qui sera utilisé comme composant de base pour élaborer divers systèmes de simulation. Une famille de systèmes pourra être construite à partir de SuperNode (machine parallèle à base de Transputers issue du projet européen ESPRIT P1085), ce qui procure une structure parallèle dans laquelle vient prendre place le circuit qui présentent un degré de parallélisme supérieur, tout en bénéficiant des mécanismes de communication entre processeurs, permettant simplement une cascadabilité de circuits contrôlés par des Transputers différents (les communications entre eux s'effectuent à travers des liens asynchrones).

3.1.4 Reconfigurabilité

Pour une bonne utilisation des ressources matérielles du circuit, les
paramètres clé du réseau de neurones simulé par le système seront repro-
grammables dans une certaine mesure, comme par exemple le nombre de
neurones afférents à un neurone, la dynamique des paramètres du réseau
(coefficients synaptiques de précision plus ou moins grande, états de neu-
rones binaires ou multivalués), le mode de codage de ces coefficients (nombre
positifs, signés en complément à deux), toutes ces variations étant possibles
dans la limite de l'allocation des ressources mémorisantes disponibles (cet
aspect est détaillé dans le paragraphe 4.1.1).

Les exigences fonctionnelles et de performance du système de simulation de réseaux de neurones que nous nous proposons d’élaborer ont conduit à le construire à l’aide d’un coprocesseur dédié, tirant ses performances de son parallélisme interne.

Nous avons choisi de construire ce système avec des modules digi-
taux réalisés dans une technologie classique (CMOS) à l'aide de cellules
précaractérisées (cela permet d'avoir l'assurance de la part du fondeur
d'obtenir des performances conformes aux simulations électriques après ex-
traction des capacités de routage à 20% près).
### 3.1.5 Les primitives de calcul

La primitive retenue pour la phase de résolution consiste en un calcul parallèle de produit scalaire, réalisant la somme des états de neurones pondérés par les coefficients synaptiques:

$$Pour i fixé, V_i = \sum_{j=1}^{N} C_{ij} * V_j \quad (1)$$

Cette primitive parallélise le calcul d'un réseau de neurones de manière partielle, chaque pas de calcul mettant à jour un neurone du réseau à partir de ses neurones afférents (semi parallélisme convergent). L'autre méthode pour semi paralléliser la phase de résolution est de calculer à chaque pas la contribution d'un neurone à tous les neurones du réseau (semi parallélisme divergent). Les deux méthodes présentent le même facteur d'accélération par rapport à un ordinateur séquentiel pour la simulation d'un réseau de neurones, permettant un programme en $o(N)$ pour une complexité d'algorithme en $o(N^2)$ (figure 3.1).

<figure><img src="image_9.png" /><figcaption>Figure 3.1: Formes de parallélisme</figcaption></figure>

Nous avons retenu la première approche car elle réalise directement l'implémentation d'algorithmes où le calcul des états de neurones se fait séquentiellement, chaque mise à jour pouvant déterminer le numéro du prochain neurone à modifier [Du 87]. De plus, le parallélisme sur les entrées se prête plus directement à la cascadabilité de plusieurs circuits pour traiter un problème plus gros, cette démarche n'étant justifiée que si l'on parvient à
maintenir la communication entre circuits à un minimum de données. Dans
le cas du parallélisme sur les entrées, chaque circuit traite un sous-réseau, en
dupliquant les neurones amont sur tous les circuits collaborant au calcul de
la même couche, et en regroupant ensuite les résultats partiels. Il est ainsi
virtuellement possible de simuler des réseaux de taille quelconque, la seule
contrainte étant la dynamique requise au niveau du mécanisme de collection
des résultats partiels.

En revanche, le parallélisme sur les sorties impose de se limiter au nombre de neurones d'entrée maximal prévu sur le circuit, ou bien de faire circuler d'un circuit à l'autre les états des neurones amont. Il est alors possible de faire travailler simultanément plusieurs circuits se répartissant la matrice de coefficients synaptiques (figure 3.2). La contrainte de dynamique dans ce cas est multipliée par le nombre de neurones aval, qui tous accumulent autant de résultats partiels qu'ils possèdent de neurones amont.

Enfin, le parallélisme sur les entrées permet d'obtenir des résultats de manière plus régulière, et ainsi le contrôle du flot de résultats peut aisément être réalisé par un processeur externe. L'utilisation de la fonction de seuil est ici répartie dans le temps, et un seul mécanisme matériel suffit pour réaliser cette fonctionnalité. Dans le cas du parallélisme sur les sorties, autant de mécanismes de seuillage que de neurones aval sont nécessaires si l'on veut une implémentation directe. Cette contrainte impose alors une certaine simplicité des mécanismes de seuillage, à implémenter en parallèle; une plus grande liberté caractérise l'autre approche, qui ne nécessite qu'une fonction de seuillage, éventuellement extérieure au circuit et de complexité plus grande (figure 3.2).

La primitive retenue par la suite pour la phase d'apprentissage, s'adaptant bien à l'architecture de base du circuit, consiste en une mise à jour en parallèle d'un vecteur poids, effectuant la somme vectorielle des coefficients synaptiques et d'un vecteur que nous appelons incrément de Hebb, dont chaque composante vaut +Δ, 0, ou −Δ, selon la valeur de la composante correspondante du vecteur états de neurones [Du 88]. Cela permet de réaliser par exemple l'opération suivante:

$$
Pour i fixé, C_{ij} = C_{ij} + \Delta_i * V_j \quad (2)
$$
<figure><img src="image_10.png" /><figcaption>Figure 3.2: Parallélisme avec plusieurs circuits</figcaption></figure>

On peut remarquer que ces deux primitives permettent la mise à jour de la norme d'une colonne de coefficients synaptiques sans leur lecture:

$$ 
\begin{align*}
\sum_{j=1}^{N} [C_{ij}(t+1)]^2 &= \sum_{j=1}^{N} [C_{ij}(t) + \Delta_i * V_j]^2 \\
&= \sum_{j=1}^{N} [C_{ij}(t)]^2 + 2\Delta_i * \sum_{j=1}^{N} C_{ij}(t) * V_j + \Delta_i^2 * \sum_{j=1}^{N} (V_j)^2
\end{align*}
$$

Le premier terme de la somme est la norme calculée à l'étape précédente, le second terme est obtenu par produit scalaire et faisant appel à la primitive de résolution, et le dernier terme est calculé hors du circuit.

Il est possible d'utiliser cette primitive pour des algorithmes d'apprentissages variés, par exemple:

* la loi de Hebb (application directe de la formule 2),

* l'auto-organisation de Kohonen ; c'est une règle locale, où la modification des coefficients $C_{ij}$ est une combinaison linéaire de $C_{ij}$ et de $V_j$, après avoir procédé à un calcul de distance pour déterminer les poids à
modifier. Il est donc possible de se ramener à l'équation 2 dans la formule de mise à jour, et d'utiliser la primitive implémentant l'équation 1 pour calculer la distance d'une nouvelle entrée aux vecteurs de sortie.

* la rétropropagation du gradient; c'est une règle globale, où la modification des coefficients synaptiques $C_{ij}$ s'effectue selon l'équation 2, après calcul de l'erreur sur les sorties du prototype courant et rétropropagation de cette erreur de couche en couche à l'aide de la primitive d'équation 1.

Les phases de relaxation et d'apprentissage présentent donc le même degré de parallélisme dans cette implémentation.

Ces choix préétablis décrits dans le brevet [Du 87] délimitent le cadre de mon étude concernant l'aspect matériel du système de simulation à élaborer.

## 3.2 Evaluations de niveau circuit

L'étude de ce cahier des charges permet de dégager une architecture qui servira de base à notre système de simulation de réseau de neurones (Figuure 3.3), présentant un semi parallélisme convergent portant sur N cellules (N est le nombre de neurones contribuant en parallèle au calcul du neurone courant), et devant permettre de simuler des réseaux pleinement connectés (type Hebb) comme des réseaux en couches (perceptrons...). Les grandeurs mises en jeu sont représentées par des entiers pour limiter la surface de silicium consacrée à chaque cellule, l'intérêt de notre système étant d'en maximiser le nombre sur un même circuit.

Ce schéma présente les caractéristiques principales du circuit:

* la Mémoire Synaptique, accédée à l'intérieur du circuit par colonne, donnant en parallèle les N coefficients synaptiques, correspondant aux connexions des neurones du circuit afférents au neurone dont le nouvel état est en train d'être calculé. Une colonne de registres tampons permet de libérer cette mémoire pour des accès externes, pendant qu'un résultat s'établit en sortie de l'arbre d'additionneur du circuit,

* le Registre d'Etat de Neurones, accédé en ligne à l'intérieur du circuit, pour lire en parallèle un bit de l'état de chaque neurone afférent au neurone dont le nouvel état est en train d'être calculé,
<figure><img src="image_11.png" /><figcaption>Figure 3.3: Diagramme fonctionnel à l'origine du module VLSI</figcaption></figure>

* le multiplieur bit-série, qui est formé d'un ensemble de portes ET multipliant en parallèle chaque coefficient synaptique par le bit courant de l'état du neurone correspondant,

* l'arbre d'additionneurs, dont le rôle est de sommer les N produits.

Les ressources mémorisantes du circuit (coefficients synaptiques, états de neurones) sont lues et écrites par le processeur hôte, qui contrôle le BUS BT; l'hôte accumule aussi les sommes de produits partielles dans le cas où les états de neurones afférents au neurone courant sont répartis sur plusieurs circuits, et effectue le seuillage pour donner son nouvel état. Cette architecture possède un double Registre d'Etat de Neurones (REN), afin de pouvoir simuler le mode de relaxation synchrone (mode dans lequel tous les neurones sont mis à jour simultanément, par accès aux états de neurones servant au calcul dans une banque de registres et mise à jour dans l'autre banque), et le mode de relaxation asynchrone (un Registre d'Etat de Neurones simple suffit, les états des neurones étant mis à jour dans le circuit au fur et à mesure de leur évaluation). Les coefficients synaptiques seront codés par des entiers signés en complément à deux, les états de neurones, entiers pouvant être positifs ou signés.
### 3.2.1 La Mémoire Synaptique

Cette partie est à implémenter de préférence avec des cellules compilées proposées par la chaîne de conception (pour bénéficier d'une bonne densité d'intégration et de bonnes performances sur cette partie considérée a priori comme critique dans la réalisation du composant), et le Registre d'Etat de Neurones par un assemblage de bascules (de même, pour ne pas avoir à caractériser une mémoire non classique, présentant un accès en ligne et en colonne). Les éléments de base conservant la plus grande liberté d'implémentation sont donc les multiplieurs et l'arbre d'additionneurs.

Une autre solution offrant plus de possibilités, repose sur l'utilisation d'un "register file", ensemble de bascules arrangées de façon régulière pour l'utilisation dans un chemin de données.

Pour le cas où un chemin de données serait utilisé pour une part du calcul, un avantage serait alors d'étendre sa régularité aux éléments mémorisants, permettant ainsi de maîtriser plus facilement les délais dûs à l'interconnexion des ressources.

De plus, un compilateur de chemin de données permet une grande souplesse dans le nombre de cellules à implanter et donc une meilleure adéquation des ressources au problème posé, alors que les compilateurs de RAM sont généralement plus contraignants, pour maintenir un compromis surface/fonctionnalité plus favorable.

Un "register file" permet généralement deux accès en lecture et un accès en écriture simultanés, l'adjonction d'accès supplémentaires étant plus aisée que dans une RAM où le point mémoire demande une mise au point précise. De plus, le temps de réponse est plus faible que celui d'une mémoire traditionnelle (de l'ordre de 10 ns, plusieurs fois moins que pour une RAM), ainsi que la consommation électrique (pas de "sense amplifier"). Il est donc possible avec un "register file" d'accéder à certaines données pendant que l'on effectue des calculs avec d'autres, ce qui nécessite l'ajout d'une colonne de registres dans le cas de la RAM, sa sortie reflétant l'entrée lors d'une écriture (la colonne de registre peut néanmoins avoir d'autres usages, par exemple pour faire du recouvrement d'instruction, ou bien pour l'apprentissage).

Le décodage reste à ajouter dans le cas du "register file", ce qui laisse la possibilité par exemple de ménager deux types d'accès aux coefficients synaptiques de façon à lire la matrice directe et sa transposée, par exemple pour la rétropropagation de l'erreur.

Le principal inconvénient du "register file" est son coût en surface, (à titre de comparaison, dans la technologie VLSI $1.5\mu$ utilisée pour le circuit,
un "register file" 32 * 32 bits occupe 2.9 mm², contre 2.3 mm² pour une mémoire de 64 mots de 32 bits)

## 3.2.2 Les multiplieurs

### Multiplieur à addition-décalage

Une méthode pour multiplier deux entiers de manière bit-série est décrite dans [Cava], l'algorithme à addition-décalage. Il est similaire à l'algorithme utilisé lorsque l'on pose une multiplication pour un calcul manuel, à ceci près que les calculs sont effectués dans une base puissance de deux et non en base dix. Cette méthode est simple et économe en surface, et son principe peut être étendu à différents niveaux de performances, selon l'importance que l'on désire y consacrer. Elle convient de plus pour tous types de codage des entiers considérés (positifs ou complément à deux). L'algorithme met en jeu un accumulateur (soutracteur dans le cas où le multiplieur peut être signé en complément à deux) avec extension de signe, et un décaleur d'un bit, en plus des moyens de mémorisation des opérandes et de contrôle des opérateurs. Pour multiplier deux entiers P et Q codés respectivement sur p et q bits, Q étant le multiplieur, avec $P = x_{p-1}...x_1x_0$ et $Q = y_{q-1}...y_1y_0$ en base deux, nous avons:

$Q = y_{q-1} * 2^{q-1} + ... + y_1 * 2 + y_0$ pour un codage d'entier positif,
$Q = -y_{q-1} * 2^{q-1} + ... + y_1 * 2 + y_0$ pour un codage d'entier signé en complément à deux (l'accumulateur-décaleur est de taille $p+q$, pour ne pas risquer de débordement).

Le calcul en base deux se décompose ainsi (q cycles):

$$ 
\begin{aligned}
P * Q &= \varepsilon * (y_{q-1} * 2^{q-1}) * P \\
&\quad (\varepsilon = -1 \text{ si Q est signé en complément à deux}) \\
&+ (y_{q-2} * 2^{q-2}) * P \\
&\quad \vdots \\
&+ (y_1 * 2) * P \\
&+ y_0 * P
\end{aligned}
$$

Il s'agit donc à chaque étape de sommer ou soustraire au résultat partiel, le multiplicande multiplié par le bit courant du multiplieur, avec le décalage adéquat pour faire correspondre les bits de même poids dans l'opération.
Il est commode de placer les données cadrées à droite de l'additionneur (ainsi, le même mécanisme pourra fonctionner pour tout $q$ taille du multiplieur, tel que $p + q \le$ la taille de l'additionneur; $p$ est généralement fixe, en raison du mécanisme d'extension de signe sur l'entrée multiplicande), le décaleur travaillant vers la gauche. L'accumulateur est initialisé à zéro. Si le décaleur opère en sortie de l'accumulateur (sur le produit partiel), on itère en commençant par les bits de poids fort (Figure 3.4):

<figure><img src="image_12.png" /><figcaption>Figure 3.4: Multiplieur bit-série avec décalage du résultat partiel</figcaption></figure>

Si le décaleur travaille sur l'entrée multiplicande de l'accumulateur, on itère en commençant par les bits de poids faible (Figure 3.5); cette méthode est intéressante lorsque l'on désire multiplier plusieurs nombres par le même multiplicande, n'utilisant alors qu'un mécanisme de décalage pour toutes les unités.

### Multiplieur de Booth

Une solution différente de la méthode d'addition-décalage est la méthode de Booth [Boo 51], qui tire parti des successions de bits à 1 dans le multiplieur pour gagner des opérations, tenant compte du fait que si $Q = y_{q-1} \cdots y_{i+k-1} \cdots y_i \cdots y_1 y_0$ avec $y_{i+k-1} = 1, \dots, y_i = 1$, cette série de 1, qui représente $2^{i+k-1} + \dots + 2^i$ est égale à $2^{i+k} - 2^i$. Cette méthode permet
<figure><img src="image_13.png" /><figcaption>Figure 3.5: Multiplieur bit-série avec décalage du multiplicande</figcaption></figure>

de gagner des cycles de calcul avec la présence de chaînes de 1 de longueur supérieures à trois (son temps d'exécution dépend donc des données).

## Multiplieur par recodage en paires de bits

Si l'on désire réaliser la multiplication en moins de *q* cycles, le principe de départ peut être employé, en travaillant en base quatre, huit..., donnant le résultat au bout de *q/2*, *q/3*...cycles. Pour ne pas avoir à générer des produits partiels par tous les chiffres de la base (0, 1, 2, et 3 pour la base quatre, et leur opposé dans le cas d'un multiplieur signé), l'algorithme de "recodage des bits par paires" peut être employé, permettant de se limiter à des produits par des puissances de deux (-2, -1, 0, 1, et 2 pour la base quatre), en contrepartie d'un contrôle effectué sur un bit de plus (le bit de droite de la paire courante, pris à zéro pour la première paire). Le tableau 3.1 indique la valeur par laquelle multiplier le multiplicande selon la valeur des paires de bits avant addition au résultat partiel.

Cet algorithme est basé sur l'observation des chaînes de bits à 1 et de leur valeur correspondante selon la décomposition binaire, comme l'algorithme de Booth, donnant un recodage du multiplieur de la droite vers la gauche (avec éventuellement extension du signe si *p* est impair, et ajout d'un zéro fictif à droite).

Le matériel nécessaire est alors plus important: un multiplexeur à
<table><caption>Table 3.1: Table de l'algorithm de multiplication par recodage en paires de bits</caption><thead><tr><th>Paire de bits</th><th>Bit de droite</th><th>Action sur le multiplicande</th><th>Explication</th></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td><td>*0 Pas de chaîne</td></tr><tr><td>0</td><td>0</td><td>1</td><td>*1 Fin de chaîne</td></tr><tr><td>0</td><td>1</td><td>0</td><td>*1 1 seul (+2 - 1)</td></tr><tr><td>0</td><td>1</td><td>1</td><td>*2 Fin de chaîne</td></tr><tr><td>1</td><td>0</td><td>0</td><td>*-2 Début de chaîne</td></tr><tr><td>1</td><td>0</td><td>1</td><td>*-1 Fin et début de chaîne (+1 - 2)</td></tr><tr><td>1</td><td>1</td><td>0</td><td>*-1 Début de chaîne</td></tr><tr><td>1</td><td>1</td><td>1</td><td>*0 Chaîne de 1</td></tr></tbody></table>

cinq voies en entrée de l'accumulateur, une unité complémentation à deux (changer tous les bits du nombre en leur opposé, et ajouter $p$ inverseurs et $p/2$ additionneurs), et un décaleur de un bit vers la gauche pour le multiplicande, ainsi qu'un décaleur de deux bits pour faire correspondre les bits de même poids dans l'opération.

On peut remarquer que la complexité de la tâche de contrôle est accrue, et que ces méthodes trouvent leur plein intérêt lorsque $p$ est multiple de la taille des groupes de bits considérés.

### 3.2.3 L'arbre d'additionneurs

L'objet de cet opérateur est de calculer la somme de N produits (coefficient synaptique par état de neurone), soit N nombres signés en complément à deux. Nous avions considéré au départ que cette fonctionnalité était du même ordre d'importance que celle de mémorisation des coefficients synaptiques, tant en surface occupée qu'en temps d'exécution. J'ai donc comparé différentes variantes d'implémentation à l'utilisation en arbre binaire d'additionneurs de base (Figure 3.7), du type série ("ripple carry": Figure 3.6), en utilisant des cellules précaractérisées additionneur sur 1 ou 2 bits selon différents arrangements, ou en utilisant des cellules tenant davantage compte de la spécificité du problème posé.

L'additionneur 1 bit possède trois entrées $A_i$ et $B_i$ (données), et $C_i$ (retenue), et deux sorties $S_o$ (Résultat), et $C_o$ (retenue); la fonction réalisée est décrite par les équations 3 et 4 ([Flo]):
$$S_o = \oplus(A_i, B_i, C_i) = A_i \cdot \overline{B_i} \cdot \overline{C_i} + \overline{A_i} \cdot B_i \cdot \overline{C_i} + \overline{A_i} \cdot \overline{B_i} \cdot C_i + A_i \cdot B_i \cdot C_i \quad (3)$$

$$C_o = A_i \cdot B_i + A_i \cdot C_i + B_i \cdot C_i \quad (4)$$

Le délai d'obtention de $C_o$ correspond en général au temps de traversée de deux couches logiques pour les cellules précaractérisées courantes, celui de $S_o$, à la traversée de trois couches logiques, le trajet de la retenue étant optimisé en raison de son importance dans le chemin critique des additionneurs série. Cette cellule est le seul composant nécessaire à l'additionneur à retenue ondulante. Cet additionneur calcule à la base avec des nombres positifs ou en complément à un; la duplication de la cellule de poids fort permet de travailler directement avec des nombres signés en complément à deux (Figure 3.6). Un soustracteur (en complément à un) peut être réalisé par l'inversion du bit opérande $B_i$, la soustraction en complément à deux étant ensuite obtenue en ajoutant 1, par exemple en utilisant la retenue entrante $C_i$.

<figure><img src="image_14.png" /><figcaption>Figure 3.6: Additionneur à retenue série</figcaption></figure>

L'utilisation la plus simple d'additionneurs série pour sommer N entiers (N est une puissance de 2) est un arbre binaire, comme illustré en figure 3.7.

Le chemin critique est en principe lié à la propagation de la retenue vers les bits de poids fort, selon les flèches sur les figures 3.6 et 3.7. On peut remarquer que, si l'on ne prend en compte que les délais dus à la propagation à travers les couches logiques des opérateurs, et en considérant que les bits de données et de retenue sont traités à la même vitesse (et $T_C$
<figure><img src="image_15.png" /><figcaption>Figure 3.7: Arbre binaire d’additionneurs classique</figcaption></figure>

pour la retenue), tous les chemins depuis un bit de poids faible de la première
couche au bit de poids fort du résultat sont critiqués. Dans ce cas, l’instant
d’arrivée des données et de la retenue est le même pour toute cellule qui
n’est pas située sur les bords d’entrée (où l’on fait l’hypothèse que tous les
bits de données arrivent simultanément, donc l’établissement y est dû à la
propagation verticale de la retenue dans la première couche): si l’on évalue
les instants d’arrivée des données et de la retenue d’une cellule de poids plus
fort de 1 bit dans la seconde couche, la retenue arrive après $T_D$ pour changer
de couche + $T_C$ pour monter de 1 bit, et les données de poids plus fort de
1 bit traversent la première couche en $T_D$ après avoir reçu la retenue des
poids faibles de leur couche en $T_C$. De proche en proche, toute cellule non
située sur les bords d’entrée voit arriver ses données et sa retenue au même
instant.

Le principe peut être amélioré en ajoutant un mécanisme permettant le
calcul avec de la logique autosynchronisée, signalant l’apparition du résultat
dès sa présence. Cela permet d’éviter de se baser sur le temps de traversée
dans le pire cas, mais peut s’avérer incompatible avec un pipeline éventuel
avec les opérateurs qui suivent. Enfin, cette amélioration double environ la
surface de silicium nécessaire.
mécanisme d'anticipation... pour un coût en matériel variable; les performances maximales sont les meilleures, mais pour des tailles de mots encore plus grandes que dans la technique de sommation conditionnelle. L'effet de bloc (par exemple, des blocs de quatre entrées sont courants dans la technologie CMOS) se fait sentir, la méthode étant optimale pour des tailles de mots puissance de la taille du bloc. Pour des tailles intermédiaires, un panachage des techniques peut être un compromis intéressant (dans le 68070, l'ALU 32 bits possède un étage de "lookahead" dédoublé pour les bits de poids fort, avec sélection conditionnelle). Des optimisations mettant à profit des particularités technologiques peuvent être apportées par l'utilisation de blocs de taille variable pour le "lookahead".

Ne disposant pas d'additionneurs de type "Carry Lookahead Adder" (CLA), ni "Carry Select Adder" (CSA) dans la bibliothèque de cellules, j'ai fait une évaluation approximative de l'application de ces méthodes au problème posé pour m'assurer de l'ordre de grandeur de l'influence du choix d'une conception restreinte au jeu de cellules de la bibliothèque. Le critère de référence choisi est le nombre de couches logiques traversées, selon les hypothèses suivantes (d'après [Cava]):

* $T_C = T_S = 2$ couches pour la cellule additionneur de base

* 2 couches pour le multiplexage du mécanisme d'addition conditionnel

* dans le cas du "Lookahead": +1 couche pour les fonctions "Generate" ou "Propagate"; +2 couches pour les fonctions "Group Generate", "Group Propagate", ou "Group Carry" (les seules nécessaires pour des mots de taille inférieure à 16 bits).

Par exemple, pour des arbres d'additionneurs série et avec "Lookahead" réalisant l'addition de 32 nombres 8 bits en complément à deux (cellules d'entrées sur 9 bits), on obtient les résultats présentés dans les figures 3.8 et 3.9.

Le tableau 3.3 reprend les résultats en précisant la méthode de calcul de la retenue au sein d'un bloc de 4 bits, et entre les blocs.

Certaines possibilités sont équivalentes à d'autres pour le modèle choisi: les cas Série/Série et Série/CSA, la sélection durant le même temps que la propagation dans un étage de retenue; de même, pour un calcul "Carry Lookahead" au sein du bloc, les propagations Série et "Lookahead" entre blocs sont équivalentes; les cas correspondant au mode CSA au sein du bloc ne sont pas évalués, étant moins performants que les autres pour tous les bits.
<figure><img src="image_16.png" /><figcaption>Figure 3.8: Diagramme de propagation dans un arbre d'additionneurs série</figcaption></figure>

<table><caption>Table 3.3: Propagation dans différentes architectures d'arbres d'additionneurs</caption><thead><tr><th>Type d'additionneur</th><th>Série/série</th><th>Série/CLA</th><th>CLA/CLA</th><th>CLA/CSA</th></tr></thead><tbody><tr><td>Temps de propagation en nombre de couches</td><td>34</td><td>45</td><td>37</td><td>39</td></tr></tbody></table>

Bien que les résultats soient approximatifs (la modélisation des cellules par un nombre de traversées de couches au lieu des temps réels de propagation transforme l'évaluation du chemin critique d'un problème de Min-Max en un problème combinatoire), il semble que la restriction à l'utilisation d'additionneurs série ne soit pas pénalisante vis à vis des méthodes courantes de calcul anticipé de la retenue. Pour l'exemple concret des additionneurs disponibles dans la chaîne de conception VLSI Technology, l'additionneur série reste préférable à l'additionneur "optimisé" devenu disponible après la conception du circuit (utilisant sans doute un calcul anticipé de la retenue) pour des tailles de mots inférieures à environ 16 bits.
<figure><img src="image_17.png" /><figcaption>Figure 3.9: Diagramme de propagation dans un arbre d'additionneurs avec "Carry Lookahead"</figcaption></figure>

Ces méthodes ont été développées pour le problème classique de l'addition de deux opérandes de grande taille, et sont mal adaptées au problème spécifique de l'addition de multiples opérandes de faible taille, où l'optimisation ne doit pas porter sur chaque étage mais sur l'ensemble de l'arbre si l'on ne désire pas le pipeliner. Dans le cadre de l'évaluation de structures alternatives d'arbres d'additionneurs, j'ai conduit des simulations précises à l'aide du simulateur électrique Sim de la chaîne de conception VLSI Technology pour comparer les architectures effectivement implémentables dans le cadre fixé (additionneurs série, structure du paragraphe 3.2.3).

### Addition "molle"

Le principe, présenté à l'origine par Wallace dans un multiplieur, provient de l'observation du fait que les N nombres de p bits à sommer peuvent être considérés comme p ensembles de N bits de même poids. Or la fonction logique de la cellule additionneur de base est symétrique sur ses entrées A,
$B$, et $C_i$. Il est donc possible d'utiliser les additionneurs avec trois bits d'un ensemble de même poids, chacun produisant en sortie un bit du poids de départ (le bit Somme), et un bit de poids plus fort (le bit Retenue). On réitère le procédé jusqu'à ne plus avoir qu'un ou deux bits de chaque classe de poids: deux bits sont regroupés par un demi-additionneur; le résultat final est atteint lorsqu'il ne reste plus qu'un bit dans chaque classe de poids. Un exemple pour l'addition de cinq nombres de 7 bits est donné dans la figure 3.10.

<figure><img src="image_18.png" /><figcaption>Figure 3.10: Propagation dans un additionneur "mou" de cinq nombres de 7 bits</figcaption></figure>

On peut remarquer que l'implantation de cette structure serait favorisée par un rangement des opérandes dans les éléments mémorisants de façon à ce que les bits de même poids soient proches, ceci demandant un brassage des données au chargement ou en sortie. De plus, le bénéfice de la méthode (économie de ressources et gain en vitesse) ne devient important que si l'on dispose d'un nombre suffisant de bits de même poids à additionner. Enfin, du fait du regroupement non régulier des bits entre eux d'un étage à l'autre, il n'y a pas de règle simple permettant de chiffrer le gain pour un cas donné autrement que par le dessin de son schéma (plusieurs schémas équivalents sont souvent possibles).

Le tableau 3.4 qui suit compare quatre structures d'arbres d'additionneurs simulés électriquement (sans la prise en compte de capacité de routage), deux versions de propagation en série de la retenue (avec des additionneurs en cellules précaractérisées 2 bits, et avec des chemins de données compilés couche par couche), et deux versions de propagation "molle" (avec
des cellules précaractérisées additionneurs 1 bit, et avec des cellules 2 bits lorsque cela est possible, des AND et XOR étant utilisés pour les groupes de deux bits dans les deux cas).

<table><caption>Table 3.4: Simulation de propagation dans des arbres d'additionneurs en cellules précaractérisées</caption><thead><tr><th>Type d'arbre</th><th>Série/cellules</th><th>Série/compilés</th><th>Retenue<br>molle/1 bit</th><th>Retenue<br>molle/2 bits</th></tr></thead><tbody><tr><td>Temps de propagation en ns</td><td>62.5</td><td>88.9</td><td>78.7</td><td>78.7</td></tr></tbody></table>

Les médiocres résultats de la méthode peuvent être attribués en partie à l'inadéquation des cellules précaractérisées additionneurs à cette tâche, celles-ci traitant en effet le trajet de la retenue de manière particulière puisqu'elles sont en principe destinées à être utilisées dans des additionneurs série (dans le cas de la cellule 1 bit VLSI Technology, $T_{A→S}$ = 6.9 ns, $T_{B→Co}$ = 5.3 ns, $T_{Ci→S}$ = 2.8 ns, et $T_{Ci→Co}$ = 1.6 ns). La conception d'une cellule plus équilibrée serait nécessaire, car un chemin critique est artificiellement créé par l'utilisation de celle-ci.

### Addition de bits de même poids

Si l'on désire pousser plus loin ce raisonnement, on pense à regrouper plus de bits entre eux que ne le fait l'additionneur classique, qui produit 2 bits de poids $p$ et $p+1$ pour 3 entrées de poids $p$ en deux couches de logique. La technologie CMOS autorisant une entrance (nombre d'entrées de l'opérateur, liée au "fan in" de la technologie) supérieure, considérons la généralisation des fonctions de l'additionneur à un opérateur à quatre entrées.

Pour regrouper quatre bits $a, b, c, d$ de même poids $p$ en trois sorties $X, F, A$ de poids croissants $p, p+1, p+2$, les équations 3 et 4 deviennent:

$$X(a, b, c, d) = XOR(a, b, c, d) = 1 \text{ si } A + B + C + D = 1 \quad (5)$$

$$F(a, b, c, d) = 1 \text{ si } A + B + C + D = 2 \text{ ou } 3 \quad (6)$$

$$A(a, b, c, d) = AND(a, b, c, d) = 1 \text{ si } A + B + C + D = 4 \quad (7)$$

Les fonctions $XOR$ et $AND$ peuvent être réalisées en une couche en logique de transfert [Mead 80], ce qui fait deux couches avec un buffer-inverseur. La fonction $F$ peut aussi être réalisée en deux couches (fonction combinatoire), au prix d'une dépense en surface plus importante, mais créant
un chemin critique sans cela. Il est alors possible d'assembler ces trois cel-
lules de façon à réaliser l'addition de N nombres de p bits selon un principe
dérivé de l'additionneur "mou": par exemple la figure 3.11 illustre l'addition
de 5 entiers 7 bits par des cellules à quatre entrées.

<figure><img src="image_19.png" /><figcaption>Figure 3.11: Propagation dans un additionneur de cinq entiers de 7 bits "mou", généralisé à des opérateurs à quatre entrées</figcaption></figure>

Comme dans le paragraphe 3.2.3, après quelques applications des
opérateurs X, A, F d'entrance quatre, il reste des groupes de bits de taille
inférieure, ce qui nécessite l'utilisation d'additionneurs (groupes de 3) ou de
demi-additionneurs (groupes de 2). On peut remarquer que les bits de poids
forts excédant la taille du résultat sont inutilisés (ils feront une extension de
signe).

L'intérêt par rapport à l'additionneur mou n'est pas mis en valeur par la petite taille de l'exemple, qui ne permet pas d'appliquer plusieurs fois les opérateurs d'entrance quatre.

Une première remarque est que la méthode n'est pas utilisée de façon
optimale avec des opérateurs d'entrance quatre, qui ont été présentés pour
la simplicité des équations les représentant. En effet, l'additionneur produit
deux bits de poids *p* et *p* + 1 pour trois entrées de poids *p*, ce qui est le
nombre maximal pour un résultat sur deux bits; si l'on désire un résultat
sur trois bits, on peut regrouper (si la technologie l'autorise) jusqu'à sept
entrées, le facteur de "compression" du nombre de bits calculés devenant
meilleur que pour l'additionneur de manière certaine à partir d'une entrance
de cinq (5/3 contre 3/2); néanmoins ce critère fractionnel n'est pas exact,
puisque les bits sommés au dénominateur ne sont pas de même poids. Même
dans le cas d'opérateurs d'entrance quatre, la méthode peut présenter un
en produisant le cas échéant des bits de poids plus fort en surnombre (ce qui n’est pas le cas avec une entrance de sept).

Une seconde remarque est que l’utilisation judicieuse d’opérateurs d’entrance < 7 pour un problème de taille conséquente nécessiterait une optimisation combinatoire de l’utilisation des fonctions disponibles. Si les bits de poids faibles sont relativement faciles à calculer, les possibilités se multiplient avec le poids des bits de résultat: voici quelques fonctions permettant de calculer l’addition de soixante-quatre entiers $n^0...n^{63}$ de 8 bits pour donner un résultat sur 14 bits $S = S_{13}S_{12}...S_0$:

$$ 
\begin{aligned}
S_0 = & X(X(X(n_0^0, n_0^1, n_0^2, n_0^3), X(n_0^4, n_0^5, n_0^6, n_0^7), X(n_0^8, n_0^9, n_0^{10}, n_0^{11}), X(n_0^{12}, n_0^{13}, n_0^{14}, n_0^{15})), \\
& \dots \\
& X(X(n_0^{48}, n_0^{49}, n_0^{50}, n_0^{51}), X(n_0^{52}, n_0^{53}, n_0^{54}, n_0^{55}), X(n_0^{56}, n_0^{57}, n_0^{58}, n_0^{59}), X(n_0^{60}, n_0^{61}, n_0^{62}, n_0^{63})))
\end{aligned}
$$

Pour $S_1$, il s’agit d’apparier les couples de bits de poids faible à 1, de compter les bits de poids 1, puis de voir si la somme est impaire, ce qui représente si l’on veut une fonction XOR de niveau deux du nombre représenté par les bits de poids $\le 2$ que l’on a à sommer. Pour simplifier, on peut poser l’équation sous une forme séparée, sachant que l’optimisation demanderait sans doute de ne pas distinguer les bits de poids 1 ($S'_1$) des paires de bits de poids 0 ($S''_1$) dans le XOR final:
$$S_1 = \text{XOR}(S'_1, S''_1)$$

$$S'_1 = \text{XOR3}[X(F(n^0_0, n^1_0, n^2_0, n^3_0), F(,,,), F(,,,), F(,,)), \\ \dots \\ X(F(,,,), F(,,,), F(,,,), F(n^{60}_0, n^{61}_0, n^{62}_0, n^{63}_0))), \\ X(F(X, X, X, X), \dots, F(X, X, X, X)), \\ F(X(X, X, X, X), \dots, X(X, X, X, X))]$$

$$S''_1 = X(X(n^0_1, n^1_1, n^2_1, n^3_1), X(n^4_1, n^5_1, n^6_1, n^7_1), X(n^8_1, n^9_1, n^{10}_1, n^{11}_1), X(n^{12}_1, n^{13}_1, n^{14}_1, n^{15}_1)), \\ \dots \\ X(n^{48}_1, n^{49}_1, n^{50}_1, n^{51}_1), X(n^{52}_1, n^{53}_1, n^{54}_1, n^{55}_1), X(n^{56}_1, n^{57}_1, n^{58}_1, n^{59}_1), X(n^{60}_1, n^{61}_1, n^{62}_1, n^{63}_1)))$$

A partir du calcul de $S_2$ il est nécessaire d'utiliser les trois fonctions X, F, et A.

Il est intéressant d'appliquer toutes les fonctions possibles sur un groupe de bits là où ils sont disponibles (problème de routage), par exemple $X(n^0_0, n^1_0, n^2_0, n^3_0)$ servant au calcul de $S_0$ avec $A(n^0_0, n^1_0, n^2_0, n^3_0)$ servant au calcul de $S_2, S_3...$ Un bon compromis est à chercher entre la production la plus rapide possible du résultat définitif pour un poids donné (c'est d'autant plus désirable que ce poids est faible), et la quantité d'opérateurs qui sont utilisés (exclusivement) pour cela.

Les techniques visant à mettre à profit la spécificité du problème posé ne peuvent être pleinement utilisées qu'à l'aide de cellules mises au point à cet effet (cellules ne dissymétrisant pas le trajet de la retenue pour l'addition molle, cellules réalisant les fonctions nécessaires avec l'entrance adéquate pour la dernière technique), possibilité que nous avons écartée pour ne pas augmenter les riques d'obtenir un circuit non fonctionnel.

### 3.2.4 Découplage des éléments mémorisants

Le goulot d'étranglement de la plupart des systèmes de simulation de réseaux de neurones étant les échanges de données, il est naturel d'essayer d'optimiser cette fonctionnalité. Dans le cadre de notre architecture, j'ai constaté que les ressources attenantes aux éléments mémorisants (registres tampons des coefficients synaptiques prévus initialement pour limiter la consommation électrique de la Mémoire Synaptique, et double Registre d'Etat de Neurones destiné à assurer le mode asynchrone de simulation) pouvaient le permettre
dans une certaine mesure et de manière très simple, en autorisant l'accès à
ces ressources pendant que le reste du circuit réalise un calcul.

En lecture, cela ne pose pas de problème de principe, pour autant que
les chemins des données internes ne soient pas partagés entre des blocs ap-
partenant à la fonction calcul et des blocs mémorisants (cela peut demander
d'ajouter un point de mise en haute impédance d'une partie du BUS).

En écriture, cela demande un peu plus de précaution: si le circuit est
en train d'effectuer une lecture interne, il ne faut pas que l'écriture se pro-
duise sur les mêmes données, sous peine d'invalider la lecture. Cela est rendu
possible pour la Mémoire Synaptique lorsque les registres tampons sont ver-
rouillés, l'accès à la mémoire n'étant alors plus nécessaire; pour le Registre
d'Etat de Neurones, il suffit d'accéder à la banque de registre qui n'est pas
lue (si l'algorithme neuronal le permet: le mode synchrone, principalement
utilisé dans les réseaux pleinement connectés, demande l'utilisation des deux
banques, une pour le calcul, l'autre pour la mise à jour); pour le cas où le
circuit est en phase d'écriture interne, il faut un mécanisme évitant la colli-
sion pour ne pas permettre une contention de bus, suceptible d'entraîner des
problèmes électriques plus graves que la perte des données qui l'accompagne
(électromigration). Le problème peut être résolu en n'autorisant qu'une des
voies d'écriture dans le circuit à un instant donné, ce qui supprime de facto le
risque de contention interne; si deux accès en écriture parallèles s'avéraient
accroître radicalement les performances de l'architecture, une solution plus
subtile basée sur l'utilisation de deux bus d'écriture internes muni d'un
mécanisme d'arbitrage fonctionnant sur les adresses accédées le permet-
trait, moyennant l'utilisation de blocs appropriés (mémoire à deux ports
d'écriture), et se traduisant par un accroissement important de la surface
nécessaire.

### 3.2.5 Le registre d'apprentissage

La fonction de ce registre est l'incrémentation ou la décrémentation en paral-
lèle de la colonne de coefficients synaptiques afférents au neurone courant.
Les paramètres ouverts concernent: le choix de la taille des registres (8 bits
comme dans la phase de relaxation, ou plus - 16 bits - comme certaines
simulations tendent à en prouver la nécessité: [Mak 89, Die 87]); la taille de
l'incrément $\Delta$ (1 bit pour la loi de Hebb, mais cela risque d'entraîner des
temps de convergence importants dans le cas de coefficients 16 bits: $2^{15}$ pas
pour saturer un coefficient); l'action de correction en cas de dépassement
de capacité (ne pas modifier le coefficient, le saturer à la valeur maximale,
laisser s'exécuter le dépassement).

La dynamique des coefficients s'avère particulièrement importante en apprentissage, et certaines considérations théoriques le démontrent [Pau 88,Si 90]):

* En ce qui concerne les réseaux de Hopfield, la valeur prise par les coefficients synaptiques est typiquement de l'ordre de $\pm\sqrt{P}$ où $P$ est le nombre de prototypes appris; comme $P$ est généralement de l'ordre de $N$ la taille du réseau, la précision requise pour cette application est de l'ordre de $\log_2(P/2)$,

* Pour les perceptrons simples et multicouches, la précision des neurones de sortie d'une couche doit être au moins aussi grande que celle des neurones d'entrée, sans quoi la quantification réduit la précision effective des entrées.

Le bruit de quantification peut aussi donner lieu une instabilité des algorithmes par rapport à leur version à codage en réels. Le compromis à retenir doit aussi prendre en compte la facilité de manipulation de ces coefficients (des coefficients codés sur 13 bits seraient à traduire pour chaque dialogue avec l'hôte, qui travaille avec des mots de 8, 16, ou 32 bits).

Le principe de la multiplication par recodage par paires de bits serait aussi applicable ici, pour diminuer d'un facteur 2 le temps de multiplication d'un état de neurone multivalué par un état désiré. Néanmoins, comme à l'heure de la conception du circuit de nombreuses incertitudes persistaient quant à la priorité à accorder aux différents algorithmes (utilisant ou pas des incréments résultant de fonctions de produits par des neurones multivalués), les extensions touchant uniquement aux performances sans apport à la fonctionnalité de l'unité d'apprentissage ne seront pas retenues.

Le contrôle des unités d'apprentissage pourra être augmenté d'une possibilité de ne pas incrémenter les coefficients (selon un critère à définir), ce qui me semble permettre une possibilité de convergence plus rapide (la loi de Hebb ne prévoit que l'incrémentation et la décrémentation: la convergence dans le cas d'un algorithme comme la rétropropagation du gradient, par exemple, se traduit par des oscillations d'amplitude de plus en plus faible des coefficients autour de leur valeur limite, obtenues en diminuant la valeur de $\Delta$).

Le contrôle de ces unités peut être assuré depuis l'extérieur du circuit, mais doit aussi l'être par un mécanisme interne (éventuellement simplifié), si l'on veut conserver des performances comparables en résolution et en appren-
tissage au moins dans certains cas (la décision dans le cas de la loi de Hebb se réduit à un XOR, donc peut être implémentée pour un coût modique).

Une certaine cascadabilité peut être implémentée à ce niveau, permettant à partir de coefficients synaptiques physiques 8 bits, par exemple, de faire des calculs avec des coefficients sur 16, 24... en utilisant simultanément plusieurs circuits où l'on duplique les états de neurones. En mode résolution, il suffit de charger les bits de poids faible dans des circuits travaillant comme sur des entiers positifs, les bits de poids fort étant pris en charge par un circuit effectuant ses calculs signés en complément à deux. Les résultats partiels sont ensuite additionnés avec le décalage adéquat. En mode apprentissage, des communications sont nécessaires entre les circuits: une solution simple est de transmettre les retenues sortant des Registres d'Apprentissage d'un circuit vers les retenues entrant dans les Registres d'Apprentissage du circuit traitant les poids plus forts (il faut dans ce mode que le circuit autres que celui traitant les poids fort travaillent avec des entiers non signés). La durée de l'opération est fonction de la longueur de chemin ainsi réalisé. Le contrôle de la saturation des coefficients doit être réalisé par le circuit ayant en charge les bits de poids fort, là où sont détectés les débordements éventuels. L'alternative de tout contrôler par l'hôte implique une forte limitation des performances, mais ne nécessite pas de chemins de communications dédiés à la propagation des retenues et des signaux de contrôle, qui est effectuée par des lectures/écritures dans des registres par le BUS d'usage général.

### 3.2.6 Unité Arithmétique et Logique

La mise en place sur le circuit d'une ALU plus complète que le simple additionneur soustracteur nécessaire à la sérialisation du calcul de relaxation pourrait permettre un seuillage simplifié (masquage, décalage) éventuellement préliminaire au passage dans un opérateur externe.

Dans le cas des réseaux pleinement connectés de neurones binaires (Hebb), un seuillage par marches (non continu) convient à certaines applications.

### 3.2.7 Bus dédiés

L'utilisation de BUS spécifiques à certaines données peut apporter un gain en vitesse dans certain cas, le coût en surface pouvant rester limité selon l'architecture interne (extension de chemins existants).

En particulier, les BUS nécessaires à l'automatisation de la fonction de seuillage ont été étudiés: cela recouvre la lecture d'une somme de produits,
la prise de seuil par un opérateur externe, la mise à jour dans le circuit du nouvel état de neurone. L'automatisation sera rendue complète par la possibilité donnée à cet automate de lancer le calcul d'un nouvel état de neurone d'une adresse de son choix. L'intérêt sera d'autant plus grand si les BUS en question ne sont pas en concurrence avec le BUS de contrôle d'usage général (accès simultanés possibles), moyennant éventuellement des précautions d'utilisation (cf paragraphe 3.2.4).

D'autre part, l'utilisation de l'accumulateur final pourrait être étendue à la sommation de résultats partiels calculés par plusieurs circuits; cela demande dans ce cas une entrée opérande pour additionner le résultat partiel externe à celui contenu dans l'accumulateur. Cette possibilité d'extension demandera un contrôle de l'ALU par un mode spécifique; la taille de l'ALU (et du BUS d'entrée d'opérande/sortie de résultat partiel correspondant) déterminera le nombre maximal de circuits cascadables de cette manière sans recours au processeur de contrôle ou à un mécanisme accumulateur de plus grande dynamique. Par exemple, cet usage de l'accumulateur final permettrait de réaliser la somme de $R$ résultats partiels en $LOG_2(R)$ contre $R$ cycles par le processeur de contrôle, moyennant une connexion arborescente des circuits entre eux par ces BUS.

L'utilisation de ces BUS pourrait aussi permettre de ne pas interrompre les calculs pendant le chargement/lecture par le BUS de service des données du circuit.

## 3.3 Evaluations de niveau système

Selon les options adoptées pour les opérateurs du circuit, un même algorithme neuronal se traduira par des séquences d'instructions différentes, de rapidité variable, le contrôle du ou des circuits permettra un taux de recouvrement des instructions plus ou moins grand, les échanges de données avec le processeur de contrôle seront plus ou moins fréquents...autant de facteurs qui joueront sur les performances des systèmes de simulation que l'on pourra construire à l'aide du circuit.

Pour faire une évaluation des performances et de l'efficience des circuits dans différents environnements de simulations, j'en ai comparé plusieurs en représentant graphiquement en abscisse le temps passé dans chaque opérateur, et en ordonnée la surface de silicium qu'il occupe (paragraphes 3.3.1 et 3.3.2). Cette étude préliminaire a été menée dans le cadre défini par la table 3.5, avant de disposer de la chaîne de conception du circuit, dans
le but de guider le choix parmi les options concernant les opérateurs pour le circuit, si une marge de manœuvre suffisante peut être dégagée lors de la conception pour autoriser un choix autre que le plus économe. Les unités utilisées sont la surface, évaluée en nombre de transistors (donc ne prenant pas en compte les problèmes de routage) et le délai de traversée, évalué en nanosecondes. La surface correspondant à la Mémoire Synaptique n'est pas représentée à l'échelle, l'efficience d'une mémoire n'étant pas comparable à celle de la partie exécutive, et de plus n'ayant pas de la même densité d'intégration; de toute façon, sa présence n'était pas à remettre en cause, un principe de l'architecture étant d'avoir disponibles sur le composant tous les coefficients nécessaires aux calculs. La fonction de seuillage est réalisée par l'accès à une mémoire externe rapide ("look up table").

Le circuit est évalué sur la base des ressources suivantes: 32 neurones, une Mémoire Synaptique de 32 * 32 coefficients 8 bits, un Registre d'Etat de Neurones de deux banques de 32 neurones 8 bits, des multiplieurs bit-série, un arbre d'additionneurs, un additionneur-soustracteur 32 bits pour permettre l'accumulation sur le circuit des résultats partiels des calculs avec des neurones multivalués. L'évaluation porte sur la fonction relaxation du circuit, l'unité d'apprentissage présentant des options dont le choix repose plus sur des critères de fonctionnalité que de performances dans le cadre du circuit prototype.

<table><caption>Table 3.5: Paramètres de l'évaluation surface/temps des opérateurs</caption><thead><tr><td>Opérateur</td><td>Surface équivalente en transistors</td><td>Traversée en ns</td><td>Opération</td></tr></thead><tbody><tr><td>Mémoire Synaptique</td><td>8k</td><td>60</td><td>E/S interne colonne</td></tr><tr><td>Multiplieur 1 bit</td><td>0.5k</td><td>10</td><td>produit par addition/décalage</td></tr><tr><td>Multiplieur 2 bits</td><td>1.6k</td><td>10</td><td>produit "bit pair recoding"</td></tr><tr><td>Arbre d'additionneurs 9 bits</td><td>8k</td><td>70</td><td>produit par addition/décalage</td></tr><tr><td>Arbre d'additionneurs 10 bits</td><td>8.8k</td><td>70</td><td>produit "bit pair recoding"</td></tr><tr><td>Arbre 9 bits pipelineé</td><td>12k</td><td>30</td><td></td></tr><tr><td>ALU 32 bits</td><td>0.7k</td><td>30</td><td></td></tr><tr><td>Décaleur</td><td>0.2k</td><td>10</td><td></td></tr><tr><td>E/S</td><td>0.1k</td><td>20</td><td>pour 1 pad</td></tr><tr><td>R.E.N.</td><td>1k</td><td>20</td><td>E/S</td></tr><tr><td>Seuillage</td><td>extérieur</td><td>40</td><td>Look up Table</td></tr></tbody></table>
## 3.3.1 Systèmes à un circuit

Les possibilités envisagées pour le contrôle du circuit s'échelonnent:

* d'un pilotage complet par le processeur hôte,

* en passant par l'assistance d'un mécanisme de microcode pour automatiser les calculs série,

* par l'adjonction d'un automate externe effectuant la prise de seuil et la mise à jour du neurone courant (avec éventuellement la possibilité de contrôler le numéro du neurone courant),

* par l'automatisation de l'accumulation des résultats partiels dans le cas de produits réalisés par plusieurs circuits,

* jusqu'à un contrôle par un automate dédié assurant à grande vitesse le séquencement des instructions spécifiques du circuit.

Le choix du processeur hôte exerce une influence importante sur les performances des systèmes envisagés. La figure 3.12, extraite de [Tran 89], indique le fonctionnement des principaux signaux de contrôle du BUS du Transputer: les adresses sont présentes pendant 50 ns et sont à mémoriser sur le front descendant du signal Alen; les données arrivent ensuite, et sont lues pendant que le signal NotMemRead est bas, ou écrites sur le front descendant des signaux NotMemWr (un par octet du BUS); le signal NotMemWrDel, qui correspond à un retard d'une phase des signaux NotMemWr, a été ajouté aux signaux définis par le protocole du BUS du Transputer pour des raisons de séquencement interne du circuit neuromimétique. Dans le cas d'un Transputer T800 à 20 MHz, le temps de cycle lors d'un accès à la mémoire interne (4 k octets) est de 50ns; il semble judicieux d'y installer le programme de contrôle, si possible. Les accès à la mémoire externe se font en trois cycles au minimum (Bus adresses/données multiplexés), durée minimale d'un ordre au circuit. En fait, le Transputer accède aux données de sa mémoire par rapport au pointeur sur le début de l'espace de travail, ayant besoin approximativement d'un cycle (50 ns) par demi octet de décalage avec l'adresse accédée dans le cas d'un accès absolu; ce demi-octet est l'opérande de l'autre demi-octet, l'instruction de base. Le Transputer lisant ses instructions par groupes de 4 octets qu'il stocke pour les traiter un à un, un certain recouvrement est possible, le temps de FETCH se noyant dans le temps d'exécution de l'instruction. L'examen du manuel de l'assemblée du Transputer indique que pour des instructions portant sur des adresses éloignées du pointeur
d'espace de travail, il est plus avantageux de faire un accès indexé qu'un accès à une adresse absolue.

On peut remarquer qu'il n'est pas très facile de déterminer combien de temps va prendre l'exécution d'une instruction, et qu'il est important de s'attacher à travailler avec des variables les plus proches possibles du pointeur d'adresse indiquant le début de la zone de travail. L'utilisation de l'instruction `MOVE-BLOCK` permet de se limiter à trois cycles pour des échanges de tableaux (par exemple, matrice de coefficients synaptiques), les adresses (même éloignées) étant incrémentées de façon interne au Transputer; dans le cas général, une recherche et élaboration de l'instruction suivante est inévitable (que l'on peut improprement assimiler à un `FETCH`). Un processeur hôte plus rapide, possédant éventuellement des BUS adresses, données, programme séparés, permettrait de raccourcir le temps de cycle de contrôle du circuit, au détriment des possibilités de communication des Transputers utilisées dans le cas de grands réseaux répartis sur une structure parallèle de contrôle.

<figure><img src="image_20.png" /><figcaption>Figure 3.12: Cycle de fonctionnement du Transputer INMOS</figcaption></figure>

J'ai comparé graphiquement diverses options d'architectures à l'architecture retenue, ne prenant en compte que la partie opérative des composants pour rendre compte de leur complexité par une surface, ce qui permet de juger du taux d'utilisation interne du silicium dans différents cas de programmation, ainsi que de la vitesse. Cette mesure (proposée par [Mar 86]) procure une information synthétique, et le schéma qui l'engendre souligne la contrainte correspondante sur le circuit, permettant d'évaluer rapidement les traits caractéristiques de plusieurs options d'architecture pour une même
fonctionnalité. Ces schémas représentent en abscisse le temps passé dans chaque opérateur du système étudié, et en ordonnée la surface équivalente de silicium occupée sur le circuit; l'étude porte sur quelques problèmes types. En grisant les rectangles correspondant à l'activité des opérateurs du circuit dans cet environnement, une évaluation de taux d'efficacité peut être effectuée sur la base du rapport η entre la surface grisée par la surface totale du schéma. Sur les schémas, la zône active du circuit est délimitée par une bande horizontale de points dont la largeur correspond à la partie active considérée, en milliers de transistors; l'espacement vertical des points représente 1k transistors, et horizontal, 10 ns.

La prise en compte de la partie active uniquement dans le calcul du coût de chaque solution (et pas la RAM Synaptique, par exemple) permet de supprimer un important terme constant dans les valeurs relevées, qui empêche les tendances des différentes options de s'affirmer. D'autre part, c'est d'autant moins gênant ici: les parties mémorisantes ne donnant pas véritablement lieu à un choix, le même terme serait apparu dans toutes les figures.

Une première série de schémas permettent de comparer l'influence de certaines options (multiplication par "bit pair recoding", contrôle interne du séquencement) sur les performances maximales à attendre d'un système à un circuit, dans le cas de neurones binaires et codés sur 8 bits.

La figure 3.13 illustre le cas d'un état de neurone binaire calculé à l'aide d'un circuit contrôlé uniquement par son processeur hôte (un Transputer). Aucun recouvrement n'est donc réalisable; le processeur hôte est supposé ne pas assurer d'autres tâches qui nécessiteraient son intervention durant le contrôle du circuit (et se traduirait par une perte de temps). La contrainte limitant la valeur du rendement est ici le temps de cycle du Transputer hôte.

La figure 3.14 représente un cycle de calcul de neurone binaire dans le cas où l'implémentation d'un automate permet un recouvrement des instructions dans le circuit. Le recouvrement maximal toléré dans le circuit est calculé à partir de la recherche de la "race condition" donnant le délai minimum pour que les sorties d'un opérateur commencent à traduire une modification de ses entrées, calcul basé sur le nombre de couches logiques traversées par le chemin le plus court des entrées vers une sortie. Cela donne l'approximation suivante: REN, 5ns; multiplieur, 5ns; arbre d'additionneurs, 15ns; ALU, 5ns; d'où un total de 30ns si l'on utilise les opérateurs séquentiellement de manière asynchrone. Le recouvrement est limité ici par les accès du contrôleur. La contrainte limitant la valeur du rendement reste le temps de cycle du Transputer hôte.
<figure><img src="image_21.png" /><figcaption>Figure 3.13: Cycle pour 1 neurone binaire, contrôle par Transputer seul, multiplieur 1 bit</figcaption></figure>

<figure><img src="image_22.png" /><figcaption>Figure 3.14: Cycle pour 1 neurone binaire, contrôle par Transputer + automate de seuillage et mise à jour, multiplieur 1 bit</figcaption></figure>

Les deux figures suivantes illustrent le calcul de l'état d'un neurone dont les neurones afférents sont codés sur 8 bits.

La figure 3.15 présente la multiplication des coefficients par les états de neurones selon un algorithme "bit pair recoding" dont le contrôle est assuré par un automate interne au circuit, ce qui permet de ne limiter le degré de recouvrement que par la contrainte de 30ns entre le début d'un nouveau calcul partiel et l'instant d'accumulation du résultat partiel courant. La contrainte limitant la valeur du rendement est ici l'utilisation de l'arbre
d'additionneurs du circuit.

<figure><img src="image_23.png" /><figcaption>Figure 3.15: Cycle pour neurone 8 bits, contrôle par Transputer + automate de seuillage et mise à jour, multiplieur 2 bits</figcaption></figure>

La figure 3.16 illustre l'utilisation de latches pour tous les opérateurs (avec découpage en cinq tranches pour l'arbre d'additionneurs) de façon à diminuer la période minimale du recouvrement interne (on arrive ici à 40ns). La multiplication est assurée ici par un algorithme d'addition décalage en série. Le nombre d'étages étant important, ce procédé est mis en valeur par des calculs portant sur des neurones afférents à grande dynamique (8 bits, voire 16 bits par l'utilisation successive des deux banques); il peut être amélioré par l'extension du recouvrement à la prise de seuil et mise à jour par un automate de seuillage externe comme vu précédemment (difficulté de mise au point car ces opérateurs sont en dehors du circuit, et accroissement du nombre d'étages). Un cycle est perdu lors de chaque accès RAM.

Il est envisageable de procéder à un recouvrement des calculs d'états de neurones successifs dans le cas de neurones d'entrée multivalués comme dans le cas de neurones binaires, ce qui permet de maintenir un meilleur remplissage du pipeline, au prix d'un contrôle des opérateurs plus délicat à assurer, le pipeline étant plus long. Par exemple, les adresses de mise à jour des neurones doivent circuler avec les données correspondantes, plusieurs états de neurones étant en cours de calcul à un instant donné; cette technique sera d'autant plus difficile à pousser à son maximum si l'on désire garder la reconfigurabilité sur la taille des neurones afférents (longueur de pipeline variable).
<figure><img src="image_24.png" /><figcaption>Figure 3.16: Cycle pour neurone 8 bits, contrôle par Transputer + mémoire programme + automate de seuillage et mise à jour, multiplieur 1 bit</figcaption></figure>

Les tableaux 3.6 et 3.7 rassemblent les évaluations des cas évoqués ci-dessus. La colonne de titre "Délai total" contient le temps nécessaire à l'obtention du résultat sur un neurone à partir de l'instant de début du calcul correspondant; la colonne de titre "Délai moyen" contient le temps moyen nécessaire à l'obtention du résultat sur chaque neurone dans le cas du calcul d'un grand nombre de neurones (bénéficiant de recouvrement le cas échéant).

De manière générale, la structure est mieux utilisée (et $\eta$ grand) si la contrainte qui fixe la valeur du rendement porte sur l'arbre d'additionneurs, la ressource la plus importante de ce modèle. Le rendement $\eta$ est à mon sens un critère d'importance moindre que le délai de mise à jour d'un neurone; son imprécision provient de l'importance de la surface occupée par les éléments mémorisants sur ce circuit et surtout des connexions, dont la variation selon les différentes options ne peut être prise en compte qu'après placement et routage des schémas correspondants.

Le circuit désiré se devant de traiter une large famille de problèmes de manière aussi homogène que possible, un compromis en vitesse d'exécution est à rechercher sur les tableaux en ce sens.

Le même type d'évaluateur pourrait être employé pour juger de l'efficacité d'un système avec plusieurs circuits, mais il faudrait prendre en compte des données beaucoup plus précises pour que cela garde un sens (temps de réponse des circuits, capacité des connexions de la carte...).
<table><caption>Table 3.6: Evaluation surface/temps des opérateurs pour un circuit</caption><thead><tr><th>Neurones d'entrée</th><th>Multiplication</th><th>Contrôle</th><th>Recouvrement</th><th>η (%)</th><th>Délai total (ns)</th><th>Délai moyen (ns)</th></tr></thead><tbody><tr><td>Binaires</td><td>1 bit</td><td>T800</td><td>Sans</td><td>9</td><td>650</td><td>650</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique</td><td>Sans</td><td>19</td><td>320</td><td>320</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique</td><td>Limité par le contrôle</td><td>31</td><td>320</td><td>200</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide (70ns)</td><td>Limité par les données</td><td>87</td><td>320</td><td>70</td></tr><tr><td>Binaires</td><td>2 bits</td><td>T800</td><td>Sans</td><td>8</td><td>650</td><td>650</td></tr><tr><td>Binaires</td><td>2 bits</td><td>T800 + seuillage automatique</td><td>Sans</td><td>18</td><td>320</td><td>320</td></tr><tr><td>Binaires</td><td>2 bits</td><td>T800 + seuillage automatique</td><td>Limité par le contrôle</td><td>29</td><td>320</td><td>200</td></tr><tr><td>Binaires</td><td>2 bits</td><td>T800 + seuillage automatique + séquencement rapide (70ns)</td><td>Limité par les données</td><td>82</td><td>320</td><td>70</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800</td><td>Sans</td><td>26</td><td>2000</td><td>2000</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur 1 neurone)</td><td>38</td><td>1250</td><td><u>1250</u><sup>3</sup></td></tr><tr><td>8 bits</td><td>2 bits</td><td>T800</td><td>Sans</td><td>25</td><td>1200</td><td>1200</td></tr><tr><td>8 bits</td><td>2 bits</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur 1 neurone)<sup>4</sup></td><td>36</td><td>850</td><td><u>850</u></td></tr></tbody></table>

<footnote n="3">³Les chiffres les plus significatifs sont soulignés, correspondant aux utilisations les plus fréquentes a priori</footnote>

<footnote n="4">⁴Il n’est pas possible de faire du recouvrement sur plusieurs neurones ici, le temps mort dû à l’accès RAM étant équivalent au délai de traversée de la partie opérative; il serait nécessaire d’augmenter le nombre d’étages du pipeline pour cela</footnote>
<table><caption>Table 3.7: Evaluation surface/temps des opérateurs pour un circuit (suite)</caption><thead><tr><th>Neurones d'entrée</th><th>Multiplication</th><th>Contrôle</th><th>Recouvrement</th><th>η (%)</th><th>Délai total (ns)</th><th>Délai moyen (ns)</th></tr></thead><tbody><tr><td>8 bits</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone à 9 étages (25 MHz, sur 1 neurone)</td><td>15</td><td>1020</td><td><u>1020</u></td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone (sur plusieurs neurones)</td><td>89</td><td>1020</td><td><u>360</u></td></tr><tr><td>8 bits</td><td>2 bits</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone (sur plusieurs neurones)</td><td>80</td><td>860</td><td><u>160</u></td></tr><tr><td>16 bits</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone (sur 1 neurone)</td><td>62<sup>5</sup></td><td>1340</td><td>1340</td></tr><tr><td>16 bits</td><td>1 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle</td><td>49</td><td>2050</td><td>2050</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone (sur 1 neurone)</td><td>10</td><td>740</td><td>740</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide</td><td>Pipeline synchrone (sur plusieurs neurones)</td><td>50</td><td>740</td><td>80</td></tr></tbody></table>

Pour comparaison avec les valeurs du tableau 2.1, le tableau 3.8 reprend les options les plus significatives et donne les performances en Million de connexions par seconde pour un circuit (l'architecture trouvant son plein intérêt si elle permet de contrôler un ensemble important de circuits en parallèle avec une augmentation significative des performances, par exemple linéraire du nombre de circuits mis en jeu).

<footnote n="5">⁵ 94 si l'on fait du recouvrement sur plusieurs neurones</footnote>
<table><caption>Table 3.8: Evaluation en Mconnexions/s d'options d'architecture pour la phase de résolution</caption><thead><tr><th>Neurones d'entrée</th><th>Multiplication</th><th>Contrôle</th><th>Recouvrement</th><th>Mconnexions par seconde</th></tr></thead><tbody><tr><td>Binaires</td><td>1 bit</td><td>T800</td><td>Sans</td><td>25</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide (70ns)</td><td>Limité par les données</td><td>229</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur 1 neurone)</td><td>13</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800 + seuillage automatique + séquencement rapide (70ns)</td><td>Limité par les données</td><td>50</td></tr><tr><td>8 bits</td><td>2 bits</td><td>T800 + seuillage automatique + séquencement rapide (70ns)</td><td>Limité par les données</td><td>100</td></tr></tbody></table>

Une étude similaire dont les résultats principaux sont portés dans le tableau 3.9 permet d'indiquer un ordre de grandeur des performances en- visageables d'un circuit en apprentissage, pour des coefficients synaptiques 16 bits déjà présents dans les Registres d'Apprentissage, le Registre d'Etat de Neurones et l'incrément $\Delta$ étant aussi chargés (la prise en compte de lectures/écritures des opérandes et résultats peut diviser ces chiffres par un facteur variant de 2 à 10).

### 3.3.2 Systèmes à plusieurs circuits

L'évaluation du comportement optimal de systèmes à plusieurs circuits pour la simulation de différents réseaux (plusieurs circuits pour augmenter le nombre de neurones afférents, réseaux en couches) peut être déduite du paragraphe précédent dans une certaine mesure. De nombreuses possibilités d'architectures sont permises avec des systèmes mettant en œuvre ce type de circuits, une étude détaillée permettant d'optimiser au coup par coup le problème posé en fonction des critères choisis.
<table><caption>Table 3.9: Evaluation en Mconnexions/s d'options d'architecture pour la phase d'apprentissage</caption><thead><tr><th>Neurones d'entrée</th><th>Multiplication</th><th>Contrôle</th><th>Recouvrement</th><th>Mconnexions par seconde</th></tr></thead><tbody><tr><td>Binaires</td><td>1 bit</td><td>T800</td><td>Sans</td><td>25</td></tr><tr><td>Binaires</td><td>1 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur les neurones)</td><td>25</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800</td><td>Sans</td><td>8</td></tr><tr><td>8 bits</td><td>1 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur les neurones)</td><td>32</td></tr><tr><td>8 bits</td><td>2 bit</td><td>T800</td><td>Sans</td><td>13</td></tr><tr><td>8 bits</td><td>2 bit</td><td>T800 + calcul série microcodé</td><td>Limité par le contrôle (sur les neurones)</td><td>46</td></tr></tbody></table>

Quelques règles générales sont exposées dans les paragraphes suivants.

## Systèmes comportant une couche répartie sur plusieurs circuits

Lors de l'utilisation de plusieurs circuits pour le calcul d'une même couche (comme suggéré par la figure 3.2), par exemple $p * N$ neurones en un réseau pleinement connecté (où $N$ est le nombre de neurones par modules), $p^2$ circuits sont nécessaires: en effet, la capacité en nombre de coefficients synaptiques contenus d'un module est $N^2$, et le nombre total de coefficients synaptiques nécessaires est $(p * N)^2 = p^2 * N^2$. Les modules sont disposés en carré, chacun ayant à charge la sous-matrice correspondant à sa position; les états de neurones sont dupliqués dans tous les circuits d'une même colonne du pavage ainsi réalisé. Dans le cas du mode asynchrone de mise à jour, ces ressources permettent de calculer simultanément $p$ neurones puisque les modules situés sur des colonnes différentes travaillent sur des données indépendantes. Le délai de mise à jour du réseau complet est donc approximativement le même que dans le cas d'un seul circuit (un facteur correctif est à apporter selon le délai supplémentaire apporté par le mécanisme de prise de seuil implémenté, à cause du temps nécessaire au regroupement des résultats partiels répartis sur tous les circuits de chaque colonne avant seuillage). Pour que cette règle d'evaluation soit valide, il faut que l'algorithme
permette ce parallélisme (le mode synchrone de mise à jour, par exemple), et
que le contrôle des différents groupes de circuits travaillant ensemble puisse
être assuré en parallèle (ainsi que l'accès aux ressources hors du circuit,
comme la fonction de seuillage, par exemple).

Réseaux multicouches avec plusieurs circuits

Les réseaux multicouches non récurrents peuvent être calculés avec un recou-
vrement d'une couche à l'autre, donc le temps nécessaire à leur relaxation est
le même que celui de la plus grande de leurs couches (le principe précédent
étant applicable pour cette couche), pour autant que le contrôle des circuits
représentant chaque couche puisse être assuré en parallèle et que l'accès aux
opérateurs externes aux circuits ne crée pas de goulot d'étranglement.

On peut remarquer que les réseaux multicouches de taille réduite peuvent
être calculés en mettant en jeu moins de circuits qu'il n'y a de couches dans
le réseau, en raison du mode de mise à jour semi-parallèle convergent, au prix
d'une perte de performance théorique. Par exemple, un circuit suffit pour
contenir tout réseau multicouche dont le nombre total de neurones n'excède
pas N nombre de neurones contenu dans un circuit.
Bibliographie

[Boo 51] Booth A. D. 1951 *A signed binary multiplication technique*, *Quarterly Journal of Mech. Appl. Math.*, No. 4, Vol. 2, pp 236-240

[Cava] Joseph Cavanagh in *Digital Computer Arithmetic: Design and Implementation*, chap. *Fixed point multiplication*, Computer Science Series, p 137-187

[Mar 86] E. Martin, R. Reynaud, P. Ellaume, C. Wanbergue, F. Devos 1986
Une architecture optimisée de processeur de filtrage numérique
intégrés, évaluation graphique de son rendement, Traitement du
Signal, juin

[Die 87] S. Diederich and M. Opper 1987 *Phys. Rev. Lett.*, **58**, p. 949

[Du 87] Marc Duranton, Jean Gobert, Jacques-Ariel Sirat 1987 *Structure de réseau de neurones et circuit et arrangement de réseaux de neurones, brevet No. 87 18 044 enregistré pour la France le 23 déc.*, Laboratoire D'Electronique Philips

[Du 88] Duranton Marc, Sirat Jacques Ariel 1988 *Circuit intégré neuromimétique avec des moyens d'apprentissage*, brevet No. 88 17 109 enregistré pour la France le 23 déc., Laboratoire D'Electronique Philips

[Flo] Ivan Flores in *The logic of computer arithmetic*, W. L. Everitt Ed. Prentice Hall

[Mead 80] Carver Mead, Lynn Conway in *Introduction to VLSI systems*,
*Addison Weysley Publishing Company*

[Pau 88] J. J. Paulos and P. W. Hollis 1988 *Neural Networks, 1 (suppl. 1)*, p. 399
[Mak 89] S. Makram-Ebeid, J. A. Sirat and J. R. Viala 1989 *A rationalised error backpropagation algorithm*, Proc. INNS, IEEE, Washington, D.C., 18-22 Juin

[Si 90] J. A. Sirat, D. Jorand 1990 *Third order Hopfield networks: extensive calculations and simulations*, Philips J. Res. Vol. 44, No. 5, pp 501-519

[Tran 89] INMOS in *The Transputer Databook*, Second Edition 89
# Chapitre 4

## Architecture retenue
Ce circuit simule le calcul d'un réseau de neurones avec un parallélisme partiel: les neurones sont mis à jour l'un après l'autre, et les multiplications des poids synaptiques par les états de neurones sont sérialisées bit par bit selon les états de neurones. Le compromis sur les performances ainsi réalisé permet en contrepartie d'augmenter le degré de parallélisme sur le nombre de neurones afférents pris en compte pour la mise à jour d'un neurone, d'où est attendu un gain en vitesse de simulation.

Le parallélisme du prototype porte sur 16 neurones, codés sur 1 à 8 bits; la dynamique des coefficients synaptiques est de 8 bits en résolution, 16 bits en apprentissage (une extension de ces plages de dynamique peut être obtenue moyennant une utilisation adéquate des ressources).

Les communications avec l'hôte, qui considère le circuit comme une partie de sa mémoire, sont assurées par un BUS 32 bits, d'autres BUS pouvant servir à alléger la tâche du processeur de contrôle; la délocalisation du contrôle du circuit intervient aussi au niveau du décodeur d'instructions, et d'automates implémentant les tâches répétitives.

Le diagramme de la figure 4.1 représente les blocs fonctionnels composant le circuit et la manière dont ils sont assemblés.

Le paragraphe qui suit précise chaque bloc fonctionnel, et l'influence des choix de conception le concernant sur les performances du circuit.

## 4.1 Détails de l'architecture interne du circuit

Les choix demeurés ouverts furent rapidement orientés vers les solutions les plus économiques en surface après estimation du routage, qui s'avéra être beaucoup plus lourd que prévu. Le choix de la technologie $1.5\mu$ étant arrêté (jugée plus fiable que la technologie $1\mu$ toute récente), le circuit prototype destiné à illustrer l'architecture de simulateur de réseaux de neurones proposée implémente un parallélisme sur 16 neurones.

Un recouvrement de l'activité d'opérateurs interne au circuit n'a pas été retenu, pour plusieurs raisons:

* pour certaines applications, l'ordre d'évaluation des neurones dépend du résultat de la mise à jour du neurone précédent, ce qui provoquerait une invalidation du pipeline trop fréquente pour que le mécanisme reste intéressant,

* la mise au point du pipeline demande une évaluation précise des différents opérateurs qui le composent pour ajuster l'horloge au mieux,
<figure><img src="image_25.png" /><figcaption>Figure 4.1: Diagramme fonctionnel du circuit LNEURO 1.0</figcaption></figure>

ce qui aurait exigé un travail de simulation plus important lors de la
phase de placement routage, en tenant compte de capacités calculées
avec précision,

* la comparaison des temps de traversée de l'arbre d'additionneurs asynchrone et celle d'un étage doté de registre pour le recouvrement, selon des chiffres provenant du fondeur et non d'estimations, laisse entendre que la technique de recouvrement n'apporte pas un avantage décisif à l'architecture: le temps de réponse dans le premier cas est jugé suffisamment faible en regard au temps de cycle du processeur hôte choisi (62.5 ns arbre d'additionneurs + 35 ns ALU par bit, contre 40 à 45 ns, correspondant à l'étage Accumulateur final qui est le plus long du pipeline). De plus, le gain théorique (d'un facteur de l'ordre de 3, tableaux 3.6 et 3.7, pour des neurones 8 bits et un produit bit-série dans les deux cas) n'est à attendre qu'au prix d'un mécanisme permettant un recouvrement sur le calcul de plusieurs neurones; ceci est jugé
trop contraignant pour un circuit d'usage général et un premier prototype, le gain en performances chutant beaucoup si l'on n'adopte pas de recouvrement multi-neurones (plus que 25% de gain par un pipeline sur un seul neurone: tableaux 3.6 et 3.7). De plus, si les performances sont jugées trop faibles, un gain d'un facteur 2 est aisé à obtenir dans le cas de neurones multivalués, par une technique de multiplication plus sophistiquée.

Le sujet initial de l'étude proposait d'aborder la conception du circuit VLSI en se dotant d'une bibliothèque de cellules "neuronales", permettant de diminuer le temps de conception des générations suivantes du circuit. Cette approche a peu à peu été délaissée au profit de l'optimisation du comportement du circuit au sein d'un système d'accueil, par exemple en déterminant le protocole de transfert de données en fonction de leur dynamique de codage (propre aux choix retenus pour un circuit), et en raison des fonctionnalités de contrôle dépendant des paramètres du circuit, comme celle touchant aux registres des Fonctions d'Apprentissage.

Ainsi le bloc de 4 neurones est utilisé comme une macro-cellule, instanciée huit fois lors des premiers essais de placement-routage pour un circuit réaliser un parallélisme sur 32 neurones, puis quatre fois sur la version actuelle du circuit. Néanmoins, plusieurs jours ont été nécessaires pour passer du premier schéma à celui de LNEURO 1.0, les modifications des décodages internes, BUS...et surtout l'adaptation en fonction des ca- ractéristiques électriques nouvelles n'étant pas automatiques.

Une approche visant à automatiser la phase de conception, paramétrée selon les besoins de l'application considérée, reposant sur des outils tels les compilateurs VLSI Technology, est proposée dans [Oua 90]. Cette approche de "compilation de circuits neuronaux" est basée sur une architecture de type systolique régulière (semi-parallélisme divergent, communication par registre à décalage), qui se prête sans doute plus à une génération automa- tique que l'architecture sur laquelle est basé LNEURO 1.0, mais risque aussi d'entrainer des difficultés pour utiliser pleinement le BUS de chargement des données, et pour contrôler le ou les circuits dans leur environnement; enfin, un coût élevé de fonderie pour chaque série de circuits réserve ce principe à des applications déjà parfaitement simulées au préalable plus qu'à une machine d'usage général.

Au départ du projet, le circuit était prévu pour être compatible avec des boîtiers mémoire standard (une démarche proche est adoptée dans [Mil 87]), de façon à pouvoir remplacer une partie de la mémoire de son ordinateur
par une mémoire dotée de possibilités de calcul neuronal. Cet artifice de
représentation rapproche le mode digital de calcul adopté de l'asynchronisme
intrinsèque au symbolisme du calcul neuronal, le résultat étant disponible
après un temps de stabilisation de ses sorties propre à chaque circuit, pour
être alors éventuellement utilisé dans d'autres calculs. Ainsi, le contrôle du
circuit est réalisé par des accès à des adresses internes, les registres du com-
posant étant naturellement accédés comme de la mémoire (états de neu-
rones, coefficients synaptiques, registres de contrôle et microcode...), et les
commandes étant exécutées par une lecture ou une écriture à des adresses
particulières.

4.1.1 Les opérateurs

* La mémoire synaptique est constituée de quatre blocs RAM précompilés, d'un rapport largeur/taille de mot aussi élevé que possible (une largeur de mot de 32 bits étant le maximum autorisé par les outils VLSI Technology, cela pour une profondeur minimale de 64 mots), pour alimenter le parallélisme interne du circuit. Ce choix est l'assurance d'une grande densité d'intégration pour la fonction de mémorisation des coefficients synaptiques. La profondeur est supérieure au strict nécessaire, et permet de stocker 32 colonnes de coefficients 16 bits, à mettre en regard avec deux fois 16 états de neurones mémorisables sur le circuit (2 banques, en mode asynchrone): cela donne au circuit les ressources pour contenir deux réseaux pleinement connectés de 16 neurones, travaillant en résolution avec des états de neurones et des coefficients synaptiques codés sur 8 bits, et en apprentissage sur des coefficients synaptiques 16 bits.

La possibilité d'accès au circuit en lecture (en particulier à la Mémoire Synaptique) pendant que le circuit continue à faire des calculs (par exemple, lorsqu'un automate externe de séquencement des neurones à mettre à jour demande une lecture de coefficients synaptiques) n'a pas été jugée nécessaire étant donné le spectre moyen des applications envisagées. L'ajout d'un BUS interne aurait été nécessaire pour cela; de plus, un moyen de séquencement automatique de plusieurs pas d'apprentissage n'est pas envisageable simplement (et pas implémenté sur le composant) en raison du niveau de prise décision qu'il implique, et généralement des traitements établissant la valeur suivante de Δ. L'impossibilité de faire du recouvrement pendant la phase d'apprentissage d'un algorithme enchaînant apprentissages et
résolutions a donc été acceptée. En revanche, l'accès en écriture au circuit n'est pas interdit, d'où la possibilité de faire du recouvrement pendant l'exécution automatisée de phases de résolution.

Afin de pouvoir effectuer lectures et écritures de la Mémoire Synaptique du composant sans état d'attente pour un Transputer à 20 MHz, la brièveté de l'intervalle d'ouverture du BUS (deux phases, soit 50 ns au niveau du Transputer) a poussé au choix du mécanisme suivant: une lecture est systématiquement effectuée dès que l'instruction d'accès à la Mémoire Synaptique est décodé, à l'adresse correspondante (sur le front descendant de ALEN, cf. figure 4.1), puis, si une écriture est demandée (apparition d'un signal NotMemWr), l'écriture est réalisée comme un second accès à la Mémoire Synaptique, par le signal Not-MemWrDel.

La mémoire est compilée avec un BUS d'adresse, un BUS d'entrée et un BUS de sortie muni d'une commande de mise en haute impédance: bien que le BUS de contrôle soit bidirectionnel, les BUS d'entrée et de sortie sont séparés à l'intérieur du circuit pour diminuer la capacité d'interconnexion, qui atteint déjà une valeur respectable en raison de la taille du circuit.

* **L'utilisation d'un chemin de données** a été étendue aussi loin que possible pour maîtriser les délais sur une grande partie du chemin critique. Ainsi, les Registres d'Apprentissage avec leur unités d'incrémentation, les multiplieurs, et les deux premiers étages de l'arbre d'additionneurs font partie de ce chemin de données.

Le principe du chemin de données est l'aboutement horizontal de cellules travaillant sur des bits de même poids, traversées par des lignes de métal d'interconnexion sur lesquelles elles puisent ou déposent des données. Ces tranches sont empilées verticalement pour créer un module de traitement de BUS de la largeur désirée. Le chemin de données de la chaîne de conception VLSI Technology fixe le nombre minimum de ces pistes ("tracks") à 8, sachant que les différentes cellules pourront être effectivement traversées par 8 lignes ou moins selon leur complexité (par exemple, l'additionneur série occupe 5 pistes, donc peut être traversé par trois signaux au maximum avant l'ajout de pistes supplémentaires).

Une amélioration manuelle de l'ordre de placement des cellules et de leur orientation selon des critères de dépendance fonctionnelle a permis
de diminuer le nombre de pistes additionnelles ajoutées par le compi-
lateur de 12 à 5, permettant ainsi de gagner sur la hauteur du chemin
de données, et par conséquent de diminuer l'amplification électrique
des commandes des opérateurs, qui sont acheminées verticalement. Les
retenues des additionneurs sont aussi transmises verticalement (des cel-
lules avec calcul anticipé de la retenue n'étaient pas disponibles lors de
la conception).

Une particularité de ce chemin de données est l'utilisation intensive de "swizzles" (représentés par une barre accollée à une croix sur le schéma du chemin de données, figure 4.2); ces cellules réalisent une fonction des entrées (côté croix), pouvant assigner toute valeur disponible en entrée, plus les constantes 0 et 1, à chacune des sorties (côté ligne). La largeur du chemin de données est de 16 bits (taille des poids synaptiques en apprentissage), les coefficients synaptiques sont donc chargés par groupes de 4 mots de 8 bits en provenance de la Mémoire Synapse de largeur 32 bits. La sortie côté mémoire du chemin de données est réarrangée de façon à présenter à nouveau des groupes de 4 poids synaptiques 8 bits (les poids forts et les poids faibles sont chargés et réécrits en deux fois). La sortie vers la suite de l'arbre d'additionneurs est une sortie 10 bits, correspondant à la somme de quatre entiers 8 bits, et est signée en complément à deux.

On remarque sur les schémas 4.2 et 4.5, que les registres physiquement
implémentés dans le chemin de données contiennent deux octets de
même poids, et non directement un coefficient synaptique sur 16 bits:
cette autre possibilité, réalisant la conversion au niveau des transferts
entre la RAM et les registres, était plus gourmande en "swizzles" dans
le chemin de données, ce qui aurait conduit à une longueur supérieure.

* Les registres d'apprentissage font partie du chemin de données, de façon à avoir tous les paramètres des calculs de résolution comme d'apprentissage disponibles à cet endroit. La précision retenue est de 8 bits en résolution, 16 bits en apprentissage, ces valeurs s'accordant bien avec les tailles des mots circulant sur le BUS du Transputer (considéré comme un groupe de 4 octets), et les simulations effectuées par des utilisateurs potentiels du circuit, ainsi que dans divers laboratoires s'étant confrontés au problème de la réalisation d'une machine de simulation à précision limitée.

Deux de ces registres 16 bits représentent les quatre octets de poids
<figure><img src="image_26.png" /><figcaption>Figure 4.2: Schéma du chemin de données pour un groupe de quatre neurones</figcaption></figure>

fort des quatre coefficients synaptiques lus dans la RAM et leur sorties alimentent les multiplieurs, les deux autres registres représentant les quatre octets de poids faible. Cette solution s'est avérée meilleure du point de vue de la surface totale du chemin de données (nombre de pistes supplémentaires, nombre de "swizzles"). La sérialisation des produits $V_j * \Delta s$ effectue de manière semblable à celle des produits $C_{ij} * V_j$, mais à l'aide de NOR cette fois-ci, car l'utilisation d'amplificateurs électriques inverseurs (de taille plus faible) fait que les données sont complémentées (à un) à ce niveau de leur traitement.

Seuls les octets de poids fort permettent de pondérer des états de neurones lorsque le circuit est en phase de relaxation: l'ajout d'un multiplexeur dans le schéma du chemin de données correspondant à cette
option aurait augmenté sa longueur, avec pour conséquence immédiate
un accroissement important de la hauteur du circuit, ce qui n'était plus
acceptable (se reporter à la figure 5.1, sur laquelle on voit l'influence
des chemins de données, disposés verticalement sur le circuit, sur la
hauteur de celui-ci).

Le schéma de principe est donné dans la figure 4.3.

<figure><img src="image_27.png" /><figcaption>Figure 4.3: Schéma de principe d'une unité d'apprentissage</figcaption></figure>

* Les **multiplieurs** sont intégrés au bloc chemin de données sous forme de AND, selon l'algorithme de multiplication par addition-décalage. Leur entrée est alimentée par les octets de poids fort des registres d'apprentissage, la séparation d'un mot de 16 bits en deux octets s'effectuant par deux swizzles (qui sont déjà utilisés pour recréer des mots de 16 bits pour l'apprentissage). La justification de ce choix était d'une part le fait qu'aucun bénéfice ne serait tiré d'une multiplication par groupe de deux bits dans le cas des neurones binaires, qui représentaient à ce moment là une partie conséquente de l'étude des réseaux de neurones, et d'autre part son coût en surface active, mais surtout d'interconnexion.

* L'arbre d'additionneurs est de structure classique, à propagation série de la retenue, ce qui était imposé pour la partie incluse dans le chemin de données; il est complété par des additionneurs en celles précaractérisées. Elles sont placées dans les blocs centraux avec
une contrainte de proximité pour aider au placement routage: les additionneurs regroupant les résultats partiels de deux blocs de quatre neurones dans le bloc de cellules situé entre eux, l'additionneur final dans le bloc proche des pads de sortie du BUS de sortie directe (la forme et la position des différents blocs est présentée dans la figure 5.1).

A chaque niveau, les additionneurs effectuent un calcul en complément à deux, par l'utilisation d'un additionneur de taille plus grande de 1 bit à celle des opérandes (supposées être codées en complément à deux), et l'extension de leur signe sur ce bit.

* **Le Registre d'Etat de Neurones** est inclus dans le bloc de quatre neurones, réalisé avec des cellules précaractérisées pour disposer de possibilités d'adressage de colonnes pour les entrée-sorties sur le BUS de contrôle, et d'adressage de lignes pour la lecture interne des états de neurones en série. La figure 4.4 indique sur un schéma symbolisant le Registre d'Etat de Neurones (deux banques) quelle forme prennent les ensembles de bits transférés par les différents canaux d'accès.

<figure><img src="image_28.png" /><figcaption>Figure 4.4: Schéma du Registre d'Etat de Neurones</figcaption></figure>

Le mode de sérialisation choisi permet d'effectuer des calculs avec des neurones codés sur 1 à 8 bits: le REN peut donc contenir 32 à 256 états de neurones, selon leur codage. D'autre part, la Matrice Synaptique est de capacité 1k octets, utilisable par groupes de 16 coefficients: une disposition de ces coefficients pour la réalisation d'une couche à 128 entrée permet donc le stockage sur le circuit de 16 colonnes, ou 8 si l'on désire garder une précision de 16 bit par coefficient synaptique
en apprentissage. Le calcul d'une couche d'un facteur de parallèlis-
me supérieur à celui du circuit (donc avec une précision moindre que
la précision maximale autorisée pour coder les états de neurones) se
déroule en plusieurs cycles, où la sélection des différents sous-ensembles
de neurones afférents au neurone en cours s'accompagne de celle des
coefficients synaptiques correspondants, les résultats partiels de chaque
calcul sur un sous-ensemble des neurones afférents étant accumulés par
l'ALU finale.

Si l'on désire garder un apprentissage sur des coefficients synaptiques
16 bits, et avec l'utilisation des deux banques du REN (mode asyn-
chrone obligatoire, sinon diviser par 2 le nombre de neurones calculés),
un circuit peut donc présenter différents facteurs de forme selon le
codage des états de neurones: avec une précision maximale des états de
neurones (8 bits), un composant implémente une couche de 16 → 32
neurones, calculée en deux fois; pour des neurones codés sur 4 bits,
une couche de 32 → 16 neurones (4 cycles de calcul); avec des neu-
rones codés sur 2 bits, une couche de 64 → 8 neurones (8 cycles);
pour des neurones binaires, une couche de 128 → 4 neurones (16 cy-
cles); les neurones codés sur un nombre de bits non puissance de 2
sont aussi accessibles, mais entraînent l'impossibilité d'utiliser la to-
talité des ressources disponibles (par exemple, le réseaux le plus grand
avec des états de neurones codés sur 3 bits, les coefficients synaptiques
comme décrit ci-dessus, correspond à une couche de 80 → 6 neurones,
calculée en 5 cycles). Dans ces cas-là, les tailles maximales des couches
contenues sur un circuit se calculent par division entière du nombre
de lignes du REN (16) par la taille en bit du codage désiré pour les
états de neurones, d'où la taille de l'entrée de la couche, égale à 16
fois le résultat, r, qui est le nombre de cycles de calcul nécessaire; puis
par division entière du nombre de colonnes de coefficients synaptiques
disponibles par r: le résultat est le nombre de neurones calculables par
cette couche. Il est aussi possible de simuler des couches mixtes, dont
tous les neurones ne sont pas codés sur le même nombre de bits: les
mêmes principes sont applicables cas par cas pour en déterminer la
taille.

Ce principe peut aussi être étendu à l'utilisation de plusieurs circuits
pour former des couches plus grandes.

L'automate d'apprentissage peut prendre en charge les cas de neurones
binaires et codés sur 8 bits uniquement, du fait que le décalage de l'ALU
finale ne s'effectue que dans un sens (à moins de coder les états de neurones de façon à ce que les bits de même poids soient contigus dans le REN, ce qui entraîne des transcodages important lors des échanges avec l'hôte).

Le chemin de données a été regroupé avec le bloc mémoire et la partie du Registre d'Etat de Neurones correspondants pour former un module de 4 neurones (Figure 4.5), instancié quatre fois sur le circuit prototype.

<figure><img src="image_29.png" /><figcaption>Figure 4.5: Schéma du bloc de quatre neurones</figcaption></figure>

* La fonction d'apprentissage est intégrée aux blocs de cel- lules précaractérisées, et permet de commander chaque unité d'apprentissage de façon à ce qu'elle additionne ou soustraie $\Delta$, ayant multiplié $\Delta$ par 0 ou par 1. Ces deux bits de commande peuvent provenir de deux registres qui mémorisent l'ordre correspondant en provenance du BUS de contrôle, ou sont générés par une Table de
Vérité programmable (un registre de 8 bits) dont les paramètres d'entrée sont les bits courants des états de neurones $V_j$ et le bit courant d'un masque $U_j$. Selon la valeur de $U_j$, l'une ou l'autre moitié de la table de vérité sera activée. Chaque moitié de la Table de Vérité permet de générer les deux bits de commande indépendamment l'un de l'autre, prenant une valeur parmi $V_j, \bar{V}_j, 0$, ou 1, selon la programmation du contenu de la Table de Vérité.

Le principe de fonctionnement d'une unité est exposé en figure 4.6.

<figure><img src="image_30.png" /><figcaption>Figure 4.6: Schéma de principe d'une fonction d'apprentissage pour un co-efficient synaptique</figcaption></figure>

* **L'Accumulateur final**, constitué d'un additionneur-soustracteur 32 bits, d'un registre de mémorisation du résultat partiel et d'un mécanisme de décalage d'un bit à gauche, est entièrement situé dans le bloc central de cellules précaractérisées qui est proche du BUS de sortie directe, pour localiser à cet endroit les deux sources possibles alimentant cette sortie spécifique (l'autre étant le sommet de l'arbre d'additionneurs). L'absence d'additionneur avec propagation anticipée de la retenue dans les cellules pour chemin de données, et la souplesse accrue de n'avoir à placer que des cellules précaractérisées à part les blocs de quatre neurones ont écarté une implémentation de cet opérateur par un chemin de données.

La taille de cet additionneur permet une adaptation directe avec
un BUS hôte 32 bits, ainsi que plusieurs accumulations successeuses de résultats partiels sans craindre de débordement. En cas de débordement, la pin d'interruption est activée et l'ordre en cours abandonné; à ce moment, la lecture du registre d'état du circuit indique la mise à 1 du LSB; le service de l'ALU finale peut reprendre après remise à zéro de ce bit par une instruction de reset, désactivant aussi la pin d'alarme.

* **Le décodeur d'instructions** remplit la fonction de mémorisation de l'ordre en cours demandé par le BUS de contrôle, c'est-à-dire correspondant à l'adresse accédée, permettant le déclenchement de son exécution dès le signal de mémorisation des adresses (ce BUS fonctionne avec adresses et données multiplexées), ou sur une phase ultérieure de l'horloge du processeur de contrôle si nécessaire (par exemple, pour les instructions avec entrée de paramètres comme données sur le circuit).

Son architecture est simple: les fils du champ d'adresse traversent les fonctions logiques correspondant à chaque instruction (qui ne sont pas nécessairement exclusives entre elles) pendant le temps de stabilisation de l'adresse, et leurs sorties sont mémorisées sur le signal de mémorisation de l'adresse provenant du processeur hôte. Pour certaines instructions nécessitant un protocole temporel, les signaux sont fabriqués avec les signaux de contrôle du processeur hôte, et au besoin l'horloge. Par exemple, la RAM nécessite un temps de précharge de 20 ns, et une impulsion de longueur supérieure à 36 ns; le signal de lecture/écriture n'arrivant qu'à la troisième phase du cycle du Transputer, une lecture de la RAM est systématiquement effectuée dans le cas d'un accès à la Mémoire Synaptique du circuit afin que les données soient prêtes lors de l'ouverture du BUS vers le Transputer; dans le cas d'une écriture sur le circuit, le décodeur génère un deuxième cycle d'accès à la RAM ensuite; cela permet d'utiliser l'instruction d'échange de données entre la RAM et le processeur de contrôle en mode MOVE-BLOCK sans allonger le cycle d'accès à la mémoire externe du Transputer par ajout d'un temps d'attente.

On peut remarquer que toutes les instructions ne demandant pas d'échange avec l'extérieur du circuit peuvent s'achever dès qu'elles ont été mémorisées (une phase de 25 ns après le début de l'instruction, sur l'arrivée du signal ALEN de mémorisation des adresses), permettant de diminuer le temps de cycle en fonction de la durée des instructions
et du degré de recouvrement que l'on peut réaliser; ceci devient pos-
sible lorsque le composant n'est pas contrôlé par un Transputer, pour
permettre des pseudo-accès à la mémoire, sans échange de données.

Le décodeur autorise la validation d'instructions dans deux cas: s'il est sélectionné par le signal CS, ou si son numéro logique coïncide avec le champ d'adresse correspondant à la sélection SIMD. Ce numéro logique est chargé au préalable par un ordre qui en fait l'écriture dans un registre du décodeur d'instructions. Le mode de validation demandé est spécifiée par un bit du champ d'adresse de l'instruction proposée sur le BUS par l'hôte, demandant au(x) circuit(s) un décodage explicite ou bien une validation par numéro. Le composant est câblé de telle façon que le décodage explicite soit obligatoire pour toute lecture, afin d'éviter une contention du BUS hôte; pour les écritures, en revanche, le mode SIMD est autorisé, et permet la mise en fonctionnement multimânée de plusieurs circuits, si l'instruction proposée y fait appel et que ces circuits ont le même numéro que celui demandé dans le champ correspondant de l'instruction.

Un cas de lecture du circuit aurait pu être autorisé par sélection
SIMD: les lectures internes de la Mémoire Synaptique vers les Re-
gistres d'Apprentissage, qui n'entraînent aucune activité sur le BUS
de contrôle.

La présence de ce décodeur sur le circuit permet de simplifier les con-
nexions du circuit avec son hôte dont il fait partie de l'espace mémoire,
et autorise le mode rapide de chargement de données par le Transputer
(MOVE-BLOCK).

* Les automates internes ont pour but d'alléger la tâche de contrôle du processeur hôte, en déroulant un microcode préalablement chargé en remplacement d'une succession d'ordres équivalents. Trois automates sont implémentés sur le circuit: pour transférer entre la Mémoire Synaptique et les Registres d'Apprentissage un jeu de 16 coefficients 16 bits (enchaînement de 2 accès à une colonne de coefficients 8 bits); pour réaliser la somme de 16 produits de coefficients synaptiques 8 bits par des états de neurones codés sur *p* bits, positifs ou signés, *p* étant compris entre 1 et 8; pour réaliser les sommes $C_{ij} + \Delta * V_j$ avec $V_j$ sur 8 bits signé en complément à deux.

Pour tirer parti des différentes vitesses des opérateurs correspondant
aux automates, des horloges indépendantes entrent sur le circuit, cha-
cun pouvant ainsi fonctionner en n'étant limité que par son propre chemin critique. L'horloge pour l'automate des échanges avec la RAM est celle du processeur hôte, en raison de la synchronisation avec ses signaux de contrôle. La fréquence des deux autres horloges est à déterminer par des mesures de performances des circuits; elles sont suréchantillonnées pour perdre un temps minimum de resynchronisation avec le décodage de l'instruction correspondante.

Le facteur de suréchantillonnage des horloges a été choisi de façon à assurer le fonctionnement lorsque toutes les entrées d'horloges sont connectées à l'horloge de l'hôte.

L'automate des échanges avec la RAM n'est pas programmable, et change d'état sur chaque phase de l'horloge. Selon le sens de l'échange demandé, il produit dans l'ordre qui convient les signaux de lecture et d'écriture dans la RAM et les Registres d'Apprentissage, après sélection adéquate des sens des BUS concernés. Les deux autres automates fonctionnent sur le même principe: l'adresse du bit courant pour les multiplications bit/série est le résultat d'un décompte entre deux registres, l'un indiquant le bit de départ et l'autre le nombre de bits du calcul (l'automate de l'apprentissage effectue systématiquement des calculs 8 bits). L'automate de relaxation, qui peut être activé de l'extérieur du circuit sans passer par le décodeur d'instructions, active une pin indiquant à l'extérieur qu'un calcul est en cours.

Il est à noter que les mécanismes de détection de débordement, prévus pour des instructions bit à bit, peuvent produire des détections artificielles lors de l'utilisation des automates, entraînant inutilement l'invalidation du calcul en cours (particulièrement dans le cas de l'apprentissage, où la dynamique de travail est entièrement sollicitée). Dans ce cas, une solution peut être de commander la même séquence par le processeur de contrôle sans tenir compte des signaux de débordement en cours de calcul. La vérification de l'absence de débordement est à assurer par le processeur hôte dans le cas de produits par des $V_j$ sur plusieurs bits (ou bien par exemple avec l'utilisation d'un algorithme d'apprentissage assurant qu'aucun débordement ne peut se produire).

* Les BUS spécifiques permettent d'accélérer le contrôle du circuit par l'adjonction de mécanismes externes plus ou moins complexes, pour la phase de relaxation. L'un fonctionne en sortie, pour commu-
niquer à l'extérieur une somme de produits de coefficients synaptiques par des état de neurones, l'autre en entrée pour mettre à jour un état de neurone. Un Bus d'adresses permet de choisir le neurone courant (en évaluation ou bien pour une mise à jour). Un signal de contrôle permet de démarrer l'automate d'évaluation interne au circuit.

Ces BUS permettent d'automatiser le séquencement des neurones à mettre à jour, la prise de seuil pouvant faire partie de ce mécanisme, ainsi que l'écriture des nouveaux états de neurones dans les circuits concernés. L'utilisation simultanée de ces BUS par plusieurs circuits demande de compléter l'arbre d'additionneurs par des ressources externes, avant la prise de seuil.

* Le contrôle du circuit est assuré selon un protocole de communication simple permettant une mise en œuvre rapide des circuits par leur processeur hôte à travers le BUS d'usage général: toute opération sur le circuit s'effectue pour l'hôte comme un échange avec sa mémoire. Le composant ne réagit que si un signal de sélection est activé (CSG).

Le BUS de contrôle permet de charger les coefficients du circuit et d'exécuter toutes les instructions; il fixe le mode de fonctionnement des BUS spécifiques (mise à jour par l'extérieur, valeur sortie sur l'autre BUS), pouvant fonctionner simultanément à eux. Le BUS de contrôle permet de plus d'accéder à plusieurs circuits de manière univoque (par décodage matériel sur un signal de sélection CS), ou de manière SIMD (chaque circuit confrontant la valeur de son registre numéro au champ correspondant de l'instruction qu'il voit arriver, y répondant si ce sont les mêmes). Les instructions n'impliquant pas d'échange de données vers le processeur de contrôle seront donc commandées par des écritures dans le circuit, de façon à pouvoir tirer parti du mode SIMD le plus souvent possible.

Pour le cas où l'on constaterait une perte de cycles trop importante lorsque le Tranputer fait des calculs d'adresses pour les accès mémoire commandant des circuits ou bien établit son instruction d'accès mémoire (délai d'autant plus long que l'adresse d'accès est éloignée du pointeur de début d'espace de travail), il est envisageable d'implémenter un mécanisme de génération d'adresses, une sorte de microcontrôleur. Son principe de fonctionnement peut être celui d'une mémoire tampon entre le Transputer et les circuits, écrite de manière transparente et bouclant sur une séquence d'instruction; on
peut ajouter l'incrémentation de certains champs des instructions destinées au circuit (pour changer de neurone courant, par exemple), un mécanisme de test...

## 4.1.2 Le test

La surface de silicium consacrée au test est réduite au minimum, un test fonctionnel étant retenu aussi souvent que possible. L'ordre de priorité pour le test des différents opérateurs est proportionnel à leur densité d'intégration, puis à leur importance pour le fonctionnement du circuit. Les chemins de test sont établis en conséquence, avec la contrainte de maintenir le nombre de vecteurs inférieur à 10000 (la compatibilité des signaux de contrôle avec ceux du Transputer impose trois vecteurs par écriture ou lecture de données sur le circuit).

Ainsi, un taux de couverture supérieur à 99% est atteint pour la RAM. Le nombre de vecteurs consacrés à cette partie du test est d'environ 5000, en utilisant un mécanisme permettant d'écrire en parallèle dans les quatre RAMs, pour les relire indépendamment (l'utilisation de XORs sur les sorties des RAM aurait permis de diminuer d'un facteur 2.5 environ ce nombre de vecteurs, la comparaison des mots lus s'effectuant en parallèle dans le circuit, contre l'ajout de cellules et d'une surface de routage conséquente). La technique de test utilisée consiste en l'écriture puis la lecture de 1, de 0 dans toute les cases mémoires, et de recommencer avec un damier de 0 et de 1, le damier inverse, et un 0, puis un 1 se déplaçant en diagonale.

Le modèle de test suivi chez VLSI Technology est celui de la faute unique, ce qui autorise de propager les vecteurs de test d'un opérateur à travers d'autres opérateurs déjà testés, puisque la probabilité d'apparition de deux défauts se compensant est considérée comme négligeable. Le chemin de données ne bénéficie donc pas d'un accès direct, mais est testé par lecture interne de données en provenance de la Mémoire Synaptique. Le test du chemin de données a d'abord porté sur les registres d'apprentissage (écriture/lecture par échanges avec la RAM), les bits de poids forts de ces registres étant utilisés pour propager des vecteurs dans les multiplieurs, puis de couche en couche dans l'arbre d'additionneurs, la lecture s'effectuant cette fois-ci en sortie de l'arbre. La propagation des vecteurs est le résultat d'opérations arithmétiques simples sur les additionneurs en entiers: 1 + 1 donne un 0 sur le bit de même poids de la couche suivante, et 1 sur le bit de poids plus fort de cette couche. On vérifie ainsi de proche en proche l'absence de collage à 0 ou à 1 de chaque opérateur.
Enfin, un mécanisme de test des registres du décodeur d'instructions a été implémenté: dans un mode particulier, chaque registre est relié à une sortie de test par un décodeur, permettant de vérifier l'absence de collage et le bon décodage du champ d'adresse de l'instruction correspondante.

Le reste des opérateurs a été testé fonctionnellement (donc partielle-ment), en s'attachant à utiliser des jeux de données sollicitant les positions hautes et basses de chaque nœud du circuit.

Le taux de couverture du jeu de vecteurs de test ainsi obtenu (en peu de temps) est de l'ordre de 85%, ce qui a été jugé suffisant; aucun des circuits prototypes proposés par le fondeur après cette vérification n'a été invalidé lors de sa mise en œuvre.

## 4.2 Les possibilités d'utilisation du circuit

L'utilisation des divers modes de contrôle du circuit correspond à différents types de problèmes de simulation de réseaux de neurones, et à différents interfaçages du composant, autorisant un taux d'utilisation plus ou moins grand des circuits.

On peut néanmoins prévoir qu'un gain en vitesse par rapport à une appli-cation existante ne pourra être attendu de l'utilisation des primitives parallè-les implémentées sur le circuit qu'au prix d'une mise en forme éventuelle des paramètres du réseau de neurones de façon à pouvoir les coder sur le com-posant (qui travaille avec des entiers), pouvant entraîner des modifications des algorithmes employés. La démarche la plus directe pour tirer parti d'un système basé sur ces circuits est de développer des applications en fonction des ressources dont il dispose.

### 4.2.1 Architectures d'usage général

Pour des simulations de réseaux de neurones d'architectures variées dont le point commun est une utilisation des primitives parallèles implémentées sur le circuit, une architecture d'usage général peut convenir, qui toutefois n'atteint pas le niveau maximal de performance que le circuit autorise, mais permet d'utiliser les capacités de reconfigurabilité et de cascadabilité du composant.
## Systèmes à faible coût

Les systèmes les plus simples mettant en œuvre des circuits n'utilisent que le BUS de contrôle, par l'intermédiaire d'un ou plusieurs processeurs hôtes, pouvant être des Transputers par exemple. Dans ce cas, les circuits sont considérés comme de la mémoire, avec un temps d'accès de trois cycles d'horloge à 20 MHz. Les liens reliant deux Transputers entre eux leur permettent de communiquer à une vitesse de l'ordre de 1 Moctets/seconde de manière bidirectionnelle. Pour des systèmes dotés de plusieurs circuits, des calculs peuvent être effectués en parallèle sur les circuits contrôlés par un même hôte avec l'utilisation du mode SIMD, où chaque circuit décode les ordres déposés sur le BUS qui lui sont destinés. Un recouvrement limité est possible dans ce cadre, des écritures sur le BUS de contrôle restant autorisées pendant que le circuit effectue un calcul séquencé par ses automates internes.

Le degré de complexité de ces systèmes varie avec leur taille (en nombre de processeurs hôtes, puis en nombre de circuits).

Les cartes ayant servi à la mise en œuvre du composant, décrites dans le paragraphe 5.2, entrent dans cette catégorie, dont le principe est illustré par la figure 4.7.

## Systèmes performants

Des performances plus grandes peuvent être attendues de l'utilisation d'un contrôleur dédié aux circuits neuromimétiques, soulageant ainsi le processeur hôte de certaines tâches répétitives, pouvant varier selon les applications, comme par exemple une reconfiguration des circuits, le choix du neurone à mettre à jour, le seuillage...

Deux types de contrôleurs additionnels peuvent être utilisés: l'un utilise les BUS dédiés, autorisant éventuellement un contrôle parallèle par le BUS hôte, l'autre vise à substituer l'hôte par un microcontrôleur effectuant les accès mémoire adéquats sur son BUS.

Les automates de la première catégorie peuvent prendre une forme simple, réalisant en logique discrète un séquenceur des neurones à mettre à jour; une version plus étoffée peut permettre de changer l'ordre de mise à jour des neurones, ou le rendra pseudo-aléatoire. L'utilisation de composants plus sophistiqués, de degré d'intégration plus grand (Xilinks, Gate Array...) donnera de la compacité au système, tout en autorisant le cas échéant un changement de fonction de seuillage plus facilement que lorsqu'elle est réalisée par une table de transcodage, et sans faire appel aux ressources de calcul de l'hôte (par exemple, par un calcul polynômial). Cet automate peut éventuellement
<figure><img src="image_31.png" /><figcaption>Figure 4.7: Un schéma d'assemblage de circuits et de Transputers</figcaption></figure>

être utilisé par plusieurs circuits, en particulier lorsqu'ils contribuent au calcul d'une même couche; dans ce cas, il peut collecter les résultats partiels contenus dans les accumulateurs de chaque circuit.

Les automates de la seconde catégorie permettent de soulager l'hôte pour des fonctions qui ne sont pas pilotables par un contrôle externe (ordres de reconfiguration, apprentissage...): un mécanisme capable de partager le BUS de contrôle avec l'hôte (côté circuits seulement, pour ne pas gêner le reste de l'activité de l'hôte) assure le contrôle pour séquencer des opérations répétitives (comme proposé dans le paragraphe 4.1.1).

Ce type de mécanisme peut être étendu au calcul de réseaux de grande taille, en automatisant les transferts avec la Mémoire Synaptique et le Registre d'Etat de Neurones, pour réaliser une forme de " pagination " de portions de réseaux stockés dans une mémoire plus grande que celle du système de circuits disponibles. Toutefois, le circuit n'ayant pas été conçu pour cet objet-
tif (utilisation plus proche d'une antémémoire neuronale que d'une mémoire neuronale), les performances à en attendre ne seront pas comparables à celle obtenues lors d'une utilisation classique des circuits (en particulier à cause du temps d'accès apparent aux mémoires du composant, et des formats de données nécessaires au composant pouvant impliquer des transcodages si un traitement ne peut être évité sur l'hôte lors des transferts). Dans ce type d'utilisation, le gain par rapport à un système classique (composé d'un DSP réalisant en un cycle un produit et une accumulation, par exemple) repose sur le recouvrement possible du chargement de la portion de réseau suivante pendant les calculs, ainsi que sur le chargement en parallèle de quatre coefficients synaptiques en une écriture.

Cette famille de systèmes vise à maintenir la charge des circuits à un niveau proche du maximum de leurs possibilités durant les phases d'appel aux contrôleurs spécifiques; une certaine reconfigurabilité peut être conservée (figure 4.8).

<figure><img src="image_32.png" /><figcaption>Figure 4.8: Systèmes comportant des automates externes</figcaption></figure>

## 4.2.2 Architectures optimisées pour une application

Des performances élevées sont attendues ici, et le manque de reconfigurabilité du système importe peu. Les circuits sont utilisés comme des moyens
de traitement, les coefficients à traiter étant contenus dans leurs registres,
en ajoutant les opérateurs nécessaires pour compléter les calculs (addition-
neurs, fonction de seuillage...). Le séquencement des différents opérateurs
(dont les circuits neuromimétiques) doit être assuré de façon stricte. Le pro-
cesseur hôte ne sert qu’à charger les coefficients dans les composants. Un
accroissement des performances peut encore être recherché par le fonction-
nement en parallèle de circuits, ceux-ci n’utilisant plus nécessairement la
totalité de leurs capacités de stockage.

Par exemple, la figure 4.9 illustre le cas du calcul d'un réseau à trois couches.

<figure><img src="image_33.png" /><figcaption>Figure 4.9: Système dédié à une application</figcaption></figure>

4.3 Performances envisageables

Le circuit prototype fonctionne selon le diagramme surface/temps de la fi-
gure 4.10, ce qui permet d'évaluer ses performances dans des environnements
divers, comme ceux qui viennent d'être évoqués. On peut remarquer que
l'asynchronisme du circuit, qui entraine une période minimale de 190 ns
ici, n'impose pas de contrainte importante spécifique aux instructions de
résolution, car l'instruction d'écriture de la Mémoire Synaptique, qui de-
mande deux accès séparés du délai de précharge, exige un minimum de
160 ns; les cycles d'apprentissage, non mentionnés ici, sont plus bref car ne
mettant en jeu qu'une ALU 16 bits: 50 ns environ pour 1 bit d'incrément. Les
fonctions principales du composant sont donc de durées assez homogènes.
<figure><img src="image_34.png" /><figcaption>Figure 4.10: Diagramme surface/temps du circuit LNEURO 1.0</figcaption></figure>

J'utilise ici une unité d'évaluation des performances qui me semble mieux adaptée à ce type d'architecture que le nombre de connexions calculées par secondes: le NIPS, ou Nombre d'Inférence Par Secondes, une inférence étant la mise à jour d'une couche de 16 neurones 8 bits (les coefficients synaptiques étant codés sur 8 bits).

A titre de comparaison, les performances de quelques machines d'architecture classiques en NIPS sont données dans le tableau 4.1; les programmes utilisés n'ont pas été optimisés au maximum (utilisation de com-pilateurs C ou OCCAM, pas d'assemblage).

<table><caption>Table 4.1: Evaluation d'architectures classiques en NIPS</caption><thead><tr><th>NIPS</th><th>machine</th></tr></thead><tbody><tr><td>20200</td><td>IBM PC 80386 25 MHz</td></tr><tr><td>8800</td><td>SUN 3/150</td></tr><tr><td>15800</td><td>SUN 4/60</td></tr><tr><td>47600</td><td>IBM 3090</td></tr><tr><td>25600</td><td>1 T800</td></tr></tbody></table>

### 4.3.1 Circuits contrôlés par un Transputer

Les évaluations qui suivent sont faites selon l'hypothèse que les circuits sont déjà configurés, et le code programme du processeur hôte établi de façon op-timale pour les circuits (pas de calculs d'adresses intermédiaires, pas d'autres
tâches actives pendant les accès aux circuits, accès aux composants avec le
délai minimal...).

A titre indicatif, le chargement de 16 colonnes de coefficients synaptiques et de 16 états de neurones dans un circuit prennent 10.3µs (deux instructions MOVE-BLOCK portant sur 64 et 4 mots).

* Dans le cas d'un circuit contrôlé par un Transputer et ne faisant pas appel aux BUS dédiés, le Transputer utilisant sa mémoire comme table de transcodage pour effectuer le seuillage: 1.4µs sont nécessaires aux calculs internes pour un neurone, puis 0.2µs pour le seuillage par le Transputer (après un FETCH), et 0.2µs pour la réécriture de l'état de neurone mis à jour; pour 16 neurones, la durée de mise à jour d'une couche est donc de 28.8µs, soit 34700 NIPS,

* Dans le cas de quatre circuits contrôlés par un Transputer, en faisant l'hypothèse d'un décalage bien réparti entre les appels aux circuits, on peut obtenir un gain d'un facteur 4 par rapport au cas précédent (les états de neurones sont mis à jour dans les quatre circuits qui travaillent sur le même jeu de données, mais sur des neurones différents); pour 16 neurones, la durée de mise à jour d'une couche devient 7.2µs, soit 138800 NIPS,

Cette configuration permet de mettre à jour une couche de 32 neurones en 28.8µs, car il est possible de faire travailler deux colonnes de deux circuits chacune simultanément.

* Avec l'utilisation pour chaque circuit d'un automate de séquencement et mise à jour des neurones utilisant les BUS dédiés (cycle d'environ 1.6µs pour un neurone 8 bits), il devient possible à un Transputer de contrôler simultanément un plus grand nombre de circuits. Cela ne diminue pas le temps nécessaire à la mise à jour d'une couche de 16 neurones par rapport au cas précédent, car les mises à jour restent locales: l'utilisation de circuits en parallèle doit être complétée par des lectures et mises à jour globales par le BUS de contrôle (qui peuvent s'effectuer pendant les calculs conduits automatiquement). Pour un Transputer muni de 16 ensembles circuit + automate, on peut considérer la durée suivante: 16 cycles pour lancer les différents calculs, puis 16 lectures/écritures globales pour mettre les circuits à jour, soit 7.2µs donc 138800 NIPS,

L'intérêt de cette démarche provient plutôt de la libération de l'hôte qu'il procure dans le cas où les automates contrôlent plusieurs mises