Norm Matloff's POSYBL Web Page

Norm Matloff's POSYBL Web Page

Contents:

What is POSYBL?

POSYBL is a nice implementation of the Linda parallel processing environment by G. Schoinas.

Installation:

If you wish to install POSYBL (with my modifications), first go to the src directory and copy my files NMsys_util.c and NMtmanager.c to sys_util.c and tmanager.c, respectively. Click here to get those two files.

Then from the src directory, type

make 
in the src/ directory.

Afterward, copy the executables (startup, system and tmanager) to ../bin and libposybl.a to ../lib.

The package compiles and runs on SunOS 4.1 and MIPS-based DEC Ultrix machines. It does not compile on newer Solaris systems. Though it compiles under HP-UX there seems to be a fundamental runtime problem, at least on our CSIF machines. On our SGIs, the system will compile if one comments out "signal ( SIGQUIT, exit )" and changes calls to vfork() to fork(), but again there is a fundamental runtime problem.

Environment and path:

Use setenv to set the variable POSYBLDIR to the directory containing the bin and lib (and originally, src) subdirectories. Make sure the bin directory is in your search path.

Differences between POSYBL and standard Linda:

POSYBL is a fairly straightforward Linda implementation, except for the following two points:

Compiling my POSYBL front-end program:

To run your code, you will need a front-end program which calls eval() and your "worker" program which is invoked by eval(). I've written the front end for you, under the name POSYBLFrontEnd.c, available here. If it is not already in your $POSYBLDIR/bin directory, compile it, by typing

gcc -g -o POSYBLFrontEnd POSYBLFrontEnd.c $POSYBLDIR/lib/libposybl.a

and then make sure it is somewhere in your search path.

Compiling your POSYBL application program:

To compile your POSYBL application code, say worker.c, do:

gcc -g -o worker worker.c $POSYBLDIR/lib/libposybl.a

Running your POSYBL application program:

To run your POSYBL application code:

When you leave the ACS machines, make sure to remember to kill the tuple manager processes! (Insert a check for this in your .logout file.)

  • If you have not already done so, start up your own invocation of the tuple manager, with your own port number, at each machine on which you will be running your POSYBL application (use the same port number at each node):
    tmanager port_number &
    
    The port number must be between 1024 and 65535, inclusive. Before choosing a port number, try
    ps ax | grep tmanager
    
    to see if it is already in use. (You would get an error message if you tried a duplicate one anyway.) On some machines you may need to type "ps -e" or some other command instead of "ps ax" to get a list of all processes.

    This tuple manager invocation will serve all your POSYBL programs until you terminate it, so don't have more than one running at once and make sure your code cleans up all leftover tuples at the end of execution. In particular, IF YOU HAVE TO KILL YOUR POSYBL PROGRAM, ITS TUPLES WILL STILL BE THERE, SO YOU SHOULD TERMINATE AND RESTART THE TUPLE MANAGERS.

    Bugs in POSYBL:

    I have discovered that the group number argument in init() does not seem to work except for 0.

    Debugging your POSYBL application program:

    For information on how to debug, see my parallel debugging tutorial.

    Some Notes on Internals

    The tuple space is apparently distributed among the nodes. When one node wishes to query another about a tuple which is the subject of an in() or rd() call, it will send a "template" which lists the matching criteria for that tuple.

    Other software Web sites by Norm Matloff: