wen-king%cit-vlsi.Caltech.Edu@ames.arc.nasa.gov (Wen-King Su) (01/27/88)
For those of you who missed a brief introduction at HCCA3, the Cosmic
Environment (CE) is a generic message-passing concurrent computer
control environment consisting of a set of daemon processes and user
utilities. The goal of CE is to provide a simple and uniform interface
to concurrent machines 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.
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 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) Ametek 2010
3) The Cosmic Cube
4) 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".
We will support CE on any new iPSC as well as any other concurrent
machines we have access to.
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 fully 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.
4) It polished by 4 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
$ 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
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
$ 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
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
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
/*------------------------------------------------------------------------*\
| Wen-King Su wen-king@vlsi.caltech.edu Caltech Corp of Cosmic Engineers |
\*------------------------------------------------------------------------*/