<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>PVMPOV HOWTO</title><link rel="stylesheet" href="style.css" type="text/css"><link rev="made" href="mailto:flierl@luga.de"><meta name="generator" content="DocBook XSL Stylesheets Vstyle.css"><meta name="keywords" content="PVMPOV, PVM-POV, Parallel POV-Ray"><meta name="description" content="a HOWTO about PVMPOV"><meta name="MSSmartTagsPreventParsing" content="TRUE"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" id="d0e1"><div class="titlepage"><div><h1 class="title"><a name="d0e1"></a><i>PVMPOV HOWTO</i></h1></div><div><p class="pubdate">September 6th 2001</p></div><div><div class="abstract"><p><a name="d0e20"></a><b>Abstract</b></p><p> This document gives you explicit instructions on installing and running PVMPOV, a parallel version of the popular ray-tracing application Persistence of Vision (“POV-Ray”). </p></div></div><hr size="1" noshade></div><div class="toc"><p><b>Table of Contents</b></p><ul><li> <a href="#intro">Introduction</a></li><li>1 <a href="#setup">Setting up PVMPOV</a></li><li>2 <a href="#use">Using PVMPOV</a></li><li>3 <a href="#bugs">Bugs & Limitations</a></li><li>4 <a href="#faq">Frequently asked questions</a></li><li>5 <a href="#cmd-line-options">Command line options</a></li><li>6 <a href="#standard-info">Standard Information</a></li></ul></div><div id="intro" class="preface"><div class="titlepage"><div><h2 class="title"><a name="intro"></a>Introduction</h2></div></div><p> PVMPOV = PVM + POV-Ray </p><p> <i>PVM</i> is a message passing system that enables a network of computers to be used as a single distributed memory parallel computer. This network is referred to as the <i>Parallel Virtual Machine </i>. </p><p> <i>POV-Ray</i> is a 3-dimensional raytracing engine. It takes information you supply and simulates the way light interacts with the objects you've defined to create stunning 3d pictures and animation. This process is called <i>rendering</i>. </p><p> <i>PVMPOV</i> has the ability to distribute a rendering across multiple heterogeneous systems. Parallel execution is only active if the user gives the “<tt>+N</tt>” option to PVMPOV. Otherwise, PVMPOV behaves the same as regular POV-Ray and runs a single task only on the local machine. </p><p> Using the PVM model, there is one master and many slave tasks. The master has the responsibility of dividing the image up into small blocks, which are assigned to the slaves. When the slaves have finished rendering the blocks, they are sent back to the master, which combines them to form the final image. The master does not render anything by itself, although there is usually a slave running on the same machine as the master, since the master doesn't use very much CPU power. </p><p> If one or more slaves fail, it is usually possible for PVMPOV to complete the rendering. PVMPOV starts the slaves at a reduced priority by default, to avoid annoying the users on the other machines. The slave tasks will also automatically time out if the master fails, to avoid having lots of lingering slave tasks if you kill the master. </p></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="setup"></a>Chapter 1. Setting up PVMPOV</h2></div></div><p> The PVM patches to POV-Ray are very easy to install. The entire operation should take only a few minutes once you have the source code. But before compiling PVMPOV you must be sure to have the PVM library installed correctly. </p><a name="d0e153"></a><table class="important" border="0"><tr><td rowspan="2" align="center" valign="top" width="24"><img src="images/important.png" alt="Important" width="24" height="24"></td></tr><tr><td colspan="2" align="left" valign="top"> PVM is not included in the PVMPOV distribution. You have to download and install it manually. Get it from the <a href="http://www.epm.ornl.gov/pvm/pvm_home.html">PVM home page</a>. Also note that the PVMPOV patch only works with the unix sources of POV-Ray. </td></tr></table><div class="sect2"><a name="d0e169"></a><div class="titlepage"><div><h3 class="title"><a name="d0e169"></a>1.1. Getting the sources </h3></div></div><p> The following files are required to build and run PVMPOV: </p><p> <div class="itemizedlist"><ul><li> <a href="http://www.luga.de./~flierl/pvmpov/pvmpov-3.1g2.tgz">pvmpov-3.1g2.tgz</a>, the PVMPOV patch, </li><li> <a href="ftp://ftp.povray.org/pub/povray/Official/Unix/povuni_s.tgz">povuni_s.tgz</a>, the POV-Ray unix source code, and </li><li> <a href="ftp://ftp.povray.org/pub/povray/Official/Unix/povuni_d.tgz">povuni_d.tgz</a>, a collection of data files, documentation, and examples that are part of POV-Ray. </li></ul></div> </p><p> If you already have another version of POV-Ray 3.1 installed on your computers, then you only need to download <tt>pvmpov-3.1g2.tgz</tt> and <tt>povuni_s.tgz</tt>. </p><p> You should put these files someplace easily accessible that has at least 15Mb of free space; for the purposes of the rest of these examples, we will presume the sources are in <tt>$HOME/tmp</tt>, which is shared across all computers: </p><pre class="screen"> <tt>$ </tt><span class="userinput">cd $HOME/tmp</span> <tt>$ </tt><span class="userinput">wget -q http://www.luga.de./~flierl/pvmpov/pvmpov-3.1g2.tgz</span> <tt>$ </tt><span class="userinput">wget -q ftp://ftp.povray.org/pub/povray/Official/Unix/povuni_s.tgz</span> <tt>$ </tt><span class="userinput">wget -q ftp://ftp.povray.org/pub/povray/Official/Unix/povuni_d.tgz </span> </pre></div><div class="sect2"><a name="d0e246"></a><div class="titlepage"><div><h3 class="title"><a name="d0e246"></a>1.2. Unpacking the sources </h3></div></div><p> Untar the PVMPOV patch file. </p><pre class="screen"> <tt>$ </tt><span class="userinput">tar xfz pvmpov-3.1g2.tgz </span> </pre><p> This will create a <tt>pvmpov3_1g_2</tt> directory. Change into the this directory and extract the POV-Ray source files. </p><pre class="screen"> <tt>$ </tt><span class="userinput">cd pvmpov3_1g_2</span> <tt>$ </tt><span class="userinput">tar xfz ../povuni_s.tgz</span> <tt>$ </tt><span class="userinput">tar xfz ../povuni_d.tgz </span> </pre></div><div class="sect2"><a name="d0e286"></a><div class="titlepage"><div><h3 class="title"><a name="d0e286"></a>1.3. Patching POV-Ray </h3></div></div><p> Once the source files have been extracted, apply the PVMPOV patch by executing the “<tt>inst-pvm</tt>” shell script. </p><p> <pre class="screen"> <tt>$ </tt><span class="userinput">./inst-pvm</span> <span class="computeroutput"> Trying to apply the patch. Searching for rejected files </span> <tt>$</tt> </pre> If you see nothing listed between the “Trying to apply ...” and “Searching for ...” lines, the patch was successfully applied to the POV-Ray sources, and you can continue to build the modified sources. </p><p> If there are problems with the patch (for example, some of the patches are misaligned with regard to the current version of the source), you will get error messages from the patch program. If this happens, all is not lost. It's pretty easy to look at the <tt>.rej</tt> files and then compare them to the sources and insert the patches by hand. The “<tt>inst-pvm</tt>” shell script just makes things a little more convenient. </p><p> Another common problem is, that people are not using the the <a href="ftp://ftp.gnu.org/pub/gnu/patch/">GNU patch utility</a>, which should be on most UNIX systems. Other patch programs may not work. </p></div><div class="sect2"><a name="d0e340"></a><div class="titlepage"><div><h3 class="title"><a name="d0e340"></a>1.4. Building PVMPOV </h3></div></div><p> After the patch has been applied successfully you can build the PVMPOV binaries. Change into the <tt>povray31/source/pvm</tt> directory and type “<tt>aimk newunix</tt>”. When the compilation finishes, compile the display capable versions of PVMPOV by executing “<tt>aimk newsvga</tt>” and “<tt>aimk newxwin</tt>”. The binaries will then be in <tt>povray31/sources/pvm/$PVM_ARCH</tt>. </p><pre class="screen"> <tt>$ </tt><span class="userinput">cd povray31/source/pvm</span> <tt>$ </tt><span class="userinput">aimk newunix</span> <span class="computeroutput"> making in LINUX/ for LINUX /home/flierl/tmp/pvmpov3_1g_2/povray31/source/pvm/LINUX rm -f ./povray.o ./render.o ./userio.o ./vbuffer.o pvm.o cp ../../unix/unixconf.h config.h (cd ..; aimk unix) making in LINUX/ for LINUX /home/flierl/tmp/pvmpov3_1g_2/povray31/source/pvm/LINUX make[1]: Entering directory `/home/flierl/tmp/pvmpov3_1g_2/povray31/source/pvm/ LINUX' gcc -O6 -ansi -finline-functions -ffast-math -c -Wall -DCOMPILER_VER=\".`uname` .gcc\" -I. -I.. -I../.. -I../../unix -I../../libpng -I../../zlib -I/usr/X11R6/i nclude ../../atmosph.c -o atmosph.o ... gcc -O6 -ansi -finline-functions -ffast-math -c -Wall -DCOMPILER_VER=\".`uname` .gcc\" -I. -I.. -I../.. -I../../unix -I../../libpng -I../../zlib -I/usr/X11R6/i nclude ../../unix/unix.c -o unix.o gcc ./atmosph.o ./bbox.o ./bcyl.o ./bezier.o ./blob.o ./boxes.o ./bsphere.o ./c amera.o ./chi2.o ./colour.o ./cones.o ./csg.o ./discs.o ./express.o ./fractal.o ./gif.o ./gifdecod.o ./hcmplx.o ./hfield.o ./iff.o ./image.o ./interior.o ./la the.o ./lbuffer.o ./lighting.o ./matrices.o ./media.o ./mem.o ./mesh.o ./normal .o ./objects.o ./octree.o ./optin.o ./optout.o ./parse.o ./parstxtr.o ./pattern .o ./pgm.o ./pigment.o ./planes.o ./png_pov.o ./point.o ./poly.o ./polygon.o ./ polysolv.o ./povray.o ./ppm.o ./prism.o ./quadrics.o ./quatern.o ./rad_data.o . /radiosit.o ./ray.o ./render.o ./sor.o ./spheres.o ./super.o ./targa.o ./textur e.o ./tokenize.o ./torus.o ./triangle.o ./truetype.o ./txttest.o ./userio.o ./v buffer.o ./vlbuffer.o ./warps.o ./pvm.o ./unix.o /usr/lib/pvm3/lib/LINUX/libpvm 3.a /usr/lib/pvm3/lib/LINUX/libgpvm3.a -L../../libpng -lpng -L../../zlib -l z -lm -o pvmpov make[1]: Leaving directory `/home/flierl/tmp/pvmpov3_1g_2/povray31/source/pvm/L INUX' </span><tt>$ </tt><span class="userinput">aimk newsvga</span> <span class="computeroutput"> ... </span> <tt>$ </tt><span class="userinput">aimk newxwin</span> <span class="computeroutput"> ... </span> </pre></div><div class="sect2"><a name="d0e402"></a><div class="titlepage"><div><h3 class="title"><a name="d0e402"></a>1.5. Installing the binaries </h3></div></div><p> As the case may be, the PVMPOV binaries can be installed in lots of ways. </p><p> <div class="itemizedlist"><ul><li> If you can get administrative rights, then do the following: <pre class="screen"> <tt>$ </tt><span class="userinput">su -</span> <tt>$ </tt><span class="userinput">aimk install</span> </pre> This will copy the binaries to <tt>$PVM_ROOT/bin/$PVM_ARCH</tt> and create symbolic links in <tt>/usr/local/bin</tt>. </li><li> If you cannot get “root” you have two other options: <div class="orderedlist"><ol type="1"><li> Move the binaries into <tt>$HOME/pvm3/bin/$PVM_ARCH</tt>. </li><li> Use the “<tt>ep=$PATH</tt>” option in your <tt>pvm.hosts</tt> file. Read the PVM documentation for more information. </li></ol></div> </li></ul></div> </p></div></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="use"></a>Chapter 2. Using PVMPOV</h2></div></div><p> The following is an example from Jason Hough, and was generated on a group of six Solaris based 4-processor SPARCstation 20s. His home directory is NFS mounted to all of these hosts. </p><div class="sect2"><a name="pvm"></a><div class="titlepage"><div><h3 class="title"><a name="pvm"></a>2.1. Starting the PVM daemons</h3></div></div><p> You first must have a PVM daemon launched on each host that will be participating in the rendering. Create a file called <tt>pvm.hosts</tt> which should contain some information needed for the pvm daemon to run. Refer to the PVM documentation (“<tt>man pvmd3</tt>”) to get more info about PVM's host file format. </p><p> Jason Hough keeps the pvm daemon installed in a directory called “<tt>bin</tt>”, given by “<tt>dx=./bin/pvmd3</tt>” relative to his home directory, and PVMPOV is in various subdirectories under “<tt>bin</tt>” (ie “<tt>bin/SUN4</tt>”, “<tt>bin/SUNMP</tt>”, “<tt>bin/LINUX</tt>”, etc.), given by the executable path “<tt>ex=./bin</tt>”, so his <tt>pvm.hosts</tt> file looks like: </p><p> <pre class="screen"> <tt>$ </tt><span class="userinput">cat $HOME/pvm.hosts</span> <span class="computeroutput"> glee dx=./bin/pvmd3 ep=./bin elation dx=./bin/pvmd3 ep=./bin ecstasy dx=./bin/pvmd3 ep=./bin bliss dx=./bin/pvmd3 ep=./bin delight dx=./bin/pvmd3 ep=./bin rapture dx=./bin/pvmd3 ep=./bin </span> </pre> </p><p> The following command launches the PVM daemons: </p><p> <pre class="screen"> <tt>$ </tt><span class="userinput">pvm pvm.hosts</span> <span class="computeroutput"> 3.3.7 t40001 <tt>pvm> </tt></span><span class="userinput">conf</span> <span class="computeroutput"> 6 hosts, 1 data format HOST DTID ARCH SPEED glee 40000 SUNMP 1000 elation 80000 SUNMP 1000 ecstasy c0000 SUNMP 1000 bliss 100000 SUNMP 1000 delight 140000 SUNMP 1000 rapture 180000 SUNMP 1000 <tt>pvm> </tt></span><span class="userinput">quit</span> <span class="computeroutput"> pvmd still running. </span> <tt>$ </tt> </pre> </p><p> Type “<tt>quit</tt>” at the PVM prompt to exit the PVM interface and leave the PVM daemons still running. </p></div><div class="sect2"><a name="pvmpov"></a><div class="titlepage"><div><h3 class="title"><a name="pvmpov"></a>2.2. Rendering in parallel</h3></div></div><p> Now that the PVM daemons are up and waiting for work to do, we can render. </p><p> POV-Ray needs object script files (<tt>.pov</tt>) to raytrace, and there are many places on the Internet you can obtain .pov files from. For your first rendering, you may want to check out the POV-Ray benchmarking site <a href="http://www.haveland.com/povbench/">POVBench</a> and get the <tt>skyvase.pov</tt> file. This file is used to benchmark and compare computers of varying designs and can provide a way of measuring your parallel virtual machine's performance. </p><p> Note that for these multi-processor machines Jason Hough forces PVMPOV to start more tasks than the default 1 per host, and uses a 64x64 block size: </p><pre class="screen"> <tt>$ </tt><span class="userinput">pvmpov +Iskyvase.pov +Oskyvase.tga +NT24 +NW64 +NH64 +v</span> <span class="computeroutput"> POV-Ray Options in effect: +v1 +ft +mb25 +NT24 +NN5 +NW64 +NH64 +a0.300 +j1.000 +b999 +r3 -q9 -w1024 -h768 -s1 -e768 -k0.000 -mv2.0 +Iskyvase.pov +Oskyvase.tga ...at least 13 tasks successfully spawned in time. ...Don't worry, more are on the way, I'm just not waiting PVM Task Distribution: Tasks-24 Grid width-64 Grid height-64 Sections-192 Waiting for slave stats. PVM Task Distribution Statistics: host name [ done ] [ late ] host name [ done ] [ late ] glee [ 4.17%] [ 0.00%] glee [ 4.17%] [ 0.00%] glee [ 4.17%] [ 0.00%] glee [ 4.17%] [ 0.00%] elation [ 4.69%] [ 0.00%] elation [ 4.17%] [ 0.00%] elation [ 4.17%] [ 0.00%] elation [ 4.17%] [ 0.00%] ecstasy [ 3.65%] [ 0.00%] ecstasy [ 4.69%] [ 0.00%] ecstasy [ 4.69%] [ 0.00%] ecstasy [ 4.17%] [ 0.00%] bliss [ 3.65%] [ 0.00%] bliss [ 4.17%] [ 0.00%] bliss [ 4.69%] [ 0.00%] bliss [ 3.65%] [ 0.00%] delight [ 3.65%] [ 0.00%] delight [ 4.17%] [ 0.00%] delight [ 4.17%] [ 0.00%] delight [ 4.17%] [ 0.00%] rapture [ 4.69%] [ 0.00%] rapture [ 4.17%] [ 0.00%] rapture [ 4.17%] [ 0.00%] rapture [ 3.65%] [ 0.00%] skyvase.pov statistics -------------------------------------- Resolution 1024 x 768 # Rays: 3773743 # Pixels: 798720 # Pixels supersampled: 17381 Ray->Shape Intersection Tests: Type Tests Succeeded Percentage ----------------------------------------------------------- Sphere 6304452 1170727 18.57 Plane 63822062 35385552 55.44 Quadric 6304452 2770858 43.95 Cone 5918163 4839298 81.77 Bounds 5918163 3152226 53.26 Calls to Noise: 4327871 Calls to DNoise: 5141872 Shadow Ray Tests: 10498615 Blocking Objects Found: 254807 Reflected Rays: 2818594 Time For Trace: 0 hours 0 minutes 47.00 seconds </span> </pre><a name="d0e607"></a><table class="important" border="0"><tr><td rowspan="2" align="center" valign="top" width="24"><img src="images/important.png" alt="Important" width="24" height="24"></td></tr><tr><td colspan="2" align="left" valign="top"> Note that for comparison purposes with other skyvase benchmarks that this is rendered at 1024x768 instead of the usual 640x480. </td></tr></table></div></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="bugs"></a>Chapter 3. Bugs & Limitations</h2></div></div><p> The following bugs and limitations are known: </p><p> <div class="itemizedlist"><ul><li> Radiosity is not working. The resulting image looks like a mosaic. The energy bias for each block is different because the radiosity equation is not globally resolved correctly. </li><li> Field rendering (“<tt>-UF</tt>” option) is not working. </li><li> The master process does not parse the input file. As long as your input file still contains error you should disable PVM support (“<tt>-N</tt>” or PVM=off). </li><li> The statistics for the image being rendered may not be accurate if any of the slaves is too slow, or stops for some reason. As well, since some sections may be rendered twice if the block is reassigned, the statistics will not be exactly the same as if it were rendered on a single host. The master only waits a few seconds for statistics to arrive before printing them. </li><li> When using automount you might have the problem, that the slaves can't change to the working directory. Use the “<tt>+ND</tt>” (pvm_wd) option. Calling PVMPOV with “<tt>+ND$PWD</tt>” should solve the problem. </li><li> PVMPOV also supports animations. It computes multiple frames simultaneously, so it is not possible to do “recursive animations”. All the pre-scene shellouts are done by the master process in the correct order, and the same for the post-scene shellouts. But for example the pre-scene shellout for frame 2, will be executed before the post-scene shellout for frame 1. </li><li> The command line arguments for specifying hosts is not cumulative, so the following command will <i>not</i> start 24 slaves on the multi-processor system(s) (which may have 4 CPUs each), and then start one slave on each of the remaining systems. <pre class="screen"> <tt>$ </tt><span class="userinput">pvmpov +NASUNMP +NT24 +N +Iskyvase.pov +Oskyvase.tga </span> </pre> </li></ul></div> </p></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="faq"></a>Chapter 4. Frequently asked questions</h2></div></div><p> <div class="itemizedlist"><ul><li><a name="d0e685"></a> I have a problem with PVM. <p> Have a look into the <a href="http://www.netlib.org/pvm3/book/pvm-book.html">PVM book</a>. </p></li><li><a name="d0e693"></a>PVMPOV seems to be slower than POV-Ray. <p> It is important to note that by varying the size of the grid sections, you can affect the performance of the rendering. If you have particular renderings that are very complex in a small portion of the display, then a finer grain may help. In this way, more of the tasks are able to migrate towards the grid sections that are more complex. Conversely, if you have a shorter render or a slower network, it may be advantageous to have larger blocks to reduce network overhead, as well as ensure the slaves are not idle waiting for blocks to render. </p> Another thing to mention is that you should not use PVMPOV for short renderings (e.g. 10's of seconds) as this is slower than on one fast machine. You must also consider overhead if using Antialiasing. Antialiasing requires the line segment above and below the grid section to be traced so that super-sampling may occur. If the height of the grid is reduced in size, and Antialiasing is turned on, your percentage of overhead goes up. For example, setting a height of four (“<tt>+NH4</tt>”) using Antialiasing would have more than 25% overhead. If the image size is not an integer multiple of the grid size, the edge blocks are smaller (ie extra pixels aren't rendered), so it is not necessary to evenly divide the image into blocks. </li></ul></div> </p></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="cmd-line-options"></a>Chapter 5. Command line options</h2></div></div><p> Valid POV-Ray command-line options relating to PVM are: </p><p> <div class="itemizedlist"><ul><li><a name="d0e727"></a><tt>pvm=on</tt>, <tt>+N</tt><p> This is the default for starting PVMPOV: one slave will be started on each available host, regardless of architecture, and the blocks will be 32x32 pixels in size. The slaves will be started with a nice value of 5, which means they will run at a lower priority than other user jobs. </p></li><li><a name="d0e739"></a><tt>pvm=off</tt>, <tt>-N</tt><p> Turns of PVM support. PVMPOV now runs exactly as normal POV-Ray. You should do this when there are still errors in your input file. PVMPOV will not display error message otherwise. </p></li><li><a name="d0e757"></a><tt>pvm_tasks=n</tt>, <tt>+NTn</tt><p> Start <tt>n</tt> tasks on the available PVM hosts. This is usually only useful if debugging on a single machine, or for starting more than 1 task on multi-processor hosts. If, for example, you have 10 machines with 4 CPUs each, you could specify +nt40 to start 4 processes on each host (and the OS will hopefully run 1 on each CPU). </p> Note that PVM is stupid in the way it starts tasks, so if, in the previous example, one of the hosts has only one CPU, it will still have 4 slaves started on it. You can use the “<tt>pvm_hosts</tt>” option (see below) to control on which machines the tasks are started. Starting multiple tasks on a single processor will always be less efficient than a single task because of context switching and extra message passing. </li><li><a name="d0e777"></a><tt>pvm_arch=arch</tt>, <tt>+NAarch</tt><p> Start the tasks only on the PVM architecture “<tt>arch</tt>”. If “<tt>+NT</tt>” is not given, one task will be started on each of the hosts of the given architecture. </p></li><li><a name="d0e794"></a><tt>pvm_nice=n</tt>, <tt>+NNn</tt><p> Run the slaves at a scheduling priority of “<tt>n</tt>”. The default scheduling priority is 5. In general, changing the priority value will not affect performance very much, but may get others upset with you. The nicest setting for PVMPOV is 20, while the least nice setting is 0. Note that these values are always used even on systems that use scheduling priority values from 20-40. See the installation document and the info page for <tt>nice</tt> for more information. </p></li><li><a name="d0e813"></a><tt>pvm_width=n</tt>, <tt>+NWn</tt><p> Change the width of the blocks to “<tt>n</tt>” pixels. The default width is 32 pixels. </p></li><li><a name="d0e826"></a><tt>pvm_height=n</tt>, <tt>+NHn</tt><p> Change the height of the blocks to “<tt>n</tt>” pixels. The default height is 32 pixels. </p></li><li><a name="d0e839"></a><tt>pvm_slave=slave</tt>, <tt>+NSslave</tt><p> Uses “<tt>slave</tt>” as filename for the slave tasks. If you do not specify this option PVMPOV will use the current executable name also for the slaves. </p> Using this option you can for example run the X11 version (<tt>x-pvmpov</tt>) as master (to display the results) and a version without any display support (<tt>pvmpov</tt>) as slaves. </li><li><a name="d0e863"></a><tt>pvm_wd=dir</tt>, <tt>+NDdir</tt><p> Set the working directory for the slaves. By default PVMPOV tries to run the slaves in the same directory, as the master. But sometimes 'getcwd' gives misleading output (when automounting is used), or you simply want to run the slaves in some other directory, then you can use this option. </p></li><li><a name="d0e875"></a><tt>pvm_hosts=name1,name2,...</tt><p> Set the names of the hosts to use for slaves. Note, that there are no spaces allowed between the names. </p> By default PVM distributes the processes in some order to the available machines. Sometimes the choice of PVM is not the best, so you can specify explicitly which machines to use. You can use more tasks, then you specify here. You can use the options in this way: “<tt>pvm_hosts=darkstar,darkstar,baby +NT6</tt>”. This will start six tasks (“<tt>+NT6</tt>” must come after the “<tt>pvm_hosts</tt>”), four on darkstar and two on baby. </li></ul></div> </p></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="standard-info"></a>Chapter 6. Standard Information</h2></div></div><div class="sect2"><a name="authors"></a><div class="titlepage"><div><h3 class="title"><a name="authors"></a>6.1. Authors</h3></div></div><p> The following people are/were involved in PVMPOV: </p><p> <div class="itemizedlist"><ul><li>Brad Kline, Cray Research Inc., released the first version of PVMPOV.</li><li><a href="http://www-mddsp.enel.ucalgary.ca/People/adilger/povray/pvmpov.html">Andreas Dilger</a> changed large portions of PVMPOV to not only be more user-friendly about reporting errors, but also more robust and faster. </li><li><a href="http://www.geocities.com/CapeCanaveral/Lab/6386/pvmpov/">Harald Deischinger</a> enhanced the command line interface and error handling. </li><li><a href="http://www.luga.de/~flierl/pvmpov/">Jakob Flierl</a> - current maintainer.</li></ul></div> </p></div><div class="sect2"><a name="copyright"></a><div class="titlepage"><div><h3 class="title"><a name="copyright"></a>6.2. Copyright</h3></div></div><p> Copyright © 1993-2001 A. Dilger, H. Deischinger and J. Flierl. </p><p> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation. </p></div><div class="sect2"><a name="disclaimer"></a><div class="titlepage"><div><h3 class="title"><a name="disclaimer"></a>6.3. Disclaimer</h3></div></div><p> We will not accept any responsibility for any incorrect information within this document, nor for any damage it might cause when applied. </p></div></div></div></body></html>