minpic01.jpg

PARweise

Zwei Transputer-C-Compiler f�r PCs im Vergleich

David G�hler

Occam ist manchem nicht geheuer, auch wenn er Programme f�r Transputer schreiben m�chte. C dagegen ist weit verbreitet, C-Source l��t sich meist leicht portieren, hei�t es. Nur mit der Parallel-Verarbeitung hapert es. Mit Inmos-C und Par-C stehen zwei Compiler zum Vergleich, die diesem Manko mit zwei verschiedenen Konzepten zu Leibe r�cken.

Unterthema: Ausstattung der C-Compiler
Unterthema: Paralleles C
Unterthema: Benchmarkergebnisse
Unterthema: Ergebnisse auf einen Blick

An sich sollte man meinen, da� C-Compiler sich doch weitgehend �hneln m�ssen, gerade wenn sie beide auf einem PC mit mindestens einer Transputer-Karte (kompatibel zu einer TEK 4/8 oder einem B004-Board von Inmos) laufen. Doch (leider) gibt es viele Unterschiede, was Portierungen nicht eben einfach macht, insbesondere bei der Implementierung von `Parallelit�t� kocht jeder seine eigene Suppe.

Gut dokumentiert ...

Inmos beeindruckt gleich zu Anfang durch drei blutrote Schuber im Format 20 � 24 Zentimeter. Im ersten befinden sich ein `Delivery Manual�, f�nf 3,5- und elf 5,25-Zoll-Disketten. Der zweite Schuber enth�lt Beschreibungen zu allen mitgelieferten Programmen, der dritte beinhaltet Erl�uterungen zu allen Library-Funktionen und Bemerkungen zum ANSI-Standard. Vorweg: Das Inmos-C h�lt sich vollst�ndig an den ANSI-Standard; man findet sogar eine Liste mit Erl�uterungen, wie in jedem einzelnen Fall verfahren wurde, in dem ANSI es dem Compiler-Hersteller �berl��t, wie er etwas implementiert. Insgesamt bekommt man knapp 1000 Seiten, darunter noch ein kleines, `Handbook� genanntes Heft, das auf 60 Seiten die m�glichen Parameter aller Programme und alle Library-Funktionen auflistet.

Die Dokumentation ist sinnvoll gegliedert, gut zu lesen und l��t selten Fragen offen - wenn man des Englischen kundig ist. Fragen waren in der Regel schnell durch einen Blick in das passende Handbuch zu kl�ren. Gute Dokumentation - das ist eine pers�nliche Auffassung - zeichnet sich auch dadurch aus, da� man schnell in ihr das findet, was man sucht. Differenzen zwischen Software und Beschreibung waren nicht festzustellen; das ist ja selbst bei Produkten dieser Preislage nicht immer der Fall.

Auch die Installation machte keine Probleme. Nach 16 Minuten des Diskettenwechselns, der Beantwortung einiger Fragen, sowie einigen Eintragungen in der autoexec.bat und config.sys, konnte mit einem Probelauf begonnen werden. Das erste `Hallo Welt� lief sofort. Leider waren einige Fragen der automatischen Installation erst nach gr�ndlichem Lesen des `Delivery Manuals� zu beantworten. Man sollte den Benutzer lieber bei der Installation weniger fragen und mehr installieren. Wenn etwas fehlt, ist dies f�r den Anf�nger nur schwer zu beheben.

Als sehr n�tzlich hat sich das `Handbook� herausgestellt. Da in ihm alle Optionen und Funktionen beschrieben sind, hat es in den meisten F�llen zur S�ttigung des Informationshungers ausgereicht. Eine Idee, die auch andere Hersteller aufgreifen sollten.

Gro�formatig

Urspr�nglich wurde das Par-C von der Firma Parsec entwickelt, die inzwischen von der ebenfalls in Amsterdam ans�ssigen Associated Computer Experts bv (ACE) �bernommen wurde. Par-C wird in einem Ordner im Leitzformat geliefert. Darin enthalten sind f�nf 360-KB-Disketten, sowie knapp 700 DIN-A4-Seiten in Englisch gehaltene Dokumentation. Da sie in einem gut zu lesenden Stil verfa�t ist, l��t sie sich ebenfalls leicht lesen.

Leider lie� das Werk die Klarheit und Ausf�hrlichkeit des Inmos-Handbuchs vermissen. Einige beschriebene Optionen kannte der Compiler nicht (man mu�te die �nderungen einem Readme-File entnehmen). Nicht selten war mir nur noch in Erinnerung, etwas gelesen zu haben; zu finden war es dann erst nach l�ngerem Suchen.

Auch die Beschreibung der Installation war nicht vollst�ndig. Ein Hinweis fehlte, was alles in die autoexec.bat einzutragen ist. Dementsprechend gelang die komplette Installation nicht auf Anhieb. Einem kundigen PC-Benutzer sollte sie jedoch keine Schwierigkeiten machen. Nach sechs Minuten war der Compiler in der Lage, sein `Confidence testing� erfolgreich zu durchlaufen.

Sehr ausf�hrlich und gut gelungen sind die Beschreibungen zu den Erweiterungen von C, die Parsec f�r die Implementation der Parallelit�t in C eingef�gt hat. (Die Firma nennt die so erweiterte Sprache `Parallel C�, und ihr `Par C� die erste Implementation dieser Sprache). Die in diesem Kapitel angewandte Sorgfalt sollte Parsec/ACE auf alle Kapitel legen. Da beide Compiler keine Online-Hilfen bieten, sind die Handb�cher die einzige Informationsquelle bei Fragen, Fehlern und Unklarheiten.

Wie die vielen Disketten schon vermuten lassen, sollte man etwas gr��eres als einen XT mit Floppy besitzen, um die Compiler benutzen zu k�nnen. Das Inmos-C ben�tigt gute sieben Megabyte Plattenplatz, Par-C begn�gt sich mit zwei Megabyte. Beiden gemeinsam ist, da� ein schneller Rechner nicht schaden kann. Er braucht nicht viel Speicher zu haben (ein MByte reicht), aber flott sollte er sein. Der Test-Rechner war ein 386er mit 25 MHz Taktfrequenz; damit l��t sich arbeiten.

Der Compiler allein macht es nicht. Heutzutage ben�tigt man f�r eine z�gige Entwicklung neben dem �bersetzer noch diverse Hilfeprogramme, die die Arbeit erleichtern, Fehler verhindern und finden helfen. Besonders wichtig sind hierbei ein Debugger und ein Make. Wer schon einiges entwickelt hat, wei�, da� er diese beiden Tools neben dem Compiler am h�ufigsten braucht. Weiter hilfreich sind ein Editor, der auf den Compiler abgestimmt ist, ein separater oder integrierter Assembler, ein Librarian (Library-Verwaltungsprogramm), ein Profiler, Cross-Referenz-Tools, Object-Analyse-Programme, ein Programm zur Volltextsuche (grep zum Beispiel) und eventuell eine Oberfl�che (wie bei Borlands Turbo-Familie).

Leicht bekleidet

Hier ist der erste gro�e Unterschied zwischen den beiden Produkten zu finden. Par-C ist ein Compiler und sonst nichts. Es fehlt fast alles: Der Debugger, das Make, ein Editor, ein Librarian, die Oberfl�che und sonstige n�tzliche Tools. Lediglich ein RUN2ROM (zum Erzeugen vom ROM-f�higen Code) sowie ein MODRUN (zum Ver�ndern bootf�higer Programme) liegen dem Quartett Compiler/Assembler/Linker/Server bei. Der Linker vermag zumindest noch Symbol- und Cross-Referenz-Listen zu erzeugen. Ein Profiler und der Server (teilweise) werden als Source mitgeliefert.

Wie kann man einen Compiler dieser Preisklasse so `nackt� verkaufen? Damit lassen sich zwar Programme erzeugen, aber kaum entwickeln, wenn man unter diesem Begriff zumindest noch das Debuggen fa�t. Da es sich bei den produzierten Programmen um solche f�r Transputer handelt, kann man auch nicht auf andere (PD-)Tools zur�ckgreifen; gar nicht zu denken an bestimmt auftretende Probleme in einem Transputer-Netz.

Reichlich gedeckt

Inmos dagegen hat sein Produkt mit vielen Tools flankiert. Dazu geh�rt ein (Source-Level-)Debugger, der sowohl interaktiv als auch als Postmortem-Debugger eingesetzt werden kann, ein Librarian, einige Programme zum Inspizieren von Object-Modulen, ein Simulator (der in der PC-Version allerdings einen Transputer ben�tigt!?), einen einfach zu bedienenden Makefile-Generator, der Makefiles f�r g�ngige Make-Programme erzeugt, und ebenfalls ein Programm zum Erzeugen von EPROM-f�higem Code. Leider fehlt ein Make und ein Editor (auf Wunsch liefert Inmos einen PD-Falten-Editor sowie ein PD-Make mit).

Der Source-Level-Debugger sucht seinesgleichen. Er hat diverse Funktionen, die auch die Suche nach Fehlern im Netz stark vereinfachen. So kann er beispielsweise Breakpoints verteilt �ber viele Prozessoren setzen, und stets die Source zu einem erreichten Breakpoint pr�sentieren. Hat man nur einen Transputer, so mu� man allerdings mit dem Postmortem-Modus vorlieb nehmen, da der Debugger immer einen Transputer f�r sich beansprucht. Hierzu existiert ein Programm namens `idump�, das auf Wunsch auch das komplette Netz in ein Postmortem-File verwandelt, das anschlie�end entwanzt werden kann.

Obgleich auf dem PC-Sektor Entwicklungsoberfl�chen nicht selten sind (und Inmos mit dem TDS keinen schlechten Wurf getan hatte), lassen sich alle - sowohl die Inmos- als auch die Parsec-Tools - nur �ber den COMMAND.COM `bedienen�. Bedienungskomfort erh�lt man erst nach dem Schreiben diverser Makefiles und Batch-Dateien.

Auch in der Art, wie ein Programm auf mehrere Transputer aufgeteilt wird, unterscheiden sich die beiden Kandidaten. Inmos w�hlt den konventionellen (statischen) Weg, eine Konfigurationsdatei zu erstellen, die ein Transputer-Netz und die darauf zu verteilenden Prozesse beschreiben. Daf�r hat man extra eine einfache, C-�hnliche Sprache entwickelt, um trotz der statischen Beschreibung m�glichst flexibel zu bleiben.

Nach dem Linken ist noch ein Konfigurations- und Sammeldurchlauf vonn�ten, wobei f�r jeden Transputer angegeben werden mu�, welche Prozesse auf ihm laufen, welche Verbindungen nach au�en wie hei�en, und so weiter. Nach dem Konfigurieren sind alle gebundenen und konfigurierten Dateien zu einem bootf�higen Programm zusammenzuholen: das erledigt das mitgelieferte Programm `icollect�. Das Konfigurieren kann entfallen, wenn man nur einen Transputer hat.

Die innovative Art

Parsec erledigt diese Aufgabe g�nzlich anders - und auf eine pfiffige Weise: Das auszuf�hrende Programm wird auf alle Transputer geladen. Bevor es jedoch gestartet wird, hat ein `Schn�ffel�-Programm vorher das komplette Netz ausgelotet und auf jedem Transputer eine immer vorhandene Datenstruktur gef�llt. So kann jedes Programm jederzeit `nachfragen�, auf welchem Transputer es l�uft, wieviele es insgesamt gibt, wieviele Nachfolger es hat, �ber welches Link es gebootet wurde und �hnliches. Mit diesem Wissen kann der Programmierer das Programm so schreiben, da� erst zur Laufzeit entschieden wird, welcher Transputer welchen Code ausf�hrt.

Diese Methode ist weitaus flexibler als die von Inmos, da man vor dem Start des Programms schnell noch ein paar Karten hinzustecken kann, um einer Probleml�sung Beine zu machen. Sie hat aber auch einen Nachteil: auf jedem Transputer mu� eine Kopie des gesamten Programms vorhanden sein. Wird das Programm zu gro�, mu� man alle Transputer mit mehr RAM versorgen.

Gem�chliche Renner

Zu Transputern f�llt den meisten befragten Personen zuallererst `hohe Geschwindigkeit� ein. Recht haben sie, geh�rt der T800 doch in die Leistungsklasse, in der die Gespanne 68030/68882 und 80386/80387 zu finden sind. Aus diesem Grund sollte man erwarten, da� auch Compiler und Kompilate flott sind - weit gefehlt.

Die Tabellenwerte zeigen, da� beide Compiler recht lange brauchen (das Inmos-C f�llt beim Linken kleiner Dateien besonders unangenehm auf). Der Flaschenhals - so k�nnte man vermuten - sei hierbei das 8-Bit-Link-Interface zum Transputer. Doch bis auf den Compiler und den Debugger des Inmos-C habe ich in diesem Test nur die PC-gest�tzten Tools verwendet, die ausschlie�lich auf dem PC laufen. Zwar liefert Inmos alle Programme auch in einer f�r Transputer ausf�hrbaren Form aus, diese sind jedoch noch viel langsamer. So gelang es nicht, mit dem Linker f�r den Transputer ein leeres Programm unter 36 Sekunden zu linken (einem Inmos-Mitarbeiter gelang dies nach eigener Aussage sehr wohl, doch das ist eine andere Geschichte).

Entgegen einiger Andeutungen im Handbuch laufen alle Programme des Par-C ohne Transputer. Beim Linken merkt man dies besonders. Der Linker arbeitet recht flott. Er hat auch keine 1,2 MByte gro�e Library zweimal zu beackern wie der Inmos-Linker, denn alle Libraries des Par-C-Compilers machen zusammen nicht einmal 100 KByte Code aus. Hier kann man sehen, was ein paar Optimierungen bringen k�nnen.

Die Programmgr��en gehen in Ordnung, denn der Transputer wird als CPU ohne Betriebsystem genutzt. In jedem Programm mu� das komplette Server-Protokoll zwischen Transputer und Host-PC eingebaut sein. Wenn da noch ein `printf()� und ein paar kleinere Routinen zusammenkommen, sind 20 KByte nicht zuviel. Ein `Hello World� auf einer Sparc `wiegt� dagegen 105 KByte. Wer will sich da noch beklagen?

Setzt man jedoch die 680 Zeilen der Whetstone-Source in Beziehung zu den 25 Sekunden, die es vom Source zum ausf�hrbaren Programm braucht, so l��t das erahnen, wie viel Zeit man an einem PC mit Warten verbringen mu�, wenn man an gr��eren Projekten arbeitet. Auf meinem 68030-System ben�tigt ein Compiler-Durchlauf inklusive Linken 7 Sekunden, Turbo-C l�uft da noch einiges schneller. Wo bleibt die Zeit?

Die Ausf�hrungszeiten sind leider nicht so, wie die langen Arbeitszeiten der Compiler vermuten lassen. Insbesondere die Dhrystone-Werte machen stutzig: F�r eine 32-Bit-CPU bei 25 MHz sollten schon 6000 bis 7000 Steinchen drin sein. Auch die kWhetstones sind nicht �berragend. In einem Werbeblatt zum Par-C-Compiler waren bessere Zeiten zu finden, doch trotz des Verlegens von Code und Data ins interne RAM lie� sich der Wert nicht �ber 1000 kWhetstones bringen.

Auch Inmos vermeldete weit bessere `Stone-`Ergebnisse. Nun haben Hersteller sicher die M�glichkeit und auch die Neigung, sich optimale Konfigurationen hinzustellen und zu nutzen, so da� auch Benchmarks die besten Ergebnisse liefern.

Ungereimtheiten

Beim Programm `Ackermann�, das teuflisch rekursiv ist, zeigte sich ein Fehler im Par-C. Die Ackermann-Funktion ben�tigt als Parameter zwei Argumente, die der Gr��e wegen als `long int� deklariert waren. Das fertige Programm verweigerte aber die Arbeit. Schon bei `ackerman(3,1)� gab es Speicherprobleme, bei kleineren Werten kamen unsinnige Zeiten heraus. Bei Variablen des Typs `int� lief es einwandfrei. `long ints� haben beim Par-C eine L�nge von 64 Bit.

Oft st��t man im Handbuch zum Par-C auf den Begriff ANSI-C. Doch leider sind nur der Preprocessor und die Libraries (fast) ANSI-C-kompatibel. Der Compiler ist es nicht. Er unterst�tzt keine Prototypes und erlaubt auch nicht die Angabe der Parameter-Typen direkt hinter dem Funktionsnamen vor den Parameter-Bezeichnern. In der Library sind aber keineswegs alle ANSI-C-Funktionen zu finden. Wie so viele Hersteller hat sich Par-C die `locale�-Funktionen gespart; setjmp.h mit den Deklarationen zweier R�cksprungfunktionen fehlt ebenfalls.

Aus diesem Grund mu�ten einige Test-Programme an Par-C angepa�t werden. ANSI-C war und ist ein wichtiger Schritt in die richtige Richtung und sollte von keinem C-Compiler-Hersteller mehr mi�achtet werden. Es ist nicht klar, warum Parsec dies noch nicht ber�cksichtigt hat.

Das Inmos-C dagegen gl�nzt durch absolute Kompatibilit�t und unterst�tzt dar�ber hinaus auch 16-Bit-Transputer. Dies macht das Inmos-C besonders f�r Maschinensteuerungen interessant, da in einer genormten Hochsprache programmiert werden kann.

Fazit

Die Erweiterung der Sprache C um drei neue Schl�sselw�rter ist die elegantere L�sung, C Parallelit�t beizubringen. Es ist nicht nur intuitiver, es entbindet den Programmierer in vielen F�llen auch davon, sich Gedanken �ber die gleichzeitige Nutzung von einmaligen Ressourcen zu machen. So erlaubt Par-C dem Benutzer, 35 parallel laufende Prozesse zu starten, die alle gleichzeitig auf `stdout� schreiben.

Die Idee ist faszinierend, aber die Implementierung noch nicht. Par-C mangelt es an manchem: an umgebenden Tools, an noch besserer Dokumentation, an ANSI-C-Konformit�t, an Fehlerfreiheit. Auch so Kleinigkeiten wie das Fehlen einer Meldung, wenn das Transputer-Errorflag gesetzt ist - das Transputer-Programm steht und es passiert nichts -, zeigen, da� an diesem Produkt noch gearbeitet werden mu�.

Inmos-C dagegen ist bieder, aber gut. Es ist nicht schnell, bietet auch nicht alles, was man gerne h�tte - aber das, was man bekommt, ist grundsolide, funktionell und bestens beschrieben; etwas mit dem man arbeiten und auf das man sich verlassen kann. Man sollte sich in England dazu durchringen, noch ein Make mitzuliefern und dem Linker ein wenig Beine zu machen. Sonst bleibt wenig an dem Produkt auszusetzen.

Da� Inmos das andere Konzept bei der Implementation von Parallelit�t gew�hlt hat, ist auf den zweiten Blick auch nicht so bedeutsam. Denn Parallelit�t auf einem einzigen Transputer macht wenig Sinn, und bei mehreren ist auch beim Par-C-Konzept die Eleganz dahin. Dann n�mlich reicht das `par�-Statement allein auch nicht mehr aus und man mu� mit geeigneten Programmkonstruktionen (if, for ...) entscheiden, auf welchem Prozessor gerade welcher Code laufen soll. Und damit bleibt letztendlich doch alles am Programmierer h�ngen, egal welches C er nun benutzt - auch wenn es ihm im einen Fall leichter gemacht wird. (bb)

Literatur
[1] Mark Williams Company, ANSI C, A Lexical Guide, Prentice Hall, 1988

[2] David G�hler, C-Zaren, Lattice 5.0 und Aztec 5.0 f�r den Amiga im Vergleich, c't 5/90, S. 92

Kasten 1


W�hrend Inmos seinen C-Compiler mit einer nahezu vollst�ndigen Tool-Sammlung umgeben hat, fehlt beim Par-C von Parsec so einiges.

Ausstattung der C-Compiler

Par-C 1.31 Inmos-C 1.42f
Compiler
Kommando-Zeile++
integrierte Oberfl�che--
ruft Linker+-
Inline-Assembler++
T2-Support-+
FPU-Direkt-Support++
Assembler-Output++
ANSI-kompatibel-+
Editor--
separater Assembler+-
Cross-Referenz-Lister++
Librarian-+
Assembler-Debugger-++
Source-Level-Debugger-++
Make - - 2)
Objekt/Library-Analyse-+
weitere Analyse-Programme-+
Profiler + 1)-
Hilfsprogramme wie grep,diff...--
Installations-Programm++
Dokumentation+-++
in Deutsch--
Bibliotheken ANSI-kompatibel-+

- nicht vorhanden,

+ vorhanden

++ vorhanden und sehr gut

+- vorhanden, aber mit M�ngeln

1) im Source zum �bersetzen

2) es existiert jedoch ein Makefile-Generator

Kasten 2


Paralleles C

Um Parallelit�t in C zu implementieren, gibt es zwei M�glichkeiten: Entweder man f�gt den Libraries Funktionen hinzu, die parallellaufende Prozesse starten, terminieren und mit Priorit�ten versehen, oder man erweitert die Sprache C um einige Anweisungen.

Inmos ging den ersten Weg, Parsec mit Par-C den zweiten. Der Erstgenannte hat den Vorteil, den Pfad der Tugend - des reinen C - nicht zu verlassen, daf�r aber den Nachteil, so manche Verrenkung beim Programmieren in Kauf nehmen zu m�ssen. Was in Occam eine einfache Anweisung war, f�hrt in C jeweils zu einem Funktionsaufruf. Dies ist h�ufig nicht nur schlechter zu lesen, es zwingt den Programmierer oft, selbst Ressourcen zu allozieren, zu testen, ob er sie erhalten hat, und zuletzt wieder freizugeben. In Occam war das nie ein Thema.

Par-C dagegen ist die Implementierung von `Parallel C� - ein Standard-C mit drei Erweiterungen: der `par�-Anweisung, dem Datentyp `channel� und der `select�-Anweisung. Sie entsprechen weitgehend den Occam-�quivalenten.

par

Die par-Anweisung gibt es in zwei Ausf�hrungen: In der einfachen Form folgt ihr eine �ffnende geschweifte Klammer, danach beliebig viele Anweisungen und eine schlie�ende geschweifte Klammer. Die Anweisungen in den geschweiften Klammern werden alle (quasi-)parallel ausgef�hrt.

M�chte man bei einer Anweisung keine Funktion aufrufen, sondern mehrere Anweisungen nacheinander ausf�hren lassen - jedoch parallel zu allen anderen innerhalb des par-Blocks -, so ist, wie in C �blich, ein Block mit geschweiften Klammern zu benutzen. Ein Beispiel:

par
{
 lieswas(ein, zwei);
 tuwas();
 { i = 5;
   j = i + 5;
 }
 schreibwas(drei);
}
In der komplizierten Form hat das par die Syntax der for-Anweisung. Dieses Beispiel erzeugt acht parallele Prozesse, die alle die Funktion `BerechneSpalte� aufrufen:

par (i=0; i <8; i++)
{
 { BerechneSpalte(array,i);
 }
}
Jeder Proze� bekommt aber sein eigenes `i�. Die Kompatibilit�t zum for geht sogar soweit, da� ein

par (;;) 
erlaubt ist, was aber stets zu einem Runtime-Error f�hrt - wer hat schon unendlich viel Speicherplatz?

channel

Mit dem channel -Datentyp kann man Kan�le vereinbaren.

channel reinraus; 
Nun kann man die Variable `reinraus� wie bei jedem anderen elementaren Datentyp (wie int, long, char ...) auch in Zuweisungen und Funktionsaufrufen benutzen. Steht `reinraus� links in einer Zuweisung, wird der Wert der Zuweisung in den Kanal geschrieben, steht sie rechts, wird sie aus dem Kanal gelesen. Es lassen sich auch Felder aus Kan�len definieren, oder Kan�le in Strukturen unterbringen. Es geht alles, was mit einem elementaren Datentyp zu machen ist.

Eine m�gliche Kette von parallellaufenden Prozessen, die verzahnt Daten weiterreichen, sieht so aus:

channel feld[10];
int i;
par
{
 berechne_irgendwas(0, 0L, feld[0]);
 par (i = 1; i <= 9; i++)
 {
  berechne_irgendwas(i, feld[i-1], feld[i]);
 }
 berechne_irgendwas(9, feld[9], 0L);
}

select

Als drittes implementiert die select-Anweisung das �quivalent zum `ALT� von Occam, nur etwas flexibler und komplizierter. Damit lassen sich Multiplexer bauen und Programme oder Prozesse schreiben, die an vielen Eingabe-Kan�len auf Eingaben horchen.

Wie in Occam ist es m�glich, mehrere Kan�le gleichzeitig abzuhorchen. Kommt etwas an irgendeinem Kanal an, verzweigt select in die passende Routine, die die ankommenden Daten entgegennimmt. Anders als in Occam wird hierbei jedoch das Byte, welches den Kanal aktiviert und die select-Anweisung dazu bringt, in eine bestimmte Funktion zu verzeigen, nicht von der select-Anweisung geschluckt. Es mu� von der aufgerufenen Funktion gelesen werden. Dies ist aber in den meisten F�llen von Vorteil, da ein verschicktes Byte meist auch eine auszuwertende Bedeutung hat.

Auf ein Beispiel m�ssen wir hier verzichten, da die Syntax und die Funktion von select zu viele Erkl�rungen erfordern w�rde.

Kasten 3


Eigentlich h�tte man k�rzere �bersetzungszeiten und bessere Benchmark-Werte von Transputer-Compilern erwartet.

Benchmarkergebnisse

Inmos Transputer-C

NameSourceComp-ZeitObjectLink-Zeit1)Code
Leer2142741420393
Hello7153451424517
Ackermann82077451629877
Quicksort1028712171530564
Dhrystone17717 262)77942041235
Whetstone156261544221433342

Laufzeiten
Ackermann (3,9)40,12
QuickSort (50000)8,80
kWhetstones1218
Dhrystones 2.13225

1) Zeiten f�r `ilink� und `icollect�

2) Compiler zweimal gestartet (f�r dhry_1 und dhry_2)

Parsec Par-C

NameSourceComp-ZeitObjectLink-Zeit1)Code
Leer1736431161
Hello714104314723
Ackermann7095612420968
Quicksort11446878421632
Dhrystone17717216358426186
Whetstone156262011876425097

Laufzeiten
Ackermann (3,9)107,0
(83,5) 1)
QuickSort (50000)15,1
(12,1) 1)
kWhetstones906
Dhrystones 2.13030

1) mit Code und Data im internen RAMGr��enangaben in Byte, Zeiten in Sekunden; Dhry- und Whetstones in Durchl�ufen (h�here Werte = besseres Ergebnis)Host-Rechner: 25 MHz AT mit 80386, DOS 3.3, VGA 16 Bit, 4 MByte RAM

Transputer: TEK4/8 mit T800, 25 MHz, 1 MB RAM (120 ns)

Kasten 4


Ergebnisse auf einen Blick

Inmos ANSI-C-Toolset

[ + ] volle ANSI-C-Implementierung

[ + ] sehr gute Dokumentation

[ + ] unterst�tzt T2-Transputer

[ + ] zuverl�ssig

[ + ] viele Tools inklusive Debugger

[ + ] Server auch als Source

[ - ] langsam

[ - ] Make fehlt

[ - ] Bedienungskomfort

Parsec/ACE Par-C

[ + ] gutes Sprachkonzept

[ + ] flotter Linker

[ + ] geringer Platzbedarf (kleine Libraries)

[ + ] separater Assembler

[ + ] Server auch als Source + Library

[ - ] diverse Entwicklungstools inklusive Debugger fehlen

[ - ] nicht ANSI-C-kompatibel

[ - ] Bedienungskomfort

[ - ] keine T2-Unterst�tzung

[ - ] Dokumentation etwas un�bersichtlich