J.Wexler@edinburgh.ac.uk (11/25/88)
Here follows a revised report on my investigations into C compilers. (I also asked about debugging facilities, and I may get around to reporting on that topic in a week or so.) Many thanks to all who responded to my request for information, and those who told me where my previous report was wrong or inadequate. I should have asked, but I didn't, what kind of model of concurrency is provided by each implementation: occam-like, Unix fork-and-join, Ada tasking, ... ? Patrick van Renterghem has already published much of the information through this group, and I cannot summarise it or present it better than he has done. Much of my own information is incomplete or unconfirmed. This is indicated by phrases such as "believed to be" and "I suppose". I'd be grateful for any more details or corrections which you can supply. John Wexler Edinburgh Concurrent Supercomputer Project ________________________________________________________________________ "Penguin" have changed their name and are now called Pentasoft. The Penguin and Pentasoft compilers are the same, and the Unidot compiler is the same again. They have only a very few "compiler escapes" for low-level use of Transputer features - i.e., below the level at which occam operates, and more like the things one could do in assembler. These are not the sort of things that would normally be recognised as "language extensions". You think and program in "ordinary" C. You aren't expected to use the "compiler escapes" either, because MACROS are provided which use the "escapes" to do all the useful occam-like things. However, if you want to use them, the escapes are said to be very usable and convenient. Cornell's Trollius uses this compiler. They have written a library of functions to handle concurrency, and these functions use the macros which in turn use the compiler escapes. Logical Systems has a very good reputation for performance, and for having an outstandingly good maths library. It uses a library of functions to support concurrency; the language itself is standard and unextended. However, the compiler recognises many of the special functions as intrinsics, and generates in-line code for them. There are actually TWO sets of functions, to support two different models of concurrency. One gives an occam-like style (PAR, PRI PAR, ALT, etc.), and the other is more like forking and joining with semaphores and so forth. I don't know what happens if you mix calls on the two sets of functions. This one is a cross-compiler, supplied as C source code to run on a system of your choice. It does not generate modules compatible with Inmos' linker. The Logical Systems compiler is not at all expensive. Logical Systems market it directly. It is also sold by Levco, CSA, ParaSoft and (badged) by Microway. Furthermore, it is sold by Parsytec (who also, confusingly, sell the Parsec compiler). Finally, there may be sombody called Micropar selling it. 3L parallel C has no syntactic extensions, so programs are lint-checkable. It does have a special typedef for channels, "but it's really just a pointer", and there are no special operations on that channel type. Concurrency (PAR) and message-passing (input, output and ALT) are handled by a library of special functions. The mechanism distinguishes two kinds of process, light- and heavy-weight. Light-weight processes share code and data space (but not stack), and I suppose that they are roughly the same as the things you would group under PAR in occam. Heavy-weight processes seem to be more like the things you control with PLACED PAR: they have to be configured by a special language outside C. The compiler comes with a nice "flood-fill loader" which will rapidly load a copy of a piece of code onto every processor in any network, automatically supplying all the necessary code to implement a task farm. This means that you don't have to program a task farm yourself, and your compiled code is usable without modification on any configuration on Transputers. This compiler seems to be used by lots of people, and is marketed by Microway. Microway also sell the 3L(ex Lattice Logic) straight C compiler (see below), which causes some confusion. Microway have also badged Logical Systems' compiler, so when people talk about "Microway's own" C compiler, they probably mean Logical Systems'. 3L also do a straightforward non-parallel C compiler for Transputers. This is quite distinct from their parallel C. Originally it was a Lattice Logic product. Inmos' C is this one. Renishaw Controls have written a C compiler which is used on Meiko systems. This is another more or less standard C which uses a library of functions to provide control of channels and concurrency. It is also usable in a style favoured by Meiko in which one writes straightforward sequential procedures in C, and one calls them from a main program written in occam and called a harness. You can write your own harnesses, but the good news is that you can get pre-written harnesses which implement useful general styles of concurrency such as task-farming. Parsec is a Dutch company who have a parallel C compiler which is marketed by Parsytec (who are not the same people at all). The language is called Parallel C, and it really does have language extensions. It includes all of K&R C, with H&S extensions, but it also embodies the occam concurrency features in the language. This seems to be the only implementation which takes such a bold line (apart from the related Definicon compiler - see below). This compiler comes with a loader which automatically analyses any network of Transputers while loading is going on, and leaves a complete "map" of the network in the memory of every processor where the application program can find it. Apparently, the Parsec compiler derives from something produced by a compiler done by a "Dutch Techno-Commune". The Definicon C compiler is also descended from this one "on a different evolutionary path", and it also uses language extensions. My previous notion that it was the same as Logical Systems' is not correct. Just to confuse matters, Definicon also sell the 3L compiler... One correspond guesses that a reputed "Norcroft compiler" may be the same as 3L's compiler. However, Ian Young (of 3L) says: "Norcroft don't (as far as I am aware) do a transputer compiler, although they did license their C front-end to Perihelion, who have made a transputer compiler based on it. This is the compiler used in Helios." I have not heard of any other C compilers. I haven't followed up the story of who uses or sells whose compiler and what names or badges they attach to the compilers. There is still a lot of confusion to be cleared up in that area. ________________________________________________________________________ Several contributors included a disclaimer such as "Any statement appearing here represents my own opinion and should not be construed as any sort of official position or opinion of my employer."