wen-king@csvax.caltech.edu (Wen-King Su) (04/15/89)
The Cosmic Environment (CE) is a generic message-passing multicomputer control environment consisting of a set of daemon processes, user utilities and compiler libraries. The goal of CE is to provide a simple and uniform interface for multicomputers and to allow for the writing of truely portable application programs. CE is a distributed environment directly accessible from any UNIX machine connected to the same TCP/IP network. CE is now available for iPSC/2. Key Features: 1) Space sharing for large machines. Multiple users can be assigned disjoint sets of nodes in the same concurrent machine. 2) Interactive environment. Allocation and deallocation is cheap and fast. It takes one command to display the list of all available concurrent machines and their allocation status, one command to get the machine you want, and one command to free it. 2) The same set of programming primitives are available on all concurrent machines that CE supports, making the writing of portable programs possible and worthwhile. The set of message primitives are kept simple to keep the message handling overhead at a minimum. 3) The same set of programming primitives are available and can be used on all hosts in the same LAN, whether or not the host is physically connected to a machine. You can run your programs distributes across many hosts and utilize devices and resources not directly attached to the assigned concurrent machine. It takes only one function call and two arguments to become part of a computation. Processes send messages to each others using process ID, not channels. Message passing is transparent across machine boundaries. 4) A set of function, initialized at run time according to the concurrent machine used, helps reduce the problem of converting the representation of integer and floating point values. The CE currently support the following machines: 1) iPSC/1 2) iPSC/2 3) Symult (formerly Ametek) 2010 4) The Cosmic Cube 5) A set of NFS connected work stations pretending to be a real concurrent machine. Most people use SUN work stations. People around here call such a cube a "ghost cube". CE will also be available for the N-cube machines. Other features: 1) File IO from node process to the user's host. Yes, you can even do it from inside a iPSC/1. All stdio functions are available. 2) Unix debugger for node processes running on a "ghost cube". Since programs are interchangible at source level between different machines, you can debug your program on a "ghost cube" before running it on a real cube. 3) Remote compiler for specific systems. For instance, if you have an iPSC that is attached to a 310 box, you do not have to log in to the 310 to compile your programs. Simply keep everything on which ever machine you prefer and run the speedy compiler front end provided with CE. The front end will take care of all the transactions to make it looks like the compilation is actually taking place on your machine. The compiler uses a separate server on the 310 instead of the sluggish rsh/rcmd interface. The iPSC/2 uses the the 301 for remote compilation. 4) It polished by 5 years of intensive use. Best of all - it is free. You can obtain a programming guide from us by sending electronic mail to chuck@vlsi.caltech.edu. The programming guide will describe the procedure for obtaining the CE source. The CE is available to most research institutes without charge. The only language currently supported by CE is C. Additional languages, as well as CE for specific machine manufactures will be available separately from them. Currently, Ametek is the only company using CE as the basic control environment. Sample session: I am on a sun work-station called neptune. $ peek CUBE DAEMON version 7.2, up 6 days 23 hours on host sol { } 7d ipsc cube , b:0000 [ mars :iPSC d7] 56.3m { } 3d ghost cube , b:0000 [saturn :mimic ] 2.1h { } 3d cosmic cube, b:0000 [ venus fly trap] 23.4h { } 16n s2010 , b:0010 [ metis :ginzu ] 27.4m { } 4d ipsc2 cube , b:0000 [triton iPSC2 ] 8.4h $ cat > hello.c #include <cube/cubedef.h> main() { print("Hello World!!"); } $ ccipsc -o hello hello.c -lcube ## Compile for the iPSC cube hello.c ==> o10261o2.c ## produces hello.ipsc $ getcube 3 ipsc ## This will force 7d iPSC to 3D sub-cube allocated ## partition into smaller cubes $ peek CUBE DAEMON version 7.2, up 6 days 23 hours on host sol {group wen-king} 3d ipsc cube , b:0000 [neptune :iPSC d7] 3.0s { } 3d ipsc cube , b:0008 [ mars :iPSC d7] 57.7m { } 4d ipsc cube , b:0010 [ mars :iPSC d7] 57.7m { } 5d ipsc cube , b:0020 [ mars :iPSC d7] 57.7m { } 6d ipsc cube , b:0040 [ mars :iPSC d7] 57.7m { } 3d ghost cube , b:0000 [ saturn :mimic ] 2.1h { } 3d cosmic cube, b:0000 [ venus fly trap] 23.4h { } 16n s2010 , b:0010 [ metis :ginzu ] 27.4m { } 4d ipsc2 cube , b:0000 [triton iPSC2 ] 8.4h GROUP {group wen-king} TYPE reactive IDLE 1.0s ( -1 -1) SERVER 0s 0r 0q [neptune 5337] 2.0s ( -1 -2) FILE MGR 0s 0r 0q [neptune 5336] 3.0s (--- ---) CUBEIFC 0s 0r 0q [ mars 5292] 3.0s $ spawn hello -1 ## Load the program 7,0: Hello World!! 6,0: Hello World!! 5,0: Hello World!! 4,0: Hello World!! 3,0: Hello World!! 2,0: Hello World!! 1,0: Hello World!! 0,0: Hello World!! hello spawn ed in all nodes with pid 0 $ freecube ## release the cube Cube space deallocated $ peek CUBE DAEMON version 7.2, up 6 days 23 hours on host sol { } 7d ipsc cube , b:0000 [ mars :iPSC d7] 58.1m { } 3d ghost cube , b:0000 [saturn :mimic ] 2.1h { } 3d cosmic cube, b:0000 [ venus fly trap] 23.4h { } 16n s2010 , b:0010 [ metis :ginzu ] 27.4m { } 4d ipsc2 cube , b:0000 [triton iPSC2 ] 8.4h $ ccgh -o hello hello.c -lcube ## Compile it for the ghost cube $ getcube 3 ghost 3D sub-cube allocated $ peek CUBE DAEMON version 7.2, up 6 days 23 hours on host sol { } 7d ipsc cube , b:0000 [ mars :iPSC d7] 58.9m {group wen-king} 3d ghost cube , b:0000 [neptune :mimic ] 10.0s { } 3d cosmic cube, b:0000 [ venus fly trap] 23.4h { } 16n s2010 , b:0010 [ metis :ginzu ] 27.4m { } 4d ipsc2 cube , b:0000 [triton iPSC2 ] 8.4h GROUP {group wen-king} TYPE reactive IDLE 1.0s ( -1 -1) SERVER 0s 0r 0q [neptune 5354 ] 2.0s (--- ---) CUBEIFC 1s 1r 0q [ saturn 15989] 7.0s $ cps -ah ## Display host names 0 saturn udp:14 retry:0 /arpa/wen-king/cguide 1 neptune udp:11 retry:0 /arpa/wen-king/cguide 2 mercury udp: 7 retry:0 /arpa/wen-king/cguide ## Our ghost cube 3 pluto udp: 8 retry:0 /arpa/wen-king/cguide ## is made up of 4 pallas udp: 7 retry:0 /arpa/wen-king/cguide ## theses sun 5 astraea udp: 7 retry:0 /arpa/wen-king/cguide ## work-stations 6 uranus udp: 7 retry:0 /arpa/wen-king/cguide 7 vesta udp: 5 retry:0 /arpa/wen-king/cguide $ spawn hello -1 7,0: Hello World!! 6,0: Hello World!! 1,0: Hello World!! 2,0: Hello World!! 4,0: Hello World!! 3,0: Hello World!! 5,0: Hello World!! 0,0: Hello World!! hello spawned on all nodes with pid 0 $ freecube Cube space deallocated $ cccos -o hello hello.c -lcube ## Compile it for cosmic cube hello.c ==> o10271o2.c Code size: 1897 Data size: 60 Stack size: 4096 $ getcube 3 cosmic 3D sub-cube allocated $ spawn hello -1 0,0: Hello World!! 1,0: Hello World!! 2,0: Hello World!! 3,0: Hello World!! 4,0: Hello World!! 5,0: Hello World!! 6,0: Hello World!! 7,0: Hello World!! hello spawned in all nodes, pid 0 $ peek CUBE DAEMON version 7.2, up 6 days 23 hours on host sol { } 7d ipsc cube , b:0000 [ mars :iPSC d7] 1.0h { } 3d ghost cube , b:0000 [ saturn :mimic ] 2.1h {group wen-king} 3d cosmic cube, b:0000 [neptune fly trap] 16.0s { } 16n s2010 , b:0010 [ metis :ginzu ] 27.4m { } 4d ipsc2 cube , b:0000 [triton iPSC2 ] 8.4h GROUP {group wen-king} TYPE reactive IDLE 2.0s ( -1 -1) SERVER 8s 8r 0q [neptune 5367] 14.0s ( -1 -2) FILE MGR 0s 0r 0q [neptune 5366] 14.0s (--- ---) CUBEIFC 10s 90r 0q [ venus 637 ] 15.0s $ freecube Cube space deallocated $ ls hello.c hello.cos hello.gh hello.ipsc