# LDF 100

Le LDF 100 était un ordinateur parallèle, d'architecture dataflow, conçu par Loral Instrumentation en 1986. Le dataflow est à large grain, où les unités de calcul reçoivent des blocs de code. Elle est programmable en C ou Fortran, ou les deux, la définition du graphe étant décrite en Loral Data Graph Language. La machine est scalable jusqu'à plus de 100 processeurs.

## Caractéristiques

Le LDF 100 est une ordinateur dataflow à large grain : chaque nœud du graphe de flot de données est une séquence d'instructions, générée à partir de blocs de code, procédures ou fonctions, définis par le langage de haut niveau. Un programme pour le LDF 100 est constitué de deux composants :
* le graphe, décrit grâce en Loral Data Graph Language (conçu par Ian Kaplan)
* le code à exécuter sur les nœuds, écrit en langage C ou Fortran.
Il est composé de 10 à 128 nœuds de calcul, chacun composé de deux microprocesseurs, l'un dédié aux calculs le second à l'acquisition des données depuis le bus de flot de données. Il n'y a pas de mémoire partagée, celle ci est locale à chaque élément de calcul. Cette mémoire distribuée permet de s'affranchir d'un réseau d'interconnection complexe (et coûteux) entre modules mémoire.
Le projet était conduit par une équipe de 7 personnes. Pour pouvoir commercialiser la machine dans les délais courts, diminuer les coûts, et simplifier sa conception, des composants standards seront utilisés, par opposition à des composants sur mesure (VLSI ou circuits logiques programmables). Le microprocesseurs sont des National Semiconductor NS32016.

## Détails de l'architecture

Le LDF 100 est composée de un ou plusieurs châssis.
Le bus LDF est local , tandis que le bus FLO est externe et relie tous les châssis présents.

### Le processeur Unix

Il est constitué d'un carte mère supportant GENIX, la version d'Unix BSD 4.1 de National Semiconductor, incluant :
* un microprocesseur NS32016 à 10 Mhz avec 512 Ko de RAM, une MMU, une FPU des ports série et un contrôleur de disques.
* une interface au bus LDFbus, similaire au MULTIBUS.

### Le FLObus

Il fait 32 bits de large et est utilisé pour la diffusion des jetons dataflow. Chaque jeton est composé de 16 bits de tag et 16 bits de données. Les bits de tag contiennent l'identifiant du nœud de destination. Le bus est du type broadcast, un ou plusieurs éléments connectés sont susceptibles de recevoir des données. Le bus est cadencé à 4 Mhz.

### L'interface FLObus

Le FLObus est atteignable par le processeur Unix à travers le FIP (FLObus Interface Processor). Elle est construite autour du microprocesseur NS32016 avec 128 Ko de mémoire dont 16 Ko sont réservés pour la communication avec Unix et 4Ko pour la file d'attente des jetons échangés sur le FLObus.

### Les nœuds de calcul

Dotés de deux microprocesseurs, leur architecture est assez complexe. Ils sont sous le contrôle d'un noyau dédié. Ils forment ce que Loral Instrumentation appelle le dataflow engine.

### Extensibilité

Chaque châssis comporte au maximum 16 cartes. Les châssis sont reliés entre eux par extension du FLObus, à travers une carte spécifique.

## Le Data Graph Language

Un programme destiné à une machine dataflow doit décrire un graphe, donc comment sont reliés un ensemble de nœuds (sommets du graphe) par des arêtes. Chaque nœuds (de code) contient :
* le nom du nœud
* le code à exécuter
* un section import décrivant les données d'entrées
* une section export, décrivant les données en sortie (elle est optionnelle, par exemple pour un nœud faisant une entrée/sortie)
* un règle d'activation (optionnelle)
Voici un exemple, le nœud Lymph communicant avec le nœud Monitor à travers le lien désigné par pressure :
À travers plusieurs passes, le code est vérifié, enrichi, généré :
* le Graph Language Processor vérifie la sémantique et la syntaxe
* le Graph Balancer ajoute les coordonnées des nœuds en charge du calcul, sous la forme <chassis> <numéro de processeur>
* le Tag Assigner rajoute les tags : <T<sub>x</sub>>
* le Data Graph Linker produit un code exécutable à partir du code et de la definition du graphe.
Par défaut, un nœud produit un résultat quand toutes ses entrées sont satisfaites (par définition d'une architecture dataflow). Une régle d'activation est définie par le mot clef when, nécessaire pour coder les instructions conditionnelles (si/if). Par exemple le nœud défini ci-dessous produira un résultat dès qu'une entrée est valide :

## Interface avec les langages de haut niveau

En C, le code pour récupérer une valeur de l'entrée (l'arête du graphe) ARC se fait par la fonction floread (ou in en FORTRAN). Un nœud n'exécutant du code que si toutes les entrées sont satisfaites, l'appel à la fonction floread n'est pas bloquant.
De la même façon, la fonction flowrite (out en FORTRAN) sera utilisée pour envoyer une valeur sur l'arête ARC du graphe :
Le paramètre size est le nombre de mots de 16 bits.
On note que du code C et FORTRAN peuvent donc parfaitement cohabiter.

## Rapidité

Il est difficile de comparer la rapidité de ce type d'architecture avec les ordinateurs d'architecture de von Neumann. Néanmoins Loral Instrumentation indique que les nœuds de calculs vont à peu près à la même vitesse qu'un VAX 11/750 et que 100 processeurs pourraient délivrer une puissance de 100 MIPS (et 12 Mo de mémoire). Les concepteurs font la remarque que lorsqu'il s'agit d'acheter quelque chose de nouveau et pas encore testé comme un ordinateur parallèle, l'acquéreur ne va probablement pas acheter une machine à 100 processeurs à un prix supérieur à 500 000 dollars, mais plutôt tester une configuration plus petite avant de l'étendre s'ils est satisfait. Une des possibilités pour atteindre de bonnes performances avec une machine d'entrée de gamme est de proposer le maximum de mémoire vive et des processeurs rapides.
Il est fait mention dans la presse que cet ordinateur, offrant des vitesses entre 5 et 256 MIPS aurait sa place entre les superminis comme le VAX 8600 (4 MIPS) et les petits superordinateurs (60 MIPS).

## Informations commerciales

L'annonce de cet ordinateur est datée du 29 septembre 1985, et le premier exemplaire aurait été livré en avril 1986. Le prix du modèle de base avec 5 processeurs était de 67 000 dollars, allant jusqu'à 2 millions.
Il est difficile de savoir précisément combien d'exemplaire de LDF 100 ont été vendu. Le gouvernement américain aurait acheté le premier exemplaire, plus deux autres, sans qu'on ait d'information sur la configuration des machines.