History of changes put into version 2 and 3 of PVM
-
PVM 2.0 (Feb. 1991)
+ Complete rewrite of inhouse experimental PVM software (v1.0)
-
PVM 2.1 (Mar. 1991)
+ XDR based user messages - totally non 2.0 compatible
+ initsend() now has no arg
+ vestigial command mode on master pvmd
-
PVM 2.2 (April 1991)
+ XDR based pvmd-pvmd messages - totally non 2.1 compatible
+ get*(), put*() --> getn*(), putn*()
+ bcast() --> deprecated
+ initiate*() --> initiate()
-
PVM 2.3.2 (June 1991)
Improvements
+ password-less startup via rsh/rcmd
+ per-host options in hostfile to
ask for password
specify alternate loginname
specify alternate pvmd executable path
+ daemon-daemon version control to prevent mixed versions running
+ added f{get,put}n{short,long}() to f2c library
+ 'reset' pvmd command to reset the vm.
+ can specify "." as host to initiateM() to create on localhost
Fixes
. fixed f{get,put}bytes()
. added status arg to frcv()
. added nulfix for mc in finitiate()
. closed many many fds that got left open before
. fixed incomplete lprocs caused by late messages
. now works with new (sun_family is a bit field
so can't use sizeof)
. fixed frag-out-of-order problem in ulib
-
PVM 2.3.3 (July 1991)
Improvements
+ 'barr' command to check barrier/ready status
+ pstatus() user call to return size of virtual machine
Fixes
. fixed fortran problem with closed stdin
. fixed malloc bug on process enroll
-
PVM 2.3.4 (Oct. 1991)
Improvements
+ Silicon Graphics IRIS port
+ pvmds negotiate maximum udp message length at startup.
Fixes
. fixed f2c f{get,put}n{short,long}() function names.
. removed static limitation on number of hosts (used to be 40).
-
PVM 2.4.0 (Feb. 1992)
Improvements
+ added '-o' flag to pvmd ps command.
+ user lib now prints error messages by default, turned off by pvm_aerr
+ can now specify 'ep=path:path...' for each host in hostfile.
+ hostnames (for initiateM, etc) now match the first part
in addition to the fully-qualified name, 'ps' shows short names.
+ version checking between pvmd and user lib to prevent running
incompatible code
+ direct-connect tcp message mech. available through vsnd()
and vrcv().
+ user lib returns error codes that can be compared to symbols
in "pvmuser.h".
+ pvm_perror() function available to print error message.
+ 'ps' command now queries remote pvmds to get more information.
+ switched to defines for malloc, etc to allow instrumenting heap.
+ better hostfile checking: multiple occ of a host, no master host,
master host not first, host '*' to set defaults
+ Convex, HP Snake ports
Fixes
. user lib returns error code instead of exiting in case of
fatal error.
. whoami returns PvmNoComp instead of Syserr if process
not enrolled.
. implemented probemulti().
. made rsh path absolute (/usr/ucb).
. improved signal handling, added arg to reap() and catch().
. slave pvmd startup talks on stdout now and ignores stderr.
. added lread() function to read complete lines at slave startup.
. added u->u msg seq nos. to allow reassembly when >1 msg
from same process
-
PVM 2.4.1 (June 1992)
Improvements
+ added DGAV arch class.
+ I386 port.
+ 'aimk' sets variable PVMLFLAGS to correct loader flags for ARCH.
Fixes
. pvmd doesn't catch already ignored signals (useful with bourne shell).
. cleaned up src for better linting.
. lots of man pages.
. added to host.c.
-
PVM 2.4.2 (Dec. 1992)
Improvements
+ KSR1 port.
+ TITN port, untested and scary.
+ CM5 port.
+ pvmuser.h has extern "C" declaration for C++.
+ can use pvm_mstat() to find host names, types, and status.
+ can use pvm_inithow() to specify raw (non-XDR) message packing,
rcv() can return BadMsg if rx a raw msg from other host data class.
Fixes
. divided CM2 into CM2 and VCM2.
. pvmuser.h has check for multiple include.
. ep= default in host file now works correctly.
. unknown arch types now handled, i.e. pvm can still be homogeneous.
-
PVM 3.0 (Feb. 1993)
+ first release of version 3
-
Several new features are available in PVM 3.0 including:
designed to be scalable and use MPP,
allows dynamic reconfiguration of the virtual machine,
includes dynamic process groups,
incorporates improved fault tolerance
allows multiple message buffers,
includes process signaling, and
user definable receive contexts.
separate PVM console
________________________________________________________________________
-
PVM 3.1 (April 1993)
Improvements
+ task-task direct routing via TCP
+ added pvm_probe() and pvmfprobe()
Fixes
. aimk chooses between HPPA and HP300 correctly
. host delete is now synchronous
. tids don't include unix pid in localpart
. fixed bug which might cause nrecv() to hang
. fixed task startup bug which caused messages to be scrambled
. fixed bugs in pvmd which caused it to busy-wait and eat cpu
. PVMDFILE now handled correctly in lpvm.c
. implemented hostfile defaults (*)
. fixed CNVX.m4 file in libfpvm
. fixed src/SGI/Makefile
. master pvmd doesn't say "dm_addhostack() from t80040000 wid 0 not foun
d"
-
PVM 3.1.1 (May 1993) Five bug fix patches released for PVM 3.1
PVM 3.1.2 (May 1993)
PVM 3.1.3 (June 1993)
PVM 3.1.4 (July 1993)
PVM 3.1.5 (Aug. 1993)
---------------------------------------------------------------------------
-
PVM 3.2 (Aug. 1993)
Improvements
* MPP source merged with Unix src, ports include:
* I860 Intel i860 hypercube
* PGON Intel Paragon
* CM5 Thinking Machines CM-5
* xxx/ARCH/Makefile convention has been replaced with conf/ARCH.def files.
lib/aimk builds makefiles as needed.
* Pvmd
* Pvmd adds new slave hosts in parallel.
* Stdout and stderr from tasks can be redirected to a task/console.
* Pvmd tries harder to notify peers if killed or segfaults.
* Can #define OVERLOADHOST so pvmd won't bail if one already running
on host. This allows VMs to overlap. [Spawned] tasks get sockaddr from
PVMSOCK envar.
* Libpvm
* pvm_advise(), pvm_setdebug() and pvm_serror() replaced by pvm_setopt(),
old calls will be supported for one version.
* New function pvm_getopt().
* pvm_start_pvmd() now has third arg - flag to make it block until
all pvmds have started.
* pvm_notify(PvmHostAdd) now works.
* New printf-like pack and unpack routines pvm_packf() and pvm_unpackf().
* Pack, unpack routines for unsigned integers.
* Spawn R-R scheduler starts at host local + 1 instead of 0
* Environment variables are passed through spawn().
* Environment variable PVM_EXPORT determines which are passed.
* Can "setenv PVM_EXPORT DISPLAY" in $HOME/.pvmrc, get debugger windows.
* PVM console:
* Script (pvm3/lib/pvm) picks the right console executable.
* Command aliases.
* Command arg quoting.
* Reads $HOME/.pvmrc file.
* Passes its command-line args to the pvmd.
This makes startup with a hostfile easier.
* Task stdout gathering (type "help spawn").
* Setenv command.
* Pvmd and libpvm use PVM_ROOT and PVM_ARCH variables when starting
new pvmds.
-
PVM 3.2.1 (Sept. 1993) Six bug fix patches released for PVM 3.2
PVM 3.2.2 (Sept. 1993)
PVM 3.2.3 (Oct. 1993)
PVM 3.2.4 (Nov. 1993)
PVM 3.2.5 (Dec. 1993)
PVM 3.2.6 (Jan. 1994)
-
PVM 3.3.0 (June 1994)
Improvements
-
Shared-memory source merged with Unix src, ports include:
* SPARC multiprocessor running Solaris
* SGI multiprocessors
-
New function pvm_trecv() blocks until a message is received or a
specified timeout (in seconds and usec).
-
Inplace packing is partially implemented. It only works with dense
(stride = 1) data right now. Also, it doesn't refragment huge arrays,
which may lead to odd performance.
-
New functions pvm_psend() and pvm_precv() send and receive raw
data buffers, enabling more efficient implementation on machines
such as multiprocessors.
-
The task and host schedulers are replaceable by writing a "scheduler
task" and registering it with pvm_reg_sched(). Messages from calls
such as pvm_spawn() and pvm_addhosts() are then intercepted by the
scheduler.
-
A task can register as a "tasker", to be used by the pvmd to start
other tasks (instead of the usual fork() and exec()). The pvmd sends a
SM_STTASK message to the tasker. The tasker notifies the pvmd on task
exit with message SM_TASKX. There is an example tasker in
pvm3/tasker.
-
A task can register with the master pvmd as a "hoster", meaning it
starts new slave pvmds for the master. The master sends a SM_STHOST
message to the hoster and waits for a reply (SM_STHOSTACK). There is
an example hoster in pvm3/hoster.
-
Libpvm and the group library have parameter/result tracing.
Trace data is collected in a manner similar to stdout output.
Tasks inherit a trace data destination and event mask which
separately enables each libpvm call. The console spawn command
has new flag "-@" to enable tracing and new command "trace" to set
the trace mask.
-
XPVM developed to automatically exploit this feature for the user.
-
Group library now includes global reduce functions and scatter/gather.
-
Function pvm_catchout() automatically collects output of spawned tasks
using control messages and output redirection. Output can be appended
to any FILE* (e.g. stdout).
-
New hostfile option "wd=XXX" sets the working dir of the pvmd on a
machine. The default is nothing, which leaves the pvmd in $HOME.
-
$envariables are expanded when setting epath (ep= in the hostfile),
and when setting bpath (bp=).
-
The default epath is now
"pvm3/bin/$PVM_ARCH:$PVM_ROOT/bin/$PVM_ARCH"
This allows sharable binaries (e.g. the group server task) to be
installed in a public place, while the user has a private bin
directory.
-
New function pvm_archcode() maps architecture string to PVM data
format code. Can be used to decide when machines have equivalent
data representations.
-
Bug Fixes:
-
Messages no longer lost when a task sends message over Direct route,
then quickly exits.
-
The console can now alias a command to itself (like csh).
-
pvm_spawn() can take an absolute pathname.
-
Group server is notified when tasks die and removes them from groups
automatically.
-
Lots of random manual pages.
-
Task-Pvmd protocol message tages moved out of user tag space, so
small integer tags used with notify() no longer break libpvm.
-
-
The PVM_ROOT envar now _must_ be set.
-
There were a few globals in libpvm whose names conflicted with other
things so have been changed.
-
struct taskinfo is renamed pvmtaskinfo and has new field ti_pid,
returning native process id of task.
This is useful for writing debugger server tasks that can attach
to running tasks.
-
struct hostinfo is renamed pvmhostinfo.
-
The hostfile options "pw" and "ms" have changed to "so=pw" and
"so=ms". This is necessary to allow them to be passed to the hoster
in an extensible way.
-
The SGI architecture has split into SGI and SGI5 to deal with varying
OS releases.
-
Console "ps" command displays:
HOST TID FLAG COMMAND
unless -l flag is given, then:
HOST TID PTID PID FLAG COMMAND
-
Defunctions:
pvm_serror(), pvm_advise(), pvm_setdebug()
are replaced with pvm_setopt().
-
PVM 3.3.1 (June 1994) bug fix patches for PVM 3.3
PVM 3.3.2 (July 1994)
PVM 3.3.3 (Sept 1994)
-
PVM 3.3.4
Patch #4 contains the following enhancements and bug fixes:
-
Can now reset read pointer in pvmfconfig(), pvmftasks().
-
Added UXPM (Fujitsu M780, UXP/M) architecture - not fully debugged.
-
RS6K, POWER4 fortran libraries built with and without trailing '_'
on function names so that -qextname works.
-
Fixed HP300 def - to match HPPA.
-
Fixed several broken example programs (missing includes).
-
Debugger script now uses "csd" debugger on CNVX machines.
-
pvmd script blocks SIGINT on SGI, so fortran applications don't
kill the pvmd.
-
pvmgetarch script finds uname in /bin or /usr/bin.
-
Increased filename-length limit in pvmfspawn() to 256 characters.
-
pvm_setopt(PvmSelfTraceTid, ) no longer coredumps if task isn't connected.
-
Fixed typos in multiprocessor version of pvm_psend().
-
Fixed 87th host bug in pvmd; should now be able to start larger virtual
machines.
-
Fixed ALPHAMP port pvmshmem.h.
PVM 3.3.5
Patch #5 contains the following enhancements and bug fixes:
-
New mkmanlinks script to make links for Fortran and C functions that
share man pages.
-
New examples for pvm_reduce().
-
New architectures
-
SGI64, SGIMP64 (IRIX 6.0, 64-bit)
-
SX3 (NEC SX-3)
-
SCO (SCO Unix)
-
Many fixes to bugs in shared-memory transport code (SUNMP, SGIMP, ...)
that caused memory and resource leaks, hangs.
-
Many fixes to multiprocessor versions.
-
Improved man pages for
-
pvm_reduce
-
pvm_psend, precv - they can't be mixed with regular send on certain machines
(multiprocessors).
-
pvm_send - reminder to call pvm_exit() so that no messages are lost.
-
pvm_pack - declares that packing %s as NULL is not allowed.
-
pvm_config - made it more clear.
-
pvm_unpack - corrected syntax in fortran example.
-
-
Fixed bug - pvmd wasn't removing deleted hosts from new host table,
so they reappeared.
-
pvm_trecv() no longer hangs, ignoring timeout, after a signal is received.
-
pvmclaimo() no longer coredumps if a task gets a TC_OUPUT message that
it didn't expect.
-
pvm_spawn() now checks count for system error code in return message.
-
pvm_pkstr(), pvm_packf() return error instead of trying to pack string
with DataInPlace encoding (can't be done right now).
-
Group library disables output collection and tracing while spawning
group server (pvmgs), so it isn't traced as part of the application.
-
Console checkmsgs() no longer compares add host notify message source
to 0x80000000. This failed if a resource manager was installed.
-
Console "ps" flags disply now takes up less space.
-
Added TF_FORKD flag, letting pvmd wait for exit of children to get status.
Trace endtask message can now give exit status and code.
-
Removed -DNOSOCKOPT from LINUX.def.
-
Removed CC=gcc from SUNMP makefiles.
-
Fixed examples
-
Tasker example needed fds=rfds; before select().
-
Fixed a few bugs in examples/hitc_slave.f.
-
Call pvm_freebuf in examples/timing_slave.c - unfreed buffer causes
shared-memory transport to hang when slave is killed.
-
xep paints processor id bars darker on b&w display.
-
Miscellaneous fixes:
-
Fixed Readme.mp - used old architecture names.
-
UXPM architecture has rsh path set to /usr/bin/rsh.
-
pvmgetarch script runs mpstat with full path /bin/mpstat.
-
TM_, DM_, etc message tags are cast so compiler doesn't complain.
-
iflist() uses PVM_FREE instead of free in iflist().
-
TEV_BCAST1 message now includes a list of tids.
-
Cleaned up pvmd beprime().
PVM 3.3.6
Patch #6 contains the following enhancements and bug fixes:
-
New pvm_setopt() option, PvmShowTids, determines whether pvm_catchout()
prints task ids along with output. The default setting is true. In
the next release, the default may be changed to false.
-
Added xx586 (Pentium) cpu type to pvmgetarch script.
-
New man page for pvm_getfds().
-
Fixed non-blocking socket code on RS6K - caused pvmd to hang.
-
CM5 mpp_load() unsets TF_FORKD.
-
ALPHAMP.def now sets HASSTDLIB flag - caused pvmd to coredump.
-
Message "EOF on pvmd sock" no longer printed on halt.
-
Fixed typo in pvm_joingroup.3 man page.
-
Include in various examples.
PVM 3.3.7
Patch #7 contains the following bug fixes:
-
pvmd-pvmd' protocol is reset after adding hosts - caused pvm_addhosts()
to return PvmDSysErr on Solaris machines.
-
pvmd-pvmd UDP mtu is set correctly on shared-memory machines -
caused complaints about bogus packets.
-
better cleanup of message buffers in shared-memory pvmendtask.
caused some applications to hang.
-
shared-memory port now responds to control messages, denies direct TCP
routes - caused mixed-architecture applications to hang.
-
shared-memory ports now pass environment variables to tasks through spawn.
-
call task_cleanup and task_free in CM5 mpp_free -
tasks weren't getting marked dead.
-
some machines with wait3() don't have struct rusage. added
ifdef RUSAGE_SELF around declaration. this isn't quite right,
but it's more conservative.
-
connect() calls in libpvm protected against EINTR.
-
range is checked in pvm_pklong() if XDR fails. PvmOverflow is returned
instead of PvmNoMem.
-
pvm_hostsync() frees its message buffers - was a small memory leak.
-
cleaned up loop in dm_execack() - tids of spawned tasks were returned
in reverse order.
-
aimk has quotes around "$@" so multiple parameters can be passed to
make without being interpreted by aimk.
-
aimk -here forces compilation in . even if Makefile.aimk exists.
-
added CSPP to pvmgetarch and lib/debugger2.
-
new reduce man page.
-
console help text updated - ps fields were wrong.
PVM 3.3.8
Patch #8 contains significant improvements to shmem and MPP ports
If you're using version 3.3.anything, you probably want this instead.
-
added port to IBM SP-2, using MPI.
-
added (shared memory) support for Convex Exemplar architecture, CSPP.
-
group server and library reimplemented to remove static limits,
improve performance.
-
added new libpvm call pvm_freezegroup (pvmffreezegroup) to make a
dynamic group static and cache tid list, improving communication
performance.
-
added build option CLUMP_ALLOC to reduce data structure fragmentation.
-
new envar PVMDLOGMAX sets limit on pvmd logfile length (/tmp/pvml.uid).
-
new envars PVMDDEBUG and PVMTASKDEBUG set system pvmd, task debug masks.
-
new build option MCHECKSUM computes 32-bit crc on each message.
-
added FREEBSD architecture, NETBSD* architectures.
Note: BSD386 catch-all name has split into these new names.
-
added Amdahl UTS2 architecture.
-
fixed bug (uninitialized variable) causing coredump on TC_CONREQ message.
-
fixed multiprocessor node multicast bug (PGON).
-
PGON (with pexec) can now be added as slave host.
-
collective operations on Paragon use native-mode communication for
greater speed.
-
lots of fixes from SGI, Convex and DEC for shared memory ports...
-
improved shared memory key generation. reduces bottleneck at pvmd and
conflicts between different pvm users.
-
shared memory communication detects some more common deadlock conditions,
prints warning message. see also console ps command.
-
new pvm_setopt options PvmPollType and PvmPollTime allow tunable busy-
wait instead of blocking on semaphore, can improve performance.
-
pvm_start_pvmd has better startup synchronization, doesn't need to
sleep waiting for pvmd, is faster. also allows overlapping master
pvmds when using OVERLOADHOST host build option.
-
pvm_start_pvmd ignores signals INT, QUIT and TSTP so pvmd started by
console isn't killed by them when typed.
-
fixed bug in mxfer that caused core dump when a direct route was
closed while a message was being sent over it.
-
pvm_recvf() now returns pointer to default match function instead of 0.
(default match can still be set by calling with null pointer).
-
added build option FDSETISINT.
-
cleaned up after miscellaneous warnings in source and makefiles.
-
deleted POWER4 architecture.
PVM 3.3.9
Patch #9 contains a bug fix to the SP2MPI port
and fixes to several minor things listed below.
-
WT_DELHOST waits are flushed on task exit, so they don't accumulate.
-
miscellaneous patches for SP2MPI port so it builds.
-
fixed test in enc_xdr_long() (pvm_pklong, Default) that sometimes
incorrectly flagged positive longs as overflows.
-
fixed bug in enc_xdr_init() that sometimes caused segfault in
pvm_setsbuf(), referencing a bad pointer.
-
aimk saves the current directory before chdiring to the ARCH dir, uses
full path instead of ".." (may be incorrect if ARCH dir is symlink).
-
lib/pvm script now attempts to guess PVM_ROOT if unset, defaulting
to $HOME/pvm3 if it can't.
-
lib/pvmgetarch detects BSDI (ARCH=BSD386).
-
change to busy-wait code in shared memory libpvm, giving better
performance on overloaded machines.
-
experimental change to pvm_psend in shared memory verion for better
performance (delayed free of send buffer).
-
typo in pvm_intro man page.
-
pvmgs/Makefile.mimd uses $(AR_FRONT) instead of ar.
-
examples/Makefile.aimk shouldn't have defined CC.
-
fortran and c examples now use different executable names.
-
fixed spelling in console help text.
-
pvm_psend,precv return PvmNotImpl instead of PvmBadParam for PVM_STR.
-
added SHELL=/bin/sh to several makefiles.
PVM 3.3.10
Patch #10 contains a bug fix to the shmem message refragmentation code.
All enhancements and fixes are listed below.
-
new contributed NCR AT&T 3/486 port, arch name ATT.
-
new contributed port to 803/486 running Solaris 2 (X86SOL2).
-
new script $PVM_ROOT/lib/ipcfree to clean up shared memory segments.
-
new misc/ directory to hold random examples, utilities and patches.
-
new define NEEDFFS compiles in retrofit ffs().
-
new pvmd -t flag for to test slave startup.
-
RSHCOMMAND set for several arch's (RS6K RS6KMP SUN4SOL2 SUNMP)
-
miscellaneous fixes for pure solaris machines (uname, rsh path, ...).
-
small fixes to FREEBSD port (declarations and xdr_float, double routines).
-
miscellaneous typos fixed in group server.
-
PGON fix - spawned tasks now inherit environment correctly
(that of pvmd combined with parent task).
-
fix to shared-memory pvmd - stale pages (from dead tasks) are skipped,
instead of hanging the input loop.
-
fix to shared-memory libpvm - EINTR from semop() is ignored.
-
fix to RS6KMP detection (now correctly checks number of processors).
-
fix to message refragmentation code, bug caused messages from shared
memory task to task on another architecture to be corrupted.
-
replies to task control messages are freed (small memory leak)
PVM 3.3.11
Patch #11 contains fixes directly from IBM for the SP-2 port.
All enhancements and fixes are listed below.
-
added APOLLO (HP 300, Domain/OS) port.
-
added M88K (M88100, Real/IX) port.
-
if $HOME/.pvmprofile exists, it is sourced in lib/pvm and lib/pvmd
scripts before starting the console or pvmd.
-
created libpvm functions pvm_export(char *name) and pvm_export(name)
to make it easier to edit PVM_EXPORT environment variable.
also, new console commands export and unexport.
-
several fixes from IBM for the SP2MPI port.
-
fixed RouteDirect bug - simultaneous connect from both sides
with Unix-domain sockets fails.
-
fixed bug in replacement encode/decode XDR short int routines for I860.
they now pack/unpack 4 bytes instead of 2.
-
pvmd can now tolerate network going down for a short time
(ignores ENETDOWN). this is useful when rebooting switch hardware
on multiprocessors.
-
made pvmd hoster (and xhoster) more robust,
now ignores garbage in .cshrc and looks for "ddpro" token.
split code into separate file, hoster.c.
-
pvmd host file now works with RS6K, RS6KMP and AIX 4.x.
(needed to define SOCKADHASLEN)
-
fixed typo in pvmgs_func.c`gs_newstaticcache().
-
added switch in lib/pvmgetarch to detect HPPAMP architecture on HPPA.
-
fixed race between pvmd forking a task to spawn and catching a signal
and thinking it was still a pvmd, doing cleanup etc.
-
libpvm now processes control messages arriving over direct routes.
-
added some parens to the listmac macros, to keep old compilers happy.
-
added some tests so shared memory pvmd and libpvm don't segfault
if they fail to allocate resources.
-
changed RSHCOMMAND for SCO arch to /usr/bin/rcmd.
PVM 3.4.0
Besides bug fixes to 3.3, there are many new features in Version 3.4
including a port to WIN95, NT 3.51, and NT 4.0. New feature areas include:
-------- Message Context --------
* To allow more flexibility in organizing message tags sets, and
to provide support for "safe" libraries that will not inadvertently
intercept user messages, the concept of "message context" in PVM
has been introduced. The context is an additional system-defined
message tag that each message carries, such that each given message
can only be sent or received within a single unique context. For
example, all internal system messages in PVM now utilize a different
context than the base user application context, so that system
messages cannot be incorrectly received by the application. The
user can determine the current context, create a new context,
set the current context and free message contexts using the new
routines pvm_getcontext(), pvm_newcontext(), pvm_setcontext() and
pvm_freecontext(), respectively (see man pages for details). The
context itself is an integer value which can be packed into messages
and sent to cooperating tasks, or placed in a message mailbox (see
below) for client-service lookup. By default, all tasks are spawned
in the same base context.
-------- Message Handlers --------
* In the spirit of Active Messages, PVM now supports "message handlers"
for automatic processing of incoming messages. The user can define
any number of message handler functions, each with a corresponding
(source, tag, context) tuple. Then when a message matching a
particular tuple arrives at the local task, the user-specified
handler routine is automatically invoked to process the message.
Within a message handler, the message can be unpacked and a simple
response message can be packed and sent (using pvm_send() only).
The new PVM routines for creating and deleting message handlers are
pvm_addmhf() and pvm_delmhf(), respectively (see man pages for
details). Note that message handlers are only invoked when the
application is already executing a PVM messaging routine - handlers
cannot interrupt normal program execution. Typically, message
handlers will trigger transparently during other communication,
but the user can specifically invoke them by calling pvm_probe()
or an equivalent function in a loop.
-------- Message Mailboxes --------
* To provide a new means for name service that does not require the
PVM dynamic group server ("pvmgs"), a "message mailbox" mechanism
has been added to PVM 3.4. Using this feature a user application
can post a message to a public mailbox which can subsequently be
"looked up" and retrieved by other independently spawned tasks in
the virtual machine. Each mailbox is created using a specific
"class name" and can consist of either exactly one or many entries
for that given name. When a task "looks up" a mailbox entry, it
receives back the message contained in it, to be unpacked and
processed as desired. Mailboxes can be mutually exclusive, to
act as a locking mechanism for resources, and can be created as
"persistent" so that they will continue to exist after the owner
(or creator) task exits. The new routines in PVM for creating,
retrieving and freeing message mailboxes are pvm_putinfo(),
pvm_recvinfo() and pvm_delinfo(), respectively, plus an additional
routine, pvm_getmboxinfo(), for obtaining a list of the currently-
defined class names (see man pages for details).
-------- Spawn Siblings --------
* Often when designing SPMD programs, it is useful to know which tasks
were spawned together as a group. This information can be used to
form static groups for efficient group communication, or simply for
referencing other members of your own "spawn siblings". The new
PVM call pvm_siblings() (see man page for details) returns a list
of integer task ids that corresponds to all the tasks that were
spawned together from a single pvm_spawn() call (or from the "pvm"
console).
-------- Tracing --------
* Routines in libpvm and the group library have included built-in
tracing of calling parameter/results since PVM 3.3. In PVM 3.4,
the tracing facility has been completely rewritten to be more
general, flexible and maintainable. As a result, the tracing
capabilities of PVM 3.4 have been expanded to support trace
buffering, several levels of tracing, and user-defined trace
events. The graphical PVM interface, XPVM 1.2, has been rewritten
to use a new PVM library, libpvmtrc, and a new text-based trace
collection tool ("tracer") has been added to the standard PVM
distribution to allow easy trace file collection on systems where
X11 compilation is either difficult or impossible. In addition,
the new tracing facility now supports "automatic" attachment to
trace collection programs, so that when tasks are independently
spawned, e.g. from the shell, their trace events will still
propagate to the proper trace tool (without any manual "attachment"
procedure). Other various improvements have been applied to
specific trace events, e.g. pvm_send() events now carry the message
size information, allowing proper driving of XPVM's Message
Queue View (you will notice the difference in the message coloring
to indicate this added capability). Upon re-compiling XPVM with
the new PVM 3.4 libraries (by clearing the defines for PVMVERSION
and PVMGLIB, and modifying TRCDIR to point to pvm3/tracer in the
file "xpvm/src/Makefile.aimk"), you will find additional options
on the "Tasks.../SPAWN" dialog to control the new tracing features.
The new "pvm" console also supports new options to the "trace"
commands (type "help trace" in the console for a description).
For additional information regarding use of the more advanced
tracing features, send email to "kohl@msr.epm.ornl.gov".
* Added new "trcsort" program (in pvm3/tracer subdirectory) for
sorting trace files by timestamp. Takes into account approximate
clock skew among hosts (still no guarantees about "tachyons" though).
-------- Misc --------
* Most of the MIMD and SHMEM code has been completely rewritten
(as of this beta release, the SHMEM ports are still work in progress)
to eliminate many bugs and improve maintainability and robustness.
On architectures that support shared memory operations, the
default PVM architecture selection is now non-shmem, and to turn
on selection of the appropriate *MP architecture the user must
set the environment variable "PVM_SHMEM" to "ON", as in
"setenv PVM_SHMEM ON" (see "Potential Incompatibilities" below).
The style of compiling PVM applications for MPP systems has
also changed slightly - please refer to the pvm3/examples directory
for the proper Makefile.aimk targets.
* The Makefiles for PVM 3.4 have been completely overhauled to
(theoretically) allow easier setting of desired compile options
from the new top level Makefile.aimk. The new defines "CFLOPTS" and
"FFLOPTS" are passed down into the various subdirectories and then
prepended to the definitions for CFLAGS and FFLAGS, respectively.
Likewise, setting CC or F77 at the top level will force that setting
throughout the source tree when making at the top level.
* Extensive work has been done on the PVM port to Windows systems,
the "WIN32" architecture. The stuff really works! :-)
* Added new "srm" simple resource manager example, in pvm3/rm.
* Added new pvm_setopt() option "PvmNoReset" for system tasks, to
prevent tasks from being killed during a system reset.
* Added new pvm_setopt() option "PvmNoSpawnParent" so that tasks can
now use pvm_parent() to determine if they are the "master" in
master-slave applications, even if tasks are spawned from the
"pvm" console or XPVM.
------------------------------------------------------------------------
Bug Fixes:
* Remote task output collection and tracing is now correctly working
on MPP systems such as PGON and SHMEM architectures.
* It is now possible to fully interoperate pvm_send(), pvm_recv(),
pvm_nrecv() and pvm_trecv() with pvm_psend() and pvm_precv()
(assuming that the appropriate PvmDataRaw data encoding is used!).
MPPs can use pvm_psend() and pvm_precv() off-machine with tasks
that are using the traditional send and receive routines.
* Modified pvm_freebuf() so that freeing a NULL buffer no longer
generates an error. Many 3.3 codes exhibited this error through
the use of pvm_freebuf( pvm_setsbuf(x) ) where there was no old
send buffer.
* A static character variable has been utilized inside pvm_version()
to prevent stack problems on certain architectures.
* Removed ancient "-lmutex" from SGI architectures ARCHDLIB defines!
* Lots of random manual pages (more to come...).
------------------------------------------------------------------------
Changes - Potential Incompatibilities:
* The old "$SGIMP" environment variable has been subsumed with the
new "$PVM_SHMEM" environment variable.
* Due to incompatibilities between AIX 4.1 and 4.2, the previous RS6K
architecture has been split to add several new architectures for
different OS / SHMEM combinations: AIX46K, AIX4MP, AIX4SP2.
* All of the various daemon-to-task and task-to-task protocols have
been moved to a new public header file, "pvm3/include/pvmproto.h".
The constants for utilizing the protocols for task control messages
and other system support programs are all included in this new header
file.
* Tracing facility has been completely rewritten, new trace messages
are incompatible with PVM 3.3 tracing tools (except XPVM 1.2, see
above).
* Defunct functs - the following functions are no longer supported
in PVM 3.4: pvm_insert(), pvm_delete(), pvm_lookup(). The name
service features that these routines provided are now handled
using the message mailbox system.
* Obsolete functions - the following functions will be eliminated
in a future release: pvm_getmwid(), pvm_setmwid(). Users should
switch to pvm_getminfo() and pvm_setminfo().