This release of ScientificPython contains support for parallelization
via the Bulk Synchronous Parallel library (BSPlib). If you want to
write parallelized programs in Python using the BSP module in
Scientific Python, you need either the BSPlib interface or the MPI
interface (see README.MPI for that one). If you don't want to write
parallel code, or don't know what that is, don't read the following,
and go on with installation. In the following I will assume that you
know what BSPlib is, and that you have it installed on your system

BSPlib support in ScientificPython is limited to the message passing
functionality, direct remote memory access is not implemented. The
Python data types that are supported are strings and Numerical Python
arrays. The BSPlib module exists mainly as a low-level support for the
module Scientific.BSP, which offers a more convenient high-level
interface and allows the transmission of almost arbitrart Python
objects. The BSPlib module also provides a C API for use by other
extension modules.

Here is what you have to do to get BSPlib support in Scientific Python:

1) Build and install Scientific Python as usual (i.e.
   "python setup.py install" in most cases).

2) Go to the directory Src/BSPlib.

3) Type "python compile.py".

4) Move the resulting executable "bsppython" to a directory on your
   shell's execution path.

This recipe should work on any system with a working installation
of BSPlib. It has been tested with version 1.4 under Linux.

To execute a BSP program, use bsppython instead of the normal Python
interpreter. Programs that use only the high-level module
Scientific.BSP will also work with a standard Python interpreter, but
only use one processor. Scientific.BSP can also use MPI for low-level
communication, if you prefer that option, install MPI support (see
README.MPI for details) and run the programs with the mpipython
executable.

There is also an interactive parallel console, which is highly
recommended for program development. It is used much like the standard
Python interpreter, and is in fact sufficiently similar that it can be
used instead of standard Python with the Emacs mode for Python. That
combination is at the moment the best development environment for
parallel Python code. The interactive parallel console is a small
executable script called "ibsppython", to be found in the Src/BSPlib
directory. Copy it anywhere to any directory on the search path of
your Unix system.

Special thanks to Joe VanAndel for the new compile.py script that
works with Python 2.2 as well!



In case you wonder why a special Python executable is required, here is
some background information:

First of all, the BSPlib interface does not work with a standard
Python interpreter. The reason is that the BSPlib interface requires
that the call to bsp_begin() be the first executed statement in the
Python interpreter. Moreover, a modified interpreter is the only way
to guarantee that bsp_end() is always called at the end, even if the
Python program crashes. The file Src/BSPlib/bsppython.c takes care of
these two calls; it is in fact nothing but a slightly modified version
of the python interpreter program, python.c. (In case you wonder why
it's so small: all the real work is done in the Python library
functions that are called.)

The second problem is dynamic library support. Depending on your
operating system, it might be impossible to use the BSPlib interface
module as a dynamic library, because the interpreter and the module
might use different copies of the BSPlib code. The safest bet is to
link the interface module, Scientific_bsplib, together with the
bsppython executable. Other C extension modules can then call BSPlib
functions via Python's CObject indirection method.


Konrad Hinsen
Centre de Biophysique Moleculaire (CNRS)
Rue Charles Sadron
45071 Orleans Cedex 2
France

E-Mail: hinsen@cnrs-orleans.fr
