PVM_INTRO(1PVM)

πŸ“¦ version 3.4.6, in debian bookworm, ubuntu jammy

πŸ’– PVM_INTRO πŸ’– (1PVM) β€” PVM Version 3.4

okay bestie, sit down, hydrate, because we're about to get into the Parallel Virtual Machine and honestly? it's giving legendary. this is the intro page for PVM and pvm_intro, aka Parallel Virtual Machine System Version 3 🌈


✨ NAME ✨

PVM, pvm_intro β€” Parallel Virtual Machine System Version 3 πŸ¦‹


🌸 DESCRIPTION 🌸

so. PVM is a software system that lets a whole collection of heterogeneous computers get used as one coherent and flexible concurrent computational resource. no cap. it's a glow-up for your cluster πŸ’…

the individual computers can literally be anything:

  • shared-memory or local-memory multiprocessors
  • vector supercomputers
  • specialized graphics engines
  • scalar workstations

…and they might be interconnected by a variety of networks, like ethernet, FDDI. it's giving "everyone's invited to the party" πŸŽ€

user programs written in C, C++ or Fortran access PVM through library routines (libpvm3.a and libfpvm3.a). yes those are the exact names, write them down, they're important πŸ“

and the daemon programs (pvmd3) provide communication and process control between computers. they're the main characters holding the whole group chat together fr fr 🫢


πŸ‘‘ MACHINE ARCHITECTURE πŸ‘‘

in the PVM system, machines get assigned a short string to identify their architectures β€” and by architecture we mean operating system type as well as CPU type. slay, specificity πŸ’…

the types currently predefined in the distribution are:

  • AFX8 β€” Alliant FX/8
  • ALPHA β€” DEC Alpha/OSF-1
  • ALPHAMP β€” DEC Alpha/OSF-1 / using shared memory
  • AIX46K β€” IBM/RS6000 / AIX 4.x
  • AIX4MP β€” IBM SMP / shared memory transport / AIX 4.x
  • AIX4SP2 β€” IBM SP-2 / using MPI / AIX 4.x
  • APOLLO β€” HP 300 running Domain/OS
  • ATT β€” AT&T/NCR 3600 running SysVR4
  • BAL β€” Sequent Balance
  • BFLY β€” BBN Butterfly TC2000
  • BSD386 β€” 80[345]86 running BSDI or BSD386
  • CM2 β€” Thinking Machines CM-2 Sun front-end
  • CM5 β€” Thinking Machines CM-5
  • CNVX β€” Convex using IEEE floating-point
  • CNVXN β€” Convex using native f.p.
  • CRAY β€” Cray
  • CRAY2 β€” Cray-2
  • CRAYSMP β€” Cray S-MP
  • CSPP β€” Convex Exemplar
  • CYGWIN β€” POSIX emulation layer on top of Windows32
  • DGAV,DGIX β€” Data General Aviion
  • E88K β€” Encore 88000
  • FREEBSD β€” 80[345]86 running FreeBSD
  • HP300 β€” HP 9000 68000 cpu
  • HPPA β€” HP 9000 PA-Risc
  • HPPAMP β€” HP 9000 PA-Risc / shared memory transport
  • KSR1 β€” Kendall Square
  • I860 β€” Intel RX Hypercube
  • IPSC2 β€” Intel IPSC/2
  • LINUX β€” 80[345]86 running Linux
  • LINUXALPHA β€” DEC Alpha running Linux
  • LINUXARM β€” Strogarm running Linux
  • LINUXHPPA β€” HP 9000 running Linux
  • LINUXPPC β€” PowerPC running Linux
  • LINUXSPARC β€” Sparc running Linux
  • M88K β€” Motorola M88100 running Real/IX
  • M88K β€” Motorola M88100 running Real/IX
  • MASPAR β€” Maspar
  • MIPS β€” Mips
  • NETBSDALPHA β€” DEC Alpha running NetBSD
  • NETBSDAMIGA β€” Amiga running NetBSD
  • NETBSDARM32 β€” Strongarm running NetBSD
  • NETBSDHP300 β€” HP 300 running NetBSD
  • NETBSDI386 β€” 80[345]86 running NetBSD
  • NETBSDM68K β€” Any Motorola 68K running NetBSD
  • NETBSDMAC68K β€” Macintosh running NetBSD
  • NETBSDMIPSEB β€” Mips EB running NetBSD
  • NETBSDMIPSEL β€” Mips EL running NetBSD
  • NETBSDNS32K β€” NS32K running NetBSD
  • NETBSDPMAX β€” DEC Pmax running NetBSD
  • NETBSDPOWERPC β€” PowerPC running NetBSD
  • NETBSDSH3 β€” SH3 running NetBSD
  • NETBSDSPARC β€” Sparc running NetBSD
  • NETBSDSPARC64 β€” Sparc64 running NetBSD
  • NETBSDSUN3 β€” SUN 3 running NetBSD
  • NETBSDVAX β€” Vax running NetBSD
  • NEXT β€” NeXT
  • OS2 β€” OS/2
  • PGON β€” Intel Paragon
  • PMAX β€” DEC/Mips arch (3100, 5000, etc.)
  • RS6K β€” IBM/RS6000 / AIX 3.x
  • RS6KMP β€” IBM SMP / shared memory transport / AIX 3.x
  • RT β€” IBM/RT
  • SCO β€” 80[345]86 running SCO Unix
  • SGI β€” Silicon Graphics IRIS
  • SGI5 β€” Silicon Graphics IRIS running OS 5.0
  • SGI6 β€” Silicon Graphics IRIS running OS >= 6.0
  • SGI64 β€” Silicon Graphics IRIS running 64 bit
  • SGIMP β€” Silicon Graphics IRIS / OS 5.x / using shared memory
  • SGIMP6 β€” Silicon Graphics IRIS / OS 6.x / using shared memory
  • SGIMP64 β€” Silicon Graphics IRIS / 64 bit / using shared memory
  • SP2MPI β€” IBM SP-2 / using MPI / AIX 3.x
  • SUN3 β€” Sun 3
  • SUN4 β€” Sun 4, 4c, sparc, etc.
  • SUN4SOL2 β€” Sun 4 running Solaris 2.x
  • SUNMP β€” Sun 4 / using shared memory / Solaris 2.x
  • SX3 β€” NEC SX-3
  • SYMM β€” Sequent Symmetry
  • TITN β€” Stardent Titan
  • U370 β€” IBM 3090 running AIX
  • UTS2 β€” Amdahl running UTS
  • UVAX β€” DEC/Microvax
  • UWARE β€” Uware
  • UXPM β€” Fujitsu running UXP/M
  • VCM2 β€” Thinking Machines CM-2 Vax front-end
  • WIN32 β€” Windows 95/98/NT
  • X86SOL2 β€” 80[345]86 running Solaris 2.x
not me spotting M88K twice in this list 😭 Motorola M88100 running Real/IX, listed two separate times, and we are keeping both because that is literally what the page says. periodt πŸ’…

🌸 ENVIRONMENT VARIABLES 🌸

okay bestie so PVM reads these little env vars and you can set them to make your PVM life ✨customized✨. to set them, you just add commands to your .cshrc or .profile or whatever shell startup file you vibe with. want to know how to do that? go read the man page for whatever shell you actually use, it's giving "look it up".

you can also drop in an appropriate shell startup file stub that sets your PVM env vars and adds PVM dirs to your execution path. like, insert the matching stub file β€” pvm3/lib/cshrc.stub, pvm3/lib/kshrc.stub or pvm3/lib/bashrc.stub β€” after your declaration of PVM_ROOT in your shell startup file. order matters bestie 🫢

for csh girlies: setting them in .login is NOT the same vibe, okay? .login is only read when you're actually logging in, but .cshrc is read every single time csh starts up. and PVM needs those env vars set when it starts a slave pvmd with rsh host pvmd ... β€” so they have to live in .cshrc. periodt.

and for those of you on a shell that doesn't always read a startup script (looking at you, sh and ksh), there's another way. before running the PVM executables, the pvm and pvmd startup scripts source any commands in $HOME/.pvmprofile if that file exists. sneaky but iconic πŸ’…

so here's the lineup β€” these are the environment variables supported by PVM 3.4.4:

  • PVM_ROOT β€” the path where PVM libraries and system programs are installed, like /usr/local/pvm3 or $HOME/pvm3. this one is mandatory, like it must be set on each host where PVM is used for PVM to function at all. there is no default value. none. zero. set it. πŸ”₯
  • PVM_TMP β€” the path for PVM temporary files, such as the daemon socket file pvmd.<uid> and the log file pvml.<uid>. use this to point at a directory other than /tmp (or C:\TEMP on Win32), or to add security by using a protected subdirectory in /tmp that's owned by your userid and can't be easily corrupted. lowkey a glow-up for your security πŸŽ€
  • PVM_RSH β€” the path to the "rsh" program on your system, if it's different from whatever's defined in the $PVM_ROOT/conf/$PVM_ARCH.def configuration file. you can also use this to swap "rsh" out for "ssh" for added security. bestie, ssh is the moment πŸ¦‹
  • PVM_PATH β€” the execution path that gets searched for PVM programs on your system. by default PVM looks in $HOME/pvm3/bin/$PVM_ARCH and $PVM_ROOT/bin/$PVM_ARCH for your PVM applications. heads up though: this does not override the ep= host file option. no cap.
  • PVM_WD β€” the working directory for spawned PVM programs on your system. by default PVM spawns your PVM applications in $HOME, but for the convenience of accessing data or input files with relative path names, you can specify an alternate working directory. and yes, this does not override the wd= host file option either.
  • PVM_EXPORT β€” names of environment variables to export from a parent task to children tasks through pvm_spawn(). multiple names must be separated by ':'. if PVM_EXPORT isn't set, no environment is exported. simple as that ✨
  • PVM_DEBUGGER β€” the debugger script to use when pvm_spawn() is called with PvmTaskDebug set. the default is $PVM_ROOT/lib/debugger.
  • PVM_DPATH β€” the path of the pvmd startup script (default is $PVM_ROOT/lib/pvmd). it gets overridden by the host file option dx=.

this variable is useful if you use a shell that doesn't automatically execute a startup script (such as .cshrc) to allow setting PVM_ROOT on slave (added) hosts. if you set it to the absolute or relative path of the pvmd startup script (for example /usr/local/pvm3/lib/pvmd or pvm3/lib/pvmd), the script will automatically set PVM_ROOT.

note that for this to work, you must set it to run the pvmd script, not the pvmd3 executable itself. not me making that mistake so you don't have to 😭
  • PVM_WINDPATH β€” does the exact same job as PVM_DPATH above, but specifically for Win32 systems. this second env var lets you alternatively specify the path to the pvmd3.exe daemon executable using appropriate DOS file path syntax and environment variables (e.g. %PVM_ROOT%\lib\WIN32\pvmd3.exe). windows besties we see you πŸ’œ
  • PVMHOSTFILE β€” specifies the path to an optional host file to be used by default when starting PVM. this alleviates the need to manually pass a host file path argument to the "pvm" console or "pvmd" script when starting PVM. lazy-girl-friendly, we love to see it πŸ“
  • PVMDLOGMAX β€” sets the maximum length of the pvmd error log file. default value is the PVMDLOGMAX parameter in the source, 1 Mbyte.
  • PVMDDEBUG β€” sets the default pvmd debugging mask (just like the pvmd -d option does). value can be in hexadecimal (0x...), octal (0...) or decimal. used to debug the pvmd (not intended to be used to debug application programs). read that again bestie.
  • PVMTASKDEBUG β€” sets the default libpvm debugging mask (just like pvm_setopt(PvmDebugMask, x)). value can be in hexadecimal (0x...), octal (0...) or decimal. used to debug libpvm (again, not intended to be used to debug application programs).
  • PVMTASK β€” sets additional flag bits for the pvm_spawn() library call. allows override at run time of flags compiled into the pvm_spawn() calls in your PVM application, e.g. to turn on PvmTaskDebug for popping up child tasks in a debugger window. runtime glow-up ✨
  • PVMBUFSIZE β€” sets the size of the shared memory buffers used by libpvm and the pvmd. the default value is 1048576. if your program composes messages longer than this size, you must increase it. no negotiation.
  • PVM_VMID β€” a new feature in PVM 3.4.4: the concept of a "Virtual Machine ID". you can now set the PVM_VMID environment variable to an arbitrary string (or use the "id=" option in a host file, see man page for pvmd3), and this will distinguish and allow multiple virtual machines to run on the same set of hosts under the same userid. (this feature was originally introduced by SGI in their commercial PVM product, and has now been generalized for the public PVM system.) this feature seems to be something that people often want, and the PVM_VMID is the cleanest way to provide this functionality, rather than overloading the SHAREDTMP compiler flag and other internals.

setting the PVM_VMID environment variable before starting PVM will create an encapsulated virtual machine with the given VMID name. by default, all other hosts which are added to this virtual machine will inherit the same VMID. if hosts are added to the virtual machine which are running older versions of PVM (prior to 3.4.4), then the VMID will be ignored for those hosts, and hence these machines can only be added to one virtual machine for the given user. the VMID need not be consistent on every host in a virtual machine (although this is not necessarily advisable), and the VMID can be set for individual hosts using the "id=" host file option (see man page for pvmd3).


🌈 the internal-use-only girlies (do not touch) 🌈

the following environment variables are used by PVM internally. with the exception of PVM_ARCH, their values should not be modified. this is for information only. like, look but don't touch bestie πŸ™ˆ

  • PVM_ARCH β€” the PVM architecture name of the host on which it's set, used to distinguish between machines with different executable (a.out) formats. copies of a program for different architectures are installed in parallel directories named for PVM architectures.
  • PVMSOCK β€” is passed from pvmd to spawned task, and gives the address of the pvmd local socket.
  • PVMEPID β€” holds the expected process id of a spawned task exec'd by the pvmd. this is a magic cookie used by the task to identify itself when reconnecting to the pvmd, in order to get the correct task slot. πŸͺ
  • PVMTMASK β€” the libpvm trace mask, passed from the pvmd to spawned tasks.
  • PVMTRCBUF β€” the libpvm trace buffer size. if specified, determines the number of bytes of trace event message buffer to be collected before sending to front-end tracer program.
  • PVMTRCOPT β€” the libpvm trace option setting. determines the level of tracing to be performed on invocations of PVM library calls.
  • PVMINPLACEDELAY β€” used to optimize sending of PvmDataInPlace messages on MPP systems.
  • PVMKEY β€” PVM uses this value, combined with the process id, to generate shared-memory segment keys. the default value is your numeric uid. PVM automatically detects collisions when generating a key and picks a new key, so it should almost never need to be set explicitly. she handles herself πŸ’…

πŸ‘€ SEE ALSO πŸ‘€

aimk(1PVM), pvm(1PVM), pvmd3(1PVM), PVM 3.3 User's Guide and Reference Manual


πŸ’– AUTHORS πŸ’–

A. L. Beguelin [4,5], J. J. Dongarra [1,2], G. A. Geist [2], W. C. Jiang [1], R. J. Manchek [1], B. K. Moore [1], V. S. Sunderam [3]

  1. University of Tennessee, Knoxville TN.
  2. Oak Ridge National Laboratory, Oak Ridge TN.
  3. Emory University, Atlanta GA.
  4. Carnegie Mellon University, Pittsburgh PA
  5. Pittsburgh Supercomputer Center, Pittsburgh PA

and that's the whole page bestie, you made it to the end!! πŸŽ‰ this little icon of a document is dated 11 April, 1995, and it lives in PVM_INTRO(1PVM) β€” the PVM crew really said "let's cook" back in '95 and we're still eating today. go set your PVM_ROOT and slay πŸ’…βœ¨πŸ‘‘

πŸ“¦ where this page comes from