Transputer T425
guillaume.tello@orange.fr

Retour aux machines
Back to My Machines


Français
English


Hardware
Driver
Installation
Software
Installation
Langage C
RPN
Calculator
Assembler
Multi
Processing
Processes
Communications
Three Transputers Net

The Hardware



Pour commencer simplement dans la programmation d'un Transputer, et sans trop investir, on m'a conseillé d'acquérir cette carte AVM-ISDN Controler B1 PCI.

C'est une carte pour réseau RNIS (Numéris) qui disparaissent pau à peu. Elles pouvaient gérer sur la même ligne de la voix, des données, de la vidéo et du fax. Elles embarquaient en effet un processur de chez INMOS, le plus souvent le Transputer T400 à 20MHz ainsi que 1Mo de RAM. Leur tâche étaient de gérer les échanges.

Le fait est qu'on peut détourner l'usage premier de cette carte pour programmer directement le Transputer comme un coprocesseur équipé de sa RAM.

Trouvée sur Ebay à un bon prix, j'ai entrepris l'installation!
To start playing with Transputer programming and without much investment, I've been directed to this board: the AVM-ISDN Controler B1 PCI.

They are cards to communicate on a ISDN network for both voice, data, video and fax on the same line. They came with a CPU from INMOS, mostly the Transputer T400 clocked at 20MHz that could rely on 1MB RAM. Their task was to manage the transferred data.

The fact is that one can turn this ISDN board into a coprocessor board by programming directly the Transputer.

Found on Ebay for a very good price, I started the installation.


J'ai été chanceux puisque la carte reçue est équipée d'un T425, une version améliorée du T400:
  • Interconnexions plus riches avec d'autres Transputers
  • Fréquence à 25MHz
  • 4ko de FastRam au lieu de 2ko
Ci-contre, les deux boitier de RAM et en dessous le T425 avec son circuit d'horloge à 5MHz, le standard pour alimenter les transputers.

Bien sûr, ces circuits donnent toute leur puissance dans une architecture multiprocesseur, mais c'est l'occasion d'en appréhender la programmation, en particulier avec le langage OCCAM développé par INMOS. On dispose également d'un compilateur C.
I've been lucky as this board comes with a T425, an enhanced version of the T400:
  • More interconnexions with other Transputers
  • Frequency up to 25MHz
  • 4kB of fasRam instead of 2kB
Here you can see the two RAM chips, and the T425 with its 5MHz clock, the standard to run the Transputers.

Of course, those chips show their full potential in a mutltiprocessor architecture, but that was the occasion to start learning the OCCAM language designed by INMOS. A C compiler is also available.



Driver Installation



Tout ce qui suit fut possible grâce à l'aide de Michael Bruestle. Non seulement il a pris du temps pour me guider pas à pas, mais en plus il est l'auteur d'une grande partie du pack que j'ai installé (il a recompilé, modifié, amélioré grandement le travail original de INMOS).

On trouve sur sa page tansputer.net de nombreuse documentations et téléchargements.


C'est parti pour l'installation. Il faut d'abord créer une interface pour dialoguer avec le Transputer.

Créez un dossier avec les fichiers utiles à cette installation.

Puis exécutez les commandes ci-contre.

Le fichier d'installation s'appelle linkisa.inf même pour les cartes PCI, ceci n'est pas une erreur.


rename c:\windows\inf\avmisdn.inf to avmisdn.in_
delete c:\windows\inf\avmisdn.pnf

certmgr.exe /add "transputer.net RootCA.crt"
            /s /r localMachine root
			
certmgr.exe /all /add "CodeSigning2019.crt"
            /s /r localMachine trustedpublisher
			
copy /b "linkcls.dll" "%SYSTEMROOT%\system32"

devcon.exe dp_add "linkisa.inf"
Everything that follows wouldn't have been possible without the great help from Michael Bruestle. Not only he took on his personal time to guide me step by step, by he is the author of a great part of the pack I installed (he recompiled, modified, greatly enhanced the original work from INMOS).

On his page, tansputer.net, you'll find lots of informations, documents and software.


Now, the installation itself. First we need to create the interface to exchange data and commands with the Transputer.

Create a folder with those files.

Execute the commmands shown.

The installation file is named linkisa.inf even for the PCI boards, this is not an error!


Rebootez la machine et allez dans le Gestionnaire de Périphériques.

Le transputer doit apparaître comme sur la figure ci-contre.

Reste à installer l'interface logicielle de programmation...
Reboot your computer and open the Device Manager.

You should see the Transputer as shown!

Now it's time to install the programming tools.



Software Installation



Entrer ces deux commandes, elles associent les fichiers *.BTL avec ISERVER.

Ces fichiers BTL sont les exécutables du T425 qui lui seront envoyés.

Ouvrez ensuite le dossier d72uni, nous allons nous intéresser à BAVM.BAT et D72WIN.CMD.
assoc .btl=Transputer.Bootable.File
ftype Transputer.Bootable.File="%ISERVER%" /SB %1 %*


Enter those two commands, they make an association between *.BTL files and ISERVER.

Those BTL files are the executables that will be sent to the T425.

Open the d72uni folder, we'll now work on BAVM.BAT and D72WIN.CMD.


Pour modifier BAVM.BAT, nous avons besoin d'une information.

Retournez dans le Gestionnaire de Périphériques et demandez les Propriétés du Transputer.

Prenez l'onglet Names et cliquez sur Copier pour recopier le nom de notre matériel.

Ouvrez BAVM.BAT et dans la ligne
Set TRANSPUTER=
remplacez l'ancien nom par celui que nous venons de copier, puis sauvegardez.
To modify BAVM.BAT, we need one more information.

Go back into the Device Manager ans ask for Properties of the Transputer.

Select Names and clic on Copy to get the name of your device.

Open BAVM.BAT and in the line
Set TRANSPUTER=
replace the old name with the one you've just copied, and save the file.


Pour faciliter les opérations, créez un raccourci pour D72UNI.CMD:
La cible:
%windir%\system32\cmd.exe /K
  c:\TRANSP\d72uni\d72win.cmd 
    c:\TRANSP\d72uni\bavm.bat
	
Démarrer dans:
c:\TRANSP\d72uni 
Et donnez lui comme icone celle du fichier RSPY.EXE (dans le dossier BIN voisin de d72uni).
To ease operations, create a shortcut for D72UNI.CMD:
The target:
%windir%\system32\cmd.exe /K
  c:\TRANSP\d72uni\d72win.cmd 
    c:\TRANSP\d72uni\bavm.bat
	
Start in:
c:\TRANSP\d72uni 
And select the icon from RSPY.EXE (in the BIN folder next to d72uni folder).


Voilà, votre environnement est installé.

J'ai créé également une icone pour accéder au dossier d72uni.
Voilà, your environment is set.

I also added a shortcut to the d72uni folder.


Double cliquez sur Transputer Environnement et une fenêtre de commande s'ouvre avec tous les outils de diagnostic ou de programmation accessibles en ligne de commande.


Pour commencer, testez ceux-ci:
linktest
rspy -m
On y lit que le T425C dispose de
  • 4Ko accessibles en 1 cycle d'horloge, une RAM rapide
  • et le reste, 1020Ko sont accessibles en 3 cycles d'horloge.
  • La déception... Il n'est cadencé qu'à 20MHz et non 25!
Double clic on Transputer Environnement and a command window is opened with every tool for diagnostic or programming available.


As a starting point, try those two:
linktest
rspy -m
You can read that the T425C has:
  • 4KB with 1 clock cycle access, a fast RAM
  • 1020KB with 3 clock cycles access.
  • Disappointment... It is clocked at 20MHz and not 25!

Langage C



Allons dans le dossier EXAMPLES.C puis TEST qui contient le fameux HELLO.C que vous voyez affiché.

Le fichier de commandes MAKE.BAT fait des appels à:
  • ICC: le compilateur
  • ILINK : le linkeur
  • ICOLLECT : qui génère le fichier BTL exécutable
  • ISERVER : ligne inutile avec nos réglages...
Note: l'ensemble de la compilation est réalisée par le Transputer lui-même.
Let's enter the EXAMPLES.C folder, then TEST that contains the well known HELLO.C displayed here.

The batch file MAKE.BAT calls:
  • ICC: the compiler
  • ILINK : the linker
  • ICOLLECT : that output the BTL executable file
  • ISERVER : a useless line regarding our settings
Note: all the compilation is performed by the Transputer itself!


On tape MAKE et la compilation démarre.

Le paramète /ta spécifie le processeur cible.
  • /ta : pour all, tout Transputer
  • /t5 : pour le T425
  • /t8 : pour le T800 intégrant un FPU
Puisque nous avons lié les BTL à ISERVER, remarquez sur la dernière ligne qu'il suffit de taper le nom de notre programme pour qu'il soit envoyé au Transputer et exécuté.
Let's type MAKE and compilation starts.

The /ta parameter specifies the target CPU.
  • /ta : for all Transputer
  • /t5 : for the T425
  • /t8 : for the T800 with integrated FPU
As we linked the BLT files to ISERVER, note that on the last line you just have to type the name of your program to send it to the Transputer and execute it.



RPN programmable calculator

J'ai écrit un programme simulant un calculateur RPN. Pour l'utiliser, il suffit de taper:
RPN ... liste d'opérations ... ENTER
La première ligne calcule .

La seconde calcule .

La dernière règle les modes t+ (affichage du temps) et s+ (silent, moins d'affichage).
I wrote a program simulating a RPN calculator. To invoke it, just type:
RPN .. operations list ... ENTER
The first line computes .

The second line computes .

The last one sets mode t+ (time display) and s+ (silent, less verbose).


Quelques opérations plus poussées, ici on calcule une valeur approximative de PI en lançant 10 000 grains de sable dans un carré contenant un quart de cercle.


Puis on résout l'équation
Some more sophisticated operations : an approximation of PI with points selected at random into a square containing a quarter of circle.


Solving for x with


Pour finir, des intégrales. La première calcule
.

La seconde cherche la valeur x de la borne supérieure qui rend l'intégrale nulle
Last, some integrals. The first one is
.

The second searches the upper limit x that makes the integral equal to zero


Merci encore à Michael Bruestle qui a été un beta-testeur et a suggéré des modifications pertinentes.

Vous pouvez télécharger ici la documentation, les sources et exécutables pour Transputer ainsi que pour Atari.
Download RPN PDF documentation

Download RPN for Transputer

Download RPN for Atari
Thanks again to Michael Bruestle that was the beta-tester and that suggested many pertinent modifications.

You can download here the documentation, the source code and executables for Transputer and for Atari.



Assembler

Le processeur fonctionne avec une pile interne de trois registres 32 bits nommés A, B et C. Le principe est celui d'une calculatrice RPN ou du langage FORTH.

En plus de ces trois registres, les paramètres des fonctions sont passées par une pile descendante en mémoire pointée par un quatrième registre appelé Wptr (Workspace Pointer).

Le processeur a été conçu pour optimiser les fonctions les plus utilisées (addition, lire ou stocker une valeur en mémoire, saut...), celles-ci n'utilisent qu'un octet. Pour les autres, plusieurs octets peuvent être nécessaires.

Le programme ci-contre est la routine assembleur appelée dans un programme en C.

Le programme calcule le nombre de jour de vie d'une personne selon sa date de naissance. Pour cela, j'ai écrit en assembleur la procédure qui transforme une date en jour julien.

Au dessus est indiqué l'appel en C, trois paramètres seront passés sur la pile Wptr. En plus de ces trois paramètres, deux autres informations système sont nécessaires sur la pile qui occuperont les words 0 et 1.

De ce fait, mes paramètres day, month et year deviennent les words n°2, 3 et 4.

Mais, ma procédure nécessite 4 words de stockage temporaire qu'elle réserve sur la pile par
ajw -4
. Mes paramètres sont décalés de 4 et deviennent les words 6, 7 et 8.

Les paramètres temporaires sont les words 0, 1, 2 et 3.

Ceci explique les lignes
#define
Ceux réservés par le système ont les numéros 4 et 5 et ne seront pas accédés.

Chaque
ldl n
charge en A la valeur du word n en décalant A-B sur B-C.

Chaque
stl n
stocke la valeur de A dans le word n.

Les autres instrcutions utilisées sont:
ldc n
pour charger une constante dans A.
adc n
qui ajoute n à A.
sum, diff, prod, div
pour les opérations. A la fin de la procédure, le résultat du calcul se trouve dans A, c'est la valeur renvoyée par la fonction.

Important:
ajw 4
permet de libérer la place occupée par les registres temporaires.


The processor works with a three-32bits-words stack named A, B and C. This is similar to a RPN calculator or to the FORTH language.

Functions pass their parameters into a second descending stack in memory pointed by Wptr (workspace pointer), another register.

The internal conception of the processor has been optimized as the most used instructions (such as add, store value, load value, jump...) only require one byte. Other instruction may require more bytes.

The program presented here is a function in assembly language that is called from a C program. Above is the binding of the function.

The program computes your age in days knowing your birthdate. To do that, my function computes the Julian day of a date.

When a function is called, two system parameters are passed on a workspace in words 0 and 1, and additional parameters, such as day, month, year, start at words 2, 3 and 4. But, my routine requires four words as a temporary storage reserved by
ajw -4
on the workspace. Everything is shifted up four positions.

So day, month and year are words 6, 7 and 8.

And the temporary integers are on words 0, 1, 2 and 3.

This explains the lines
#define
Every
ldl n
load in A the value of word n shifting A-B to B-C.

Every
stl n
store A into word n.

The other main instructions are:
ldc n
to load a constant in A.
adc n
to add n to A.
sum, diff, prod, div
for the arithmetic operations.

At the end of the function, the result is in A, that's the returned value.

Important:
ajw 4
frees the space of temporary words.


Pour la compilation:
  1. la première ligne compile le fichier dol.c
  2. ensuite, julianday.s est passé au préprocesseur pour remplacer tous les #define par leur valeur, ceci est stocké dans le fichier temp.s
  3. on assemble temp.s en un fichier objet
  4. les fichiers objet de dol et temp sont linkés
  5. icollect rassemble le tout.
1) ICC dol /ta
2) ICC /pp julianday.s >temp.s
3) ICC /zs temp.s /ta
4) ILINK dol.tco temp.tco /f startup.lnk /ta
5) ICOLLECT dol.lku /t /o dol.btl


Download the files !
For the compilation:
  1. first the file dol.c is compiled
  2. then julianday.s is preprocessed to replace every #define with its value, this is sent to temp.s
  3. temp.s is assembled into an object file
  4. the object files for dol and temp are linked
  5. icollect builds the executable


J'ai utilisé la date de naissance de l'un des ingénieurs fondateurs de Inmos en 1978.

Au 7 avril 2020, il a vécu 30609 jours!
I used the birthdate of one of the engineers that founded Inmos back in 1978.

As the 7th of april 2020, he lived for 30.609 days.



Multiprocessing



Le processeur contient des instructions suffisantes pour gérer l'exécution de plusieurs processus en parallèle. C'est directement dans le microcode du Transputer que sont gérés les files d'attente, les priorités et la communication entre programmes sans aucun besoin d'un système d'exploitation multitâches.

Le programme ci-contre utilise deux instructions particulières:
startp
qui permet de lancer un autre processus.
endp
qui arrête le processus en cours avec une possibilité de synchroniser la fin de plusieurs process avant de continuer.

L'organigramme ci-contre montre un programme calculant la somme des entiers de 0 à n en séparant le calcul :
  • un programme additionnera les nombres pairs
  • et l'autre les nombres impairs.
Lorsque tous les résultats sont prêts, le programme principal se lance pour récupérer le résultat.

Le nombre de process est fixé à 3 et chaque instruction endp décrémente ce registre. Un fois arrivé à zéro, tous les programmes ont fini et l'exécution peut se poursuivre sachant que le travail a bien été synchronisé.
The processor contains every required instruction to manage the execution of several parallel processes. It's inside the microcode of the Transputer that the priorities, the queing, and interprocess communictions are managed. No need for a multitasking operating system.

The program presented here as an organigram, uses two particular instructions:
startp
that runs another process.
endp
that terminates the current process with the ability to synchronize the end of several processes before continuing.

This program computes the sum of integers from 0 to n with two processes:
  • one will sum the even numbers
  • the other will sum the odd numbers
When all processes ave finished, the main program goes on to return the result.

The number of processes is 3 in this case. Every endp instruction decrements this value. Once zero is reached, the system knows that all processes are terminated and so it can go on with the end of the program. This is a simple way to synchronize the work.


Organisation de la pile

Chaque processus ayant son pointeur de pile Wptr, l'accès à une même zone se fait avec un décalage.
Par exemple, la donnée Param est:
  • Pour le Parent : Wptr+6
  • Pour SUMEVEN : Wptr+13
    • 13 s'obtient avec 6+7
    • donc Param+EvSt
  • Pour SUMODD : Wptr+20
    • 20 s'obtient avec 6+14
    • donc Param+OdSt
Stack Organization

Every process has its own stack pointer Wptr, so, access to a particular data is done with an offset from one process ton another.
For example, the word Param is:
  • For the Parent : Wptr+6
  • For SUMEVEN : Wptr+13
    • 13 is the result of 6+7
    • so Param+EvSt
  • For SUMODD : Wptr+20
    • 20 is the result of 6+14
    • so Param+OdSt


Au centre le programme Parent utilisant startp.

Autour les deux processus de somme des pairs (SUMEVEN) et impairs (SUMODD).

Tous se terminent par endp pour se synchroniser.

In the center the Parent program that uses startp.

Left and right the two processes to sum the even (SUMEVEN) and odd (SUMODD) numbers.

All terminate with endp to synchronize themselves.



Lorsque les trois processus sont finis, le système saute à l'adresse END prévue lors de la préparation du endp dès le début du programme.

La somme totale est retournée.


Download PARA.ZIP
When the three processes are over, the sytem jumps to END address, the one that was prepared at the beginning of the program with endp init.

The global sum is returned.



Process Communication





Dans un même processeur

Deux processus peuvent communiquer en s'échangeant des ordres ou des données.

Pour cela, le processeur gère des canaux de communication, les Channels, au niveau du langage machine directement. Là encore, pas besoin d'un système d'exploitation.

Les channels utilisent principalement deux instructions:
OUT
qui permet d'envoyer des données et
IN
qui permet d'en recevoir.

Afin que ceci soit synchronisé, un channel est défini par un mot de controle, c'est un WORD quelque part en mémoire. Les deux processus échangeant des données doivent faire référence au même WORD de contrôle.

En plus de cela, chacun fournit une adresse où sont stockées les données à envoyer ou recevoir ainsi que la taille en octets.

Ci-contre, un exemple d'échange.

Vous remarquez qu'au démarrage, un channel est initialisé avec la valeur hexadécimale #80000000 (que l'on obtient avec l'instruction
mint
qui charge en A la valeur "Minimal Integer").


Inside one only processor

Two processes can communicate and exchange data.

To acheive this, the processor manages communication channels at the machine language level, directly. There again, no need for a multitasking OS.

The channels are accessed via two main instructions:
OUT
to send data and
IN
to receive.

To synchronize the exchange, a channel is defined by a control WORD, somewhere in memory. The two processes must refer to the same control word when sending/receiving data.

In addition, each of them provides an address where to read or write data in memory and the data size in bytes.

Here you can see an example of communication program.

Note that a channel must be initialized with the hexadecimal value #80000000 (that we can get using
mint
that stores in A the "Minimal Integer").


Entre deux processeurs

La programmation est quasiment la même.
On remplace simplement notre mot de contrôle par l'une des huit adresses réservées au canaux physiques, appelés LINK, et qui sont au nombre de 4 sur la plupart des transputers et bidirectionnels.

En modifiant simplement une adresse, on passe d'une communication interne à une communication externe.

J'ai joint a titre d'exemple le même programme qu'au dessus (celui de la somme des entiers) mais en utilisant des canaux de communication entre les différents processus.




Download PARA-IO.ZIP
Between two processors

The programmation is quite the same,
You just have to replace your control word by one of these height reserved addresses corresponding to the physical channels, called LINK. On most transputers, there are four bidirectionnal links.

Just by modifying an address, we can switch from an internal to an external communication.

As an example, you can download the same program as before (the one adding integers), but this new one uses channels to exechange data between the different processes.



Three Transputers Net



Relier deux processeurs

J'ai d'abord acquis une seconde carte PCI équipée d'un T400. Reste à les relier entre-elles.
Il est trop difficile de travailler directement sur les broches du processeur, Mike m'a indiqué les endroits précis où se retrouvaient les signaux de communication au dos de la carte.
Il n'y a plus qu'à souder.
Link two processors

I first aquired a second board with a T400. Now, I wanted to link them.
It's really hard to work directly on the pins of the transputer. Mike showed me where to get the same signals on the back of the board in places more accessible.
Now, I just had to solder.


Maître et esclave

Le plus important est de relier les broches "LINK".
  • Link Out du T425 vers Link In du T400
  • Link In du T425 vers Link Out du T400
Avec ces deux liens, les processeurs communiquent. Le mieux ensuite est de définir le T425 comme maître. Ainsi, tout les processus seront commandés par un seul Transputer qui transmettra données et programmes à l'esclave.
  • Relier les deux broches RESET
  • Couper l'accès au RESET côté esclave, c'est le Maître qui le pilotera.
Master and slave

The most important is to wire the "LINK"s.
  • Link Out of T425 to Link In of T400
  • Link In of T425 to Link Out of T400
This allows the two processors to communicate. Then, the best is to define the T425 as a master. In this case, all processes will be managed from one Transputer that will boot, tranfert data and programs to the slave.
  • Wire the two RESET
  • Cut the RESET track on the slave, so the Master will drive it.


Réinstallation

J'ai ensuite réinstallé délicatement les deux cartes côte à côte en évitant de tirer sur les fils.
Back on the box

I reinstalled the two board in their PCI slots, very carefully, without pulling the wires.


Test du réseau

J'ai utilisé la commande
RSPY
qui montre que les deux Transputers sont connectés.
Le n°0 au n°1 et inversement sur leur Link#1. Par ailleurs, le T425 est relié au PC (HOST) sur son Link#0.

Ensuite, avec la commande
RSPY -l -m
j'affiche les vitesses des liens et la mémoire embarquée. Les deux transputers communiquent à plus de 800ko/s et notez que le T425 dispose 4Ko de FastRam sur les 1024 ko alors que le T400 est limité à 2Ko.
Net testing

I type the command
RSPY
that shows how the two transputers are connected.
T#0 and T#1 are linked through their Link#1. Besides, the T425 is linked to the HOST PC through its Link#0.

Then, with the command
RSPY -l -m
I get the speed and memory statistics. The two transputers communicate at a speed greater than 800kB/s and note that the T425 owns 4kB of FastRam among the 1024 kB while the T400 is limited to 2kB.


Ajout d'un 3e processeur

Comment connecter la 3è carte? Sachant que le T425 doit garder son Link#0 pour dialoguer avec le PC et que ses Link#2 et #3 sont trop difficiles à atteindre pour mes faibles qualités de soudeur, la seule solution était de sacrifier le Link#0 de la seconde carte pour la chaîner à la 3e.

De ce fait, le second processeur n'a plus accès au Host et ne peut être programmé que par ses deux voisins.

J'ai cherché sur la carte les points correspondants au Link#0 que j'ai fini par trouver. Reste à faire les soudures et à couper les pistes pour libérer le Link#0 du Host.

Cette méthode peut s'étendre à 4 processeurs ou plus, selon le nombre de slots PCI disponibles!
Adding a 3rd processor

How to connect the 3rd card? Knowing that the T425 must keep its Link#0 to talk to the PC and that its Link#2 and #3 are too difficult to reach for my poor abilities in soldering, the only solution was to sacrify the Link#0 of the 2nd card to chain it to the 3rd.

In this case, the second processor doesn't have access anymore to the Host and can only be programmed through one of its neighbours.

I searched on the card the points for soldering Link#0 that I finally found. Let's solder and cut two more tracks.

This method can easely be extended to 4 processors or more, according to the number of PCI slots you have.


Une carte devient centrale

Voici le détail de la carte centrale.

Elle est reliée à la fois au Master (T425) par son Link#1 et à la seconde carte Slave (T400) par son Link#0.

Le contact RESET est simplement chainé vers le nouveau processeur.

Sur la photo, je n'ai pas encore coupé les pistes Link#0.

Note: LinkOut#0 n'a pas sa résistance de 56 Ω sur la carte, je l'a ajoutée sur le fil rouge allant vers le 3e processeur.
One board becomes the center

Here is the detail of the central board.

It is wired to both the Master (T425) via its Link#1 and to the second Slave board (T400) via its Link#0.

The RESET point is simply chained from one processor to another.

On the picture, the tracks for isolating Link#0 are not cut yet.

Note: LinkOut#0 lacks its 56 Ω resistor, I had to add one on the red wire to the 3rd processor.


Test du réseau

J'ai réassemblé le tout et relancé
rspy
Le réseau de trois processeurs apparaît! Les vitesses restent les mêmes.

Il n'y a aucun lien direct entre le Master et le Slave2. Il faudra en tenir compte dans les programmes!
C'est le T400 central qui fera le lien dans le dialogue entre les processeurs extrêmes.
Net testing

I reassembled the whole stuff and run again
rspy
The 3-processor net appears! Link speeds are the same.

There is no direct link between Master and Slave2. Programs should take this into account!
It's up to the central T400 to make the link when the two distant processors want to talk.


Programme de calcul de PI

J'ai adapté le programme d'estimation de PI par une méthode probabiliste pour qu'il tourne sur un, deux ou trois processeurs. Voici ici les résultats pour un calcul de 100.000 points au hasard avec des coordonnées au format double.
  • près de 12 secondes pour un seul processeur
  • 6 secondes en répartissant la charge sur deux processeurs
  • 4 secondes en répartissant sur trois processeurs.
La logique est respectée.
PI Calculation program

I adapted the PI estimation program from random points into a square to run on one, two or three processors. Here are the results for a run of 100.000 points with double floating point coordinates.
  • close to 12 seconds for a single processor
  • 6 seconds sharing the work on two processors
  • 4 seconds sharing the work on three processrs.
The logic is safe.


Merci à Mike encore une fois pour l'envoi de cette troisième carte !

Vous trouverez ci-contre le programme en C pour le calcul de PI.
Download PICALC.ZIP
Thanks again to Mike for sending me this third board !

Next, you'll find the PI estimation program in C language.


Programme de RayTracing (Johan Dams source)

J'ai adapté un programme de raytracing pour qu'il tourne sur trois processeurs. Voici ici les résultats pour un calcul d'une image en 500×375 points.



La structure est la même que celle du calcul de PI, on utilise toujours le processeur central comme pont entre le maître et le dernier processeur quine peuvent pas communiquer directement.
  • Un fichier COMMON.C contenant la méthode générale (ici le calcul de Raytracing)
  • Un fichier MASTER.C dans lequel on transmet les dimensions du calcul au WORKER1
  • Un fichier WORKER1.C qui transfère les informations au WORKER2.
  • A la fin du calcul, MASTER sauve son bloc
  • WORKER1 envoit son bloc à MASTER qui le sauve
  • WORKER2 envoit son bloc à WORKER1 qui transfère à MASTER pour le sauver.
RayTracing program (Johan Dams source)

I adapted a Raytracing program to run on three processors. Here are the results for an image of 500×375 pixels.



The structure is similar to the PI Calculation, we use the central processor as a bridge between the master CPU and the third one that can't communicate directly.
  • One file COMMON.C with the general method (here the Raytracing)
  • One file MASTER.C that sends the required informations to WORKER1
  • One file WORKER1.C that transfers the informations to WORKER2.
  • When computation is done, MASTER saves its block.
  • WORKER1 sends back its block to MASTER to save it
  • WORKER2 sends its block to WORKER1 that transfers it to MASTER to save it.


Merci à Johan Dams pour son remarquable site sur la théorie du raytracing et qui m'a autorisé à reprendre ses sources en C pour que je les adapte au Transputer.

Lire ses articles (anglais).
Download RAYTRACE.ZIP
Thanks to Johan Dams for his fantastic articles describing the raytracing theory and that allowed me to reuse his source for a transputer conversion.

Read his articles.


15 décembre 2007