NAME nmrShell - Parallel Execution of Shell-Scripts SYNOPSIS nmrShell -par serverListName -sh scriptName [-path remotePath] [-to uSecDelay] [-log] DESCRIPTION nmrShell is a utility for executing a given shell-script simultaneously on a group of computers listed in a text file. The computers can be UNIX workstations connected via a network, or they can be processors within a multi-CPU UNIX machine. Since nmrShell is specifically intended to support the use of NMRPipe 3D and 4D parallel processing schemes, this document describes the details of such schemes, as well as the use of nmrShell to execute them. When nmrShell executes a shell-script on a list of comput- ers, it divides the terminal screen into sub-windows, one for every computer. Each sub-window is labeled with the associated computer's name (hostname) and CPU number (for multi-processor machines). During execution of the shell-script, a given sub-window displays all output mes- sages generated by the corresponding computer. The -log option of nmrShell allows each computer's output messages to be written to a log file in addition to being displayed on the screen. nmrShell uses the UNIX remote-shell command "rsh" to execute a given shell-script. So, nmrShell will only work correctly if the rsh command can successfully reach all the computers of interest. Furthermore, the specified shell-script, and all programs and data required by the shell-script, must be accessible to all computers of interest. This usually means that the computers will share data and programs via common directories (NFS, networked file systems). The remote command used by nmrShell has two parts. The first part changes to a particular directory on the remote computer via the UNIX command cd. The second part uses the UNIX command sh to execute the specified shell-script. By default, the directory used for the remote command is the same as the directory where nmrShell is invoked. This implies that the network is configured so that a given shared directory has the same name on all computers of interest, although other configurations can be accommodated. Since the network and filesystem configurations play such a critical part in NMRPipe parallel processing schemes, it is strongly advised that suitable conditions should be esta- blished and verified before attempting to perform parallel processing. If possible, these conditions should be established with the assistance of your system manager, especially if network security is an issue. Some hints are provided in the CONDITIONS section below. PARALLEL PROCESSING WITH NMRPIPE Given the appropriate network conditions, ordinary 3D and 4D NMRPipe scripts can be used for parallel processing with only minor modifications, leading to improved speeds for time-consuming calculations. The method and conditions are explained below; the explanations assume familiarity with nmrPipe and xyz2pipe. An NMRPipe parallel processing scheme includes the following aspects, described in more detail later: List of the Computers Involved: the computers to be used for parallel processing should be listed in a text file called the server list file. The file can be created with a text editor such as vi. The server list file also includes estimates of each computer's relative speed. Access to Data and Programs: all of the computers must have access to relevant data and programs. This will generally be done via networked file systems, which are disks and directories shared by two or more com- puters. You can establish these shared directories with your system manager. Dividing the Processing Task: the input spectral data will be divided into sections by the xyz2pipe program, so that each computer will process an appropriate sub-set of the overall data. The division will be performed automatically according to information in the server list file. In practice, a complete pro- cessing task is performed via a single NMRPipe shell-script, which will process a different sub-set of the data depending on which computer executes it. Execute the Processing: as noted above, a complete NMRPipe parallel processing scheme calls for a given shell-script to be executed on a list of computers; this is the purpose of nmrShell. As a convenience, nmrShell determines the computers to use via the same server list file used by xyz2pipe. Synchronize the Computers: certain schemes may require waiting for all computers to finish one task before continuing with the next one; this is called synchron- ization. NMRPipe schemes can be synchronized using the waitFor program, which also uses the server list file. The NMRPipe parallel schemes use a simple approach to paral- lel computing called static load-balancing. This means that the amount of data each computer will process is fixed ahead of time. Therefore, a processing scheme will not compensate during execution for possibly changing speeds of a given computer due to other tasks it is performing. In the NMRPipe parallel scheme, 3D or 4D data is divided between the computers of interest as a series of appropriate 2D planes, each of which can be processed independently. The number of planes processed by a given computer is based on its relative speed. Note that these planes are "conceptual" ones; they don't necessarily correspond with actual 2D file planes in the input. According to this scheme, if two computers of equal speed were used to process the X-Axis of a 3D data set with 64 planes, the first computer could process planes 1 to 32 while the second computer processes planes 33 to 64. This partitioning of the data planes for parallel processing is performed automatically by xyz2pipe, once it is given a list of computers to use. As an example, we'll consider building and executing a parallel scheme on two similar computers called "spite" and "spun", which are Sun Sparc 10 computers in the NIH NMR net- work. In our example, the data of interest is in a direc- tory called "/spite2/frankie". The data directory is on a disk which belongs to the computer spite, and the network and file systems are configured so that the data is avail- able via the same directory name on the computer spun. First, we'll construct a server list file, called "pipe.net" in this example, which lists the computers of interest. Each line in the file lists the name of one computer, along with an arbitrary number indicating its relative speed com- pared to the other computers in the list; the higher the number, the proportionally faster the computer is assumed to be. So, our server list file pipe.net, which we create in the /spite2/frankie directory, consists of the following two lines: spite 10 spun 10 Note that if we wanted to use additional computers for the parallel scheme, we would simply add their names as addi- tional lines in the server file. If the computers listed are not similar, we could estimate their relative speeds by comparing the time needed to perform the same processing task (such as processing a 2D plane) on each computer. Once the server list file is created, we can use it in the following one-pass processing scheme, which in this case is saved the the shell-script file "xy.com". The input data is an HNCO FID of (X=1024)(Y=128)(Z=64) total points. Notice that the scheme uses the "-par" option of xyz2pipe, but it is completely ordinary in every other way: #!/bin/csh xyz2pipe -in fid/test%03d.fid -x -verb -par pipe.net \ | nmrPipe -fn POLY -time \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 2 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 43 -p1 0.0 \ | nmrPipe -fn EXT -left -di -sw \ | nmrPipe -fn TP \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 1.0 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 -135 -p1 180 -di \ | nmrPipe -fn TP \ | nmrPipe -fn POLY -auto \ | pipe2xyz -out ft/test%03d.ft2 -y The "-par pipe.net" option of xyz2pipe will cause the pro- cessing scheme to process only a sub-set of the input data, rather than the entire 3D FID. This option will also tem- porarily adjust the data parameters that are sent down the pipeline, so that at the end of the pipeline, pipe2xyz will store the sub-set result into the appropriate part of the overall output. If this shell-script is executed on computer spite, it will process the first half of the data (XY planes 1 to 32), since spite is listed first in the server list file. Correspondingly, when the same shell script is executed on spun, it will process the second half of the data (XY planes 33 to 64), because spun is listed second in the server list. If this shell script is executed on any other computer, it will not process any of the data, since only spite and spun are listed in the server file pipe.net. USING NMRSHELL TO EXECUTE A SCHEME The parallel processing scheme above could be executed "manually", by logging in to both computers separately, and running the shell-script xy.com on each one. However, this manual procedure becomes cumbersome if more than two comput- ers are involved. As a more convenient alternative, we can use nmrShell, since it will execute a shell-script on a given list of computers. For example, to execute script xy.com on the computers listed in pipe.net, we could use the following single command from the /spite2/frankie directory: nmrShell -par pipe.net -sh xy.com When we type in this command, if all goes well the terminal screen will be divided into sub-windows for each computer, and status messages will appear on the screen as each com- puter processes its portion of the data: spite 0: ----------------------------------------| | XYZ2Pipe Partition: Plane 1 to 32 of 64 | | XY Plane 32 of 64 | | | |------------------------------------------------| spun 0: -----------------------------------------| | XYZ2Pipe Partition: Plane 33 to 64 of 64 | | XY Plane 64 of 64 | | | |------------------------------------------------| PARALLEL EFFICIENCY In the test above, both computers working in parallel com- pleted the processing task in about 300 sec, while computer spite working alone can complete the overall processing in about 570 sec. In the ideal case, N similar computers work- ing together could the reduce the time required by a factor of N; in our test, with N = 2 computers, the ideal time would therefore be 570/2 sec = 285 sec. We can express the efficiency of the parallel scheme as the ratio of the ideal time to the actual time. So, for this test case, we had an efficiency (100%)(285 sec)/(300 sec), roughly 95%. During the parallel processing, computer spun must use the network to read and write data stored on computer spite. This is generally more time-consuming than reading and writ- ing data on "local" disks. Furthermore, the computers in the parallel scheme must access the same disk, and this con- tention for disk access can also cause delays. In practice, it is the extra time required for network transmission of data, combined with possible contention for disk access, which determines the efficiency of NMRPipe parallel schemes. This means that the parallel scheme will only be efficient if the time required to access and transmit data over the network is small compared to the time actually spent processing the data. As a consequence, processing schemes which include computa- tionally intense functions (e.g. automated baseline correction or linear prediction) are more likely to profit from parallel processing than "less intense" processing schemes. It also means that adding more computers to a parallel scheme will not always be effective, since the increasing overhead of data access can eventually cancel the benefits of the additional processors. SYNCHRONIZING COMPLETE PROCESSING SCHEMES In the parallel scheme above, two computers were used to share the X-Axis and Y-Axis processing of a 3D data set. In a complete scheme, the Z-Axis should be processed as well. However, in our example, the Z-Axis cannot be processed until both computers have finished their portion of the X-Axis/Y-Axis processing, since the Z-Axis won't be complete until all the XY planes in the result have been created. Once both computers are finished with the XY processing, we can build a scheme to parallel process the Z-Axis just by adding the "-par" option to an ordinary scheme, for example: xyz2pipe -in ft/test%03d.ft2 -z -verb -par pipe.net \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 0.0 -p1 0.0 \ | pipe2xyz -out ft/test%03d.ft3 -z In order to combine this Z-Axis scheme with the X-Axis/Y-Axis scheme, we must synchronize the overall script so that no computer will begin the Z-Axis processing until all computers have finished the X-Axis/Y-Axis processing. This can be done via the program waitFor. waitFor uses a crude but practical technique for synchronization, which works by creating or checking for the existence of text files which signal completion of a given task on a given computer. For example, if the following command is executed on com- puter spite, two things will happen: waitFor -par pipe.net -ext part1 First, a file called "spite.0.part1" will be created; the existence of this file implies that computer spite has com- pleted the first part of some processing task. Second, the waitFor program will pause until text files corresponding to the other computers listed in pipe.net have also been created. So, in our example above, waitFor running on spite would pause until the file "spun.0.part1" was created. If the same command is executed on computer spun, the com- plementary events will occur; the file "spun.0.part1" will be created, and waitFor will pause until file "spite.0.part1" exists. In this way, the actions of the computers executing the same waitFor command will be syn- chronized, since each computer will pause until the others have also executed the waitFor command. So, we can create a complete, synchronized parallel process- ing scheme, just by inserting a waitFor command between the parts of the scheme which must be coordinated across comput- ers. As a defensive measure, we'll insert a version of the waitFor command at the very start of the scheme, which will delete any synchronization files that may be left over from previous scripts (the -init option of waitFor deletes old synchronization files without pausing; we could also use the UNIX file delete command rm): #!/bin/csh waitFor -par pipe.net -ext part1 -init xyz2pipe -in fid/test%03d.fid -x -verb -par pipe.net \ | nmrPipe -fn POLY -time \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 2 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 43 -p1 0.0 \ | nmrPipe -fn EXT -left -di -sw \ | nmrPipe -fn TP \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 1.0 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 -135 -p1 180 -di \ | nmrPipe -fn TP \ | nmrPipe -fn POLY -auto \ | pipe2xyz -out ft/test%03d.ft2 -y waitFor -par pipe.net -ext part1 xyz2pipe -in ft/test%03d.ft2 -z -verb -par pipe.net \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 0.0 -p1 0.0 \ | pipe2xyz -out ft/test%03d.ft3 -z As before, the scheme can be saved as a shell-script ("xyz.com" here), and executed in parallel by nmrShell to produce the output that follows: nmrShell -par pipe.net -sh xyz.com spite 0: ----------------------------------------| | XYZ2Pipe Partition: Plane 1 to 32 of 64 | | XY Plane 32 of 64 | | XYZ2Pipe Partition: Plane 1 to 64 of 128 | | ZX Plane 64 of 128 | |------------------------------------------------| spun 0: -----------------------------------------| | XYZ2Pipe Partition: Plane 33 to 64 of 64 | | XY Plane 64 of 64 | | XYZ2Pipe Partition: Plane 65 to 128 of 128 | | ZX Plane 128 of 128 | |------------------------------------------------| Note that this parallel version of a 3D script is not very different from an ordinary one; it includes only two extra commands ("waitFor -init" and "waitFor") and two additions of the option "-par pipe.net". RESTRICTIONS The parallel processing method has some important restric- tions which should be noted: In-Place Processing: parallel scripts cannot use in-place processing modes when processing the Z-Axis or A-Axis. This restriction may be lifted in future releases. Z-Axis Transpose: parallel scripts cannot make use of the Z-Axis transpose function ZTP. CUSTOM REMOTE COMMANDS As mentioned in the introduction, nmrShell uses the UNIX commands cd and sh to execute a script on a remote machine. The default remote command assumes that the remote machines are single-processor computers, and that the data directory has the exact same name on all machines of interest. As a background to accommodate other situations, and to satisfy advanced UNIX Users, the low-level details of the command generating procedure are presented here. nmrShell uses the following template to generate commands: rsh -n host "cd workingDir; sh scriptName cpuID" host: comes from a given entry in the server list file. workingDir: is the directory where nmrShell is invoked, as determined by the getwd(3) library func- tion. The "-path" option of nmrShell is used to specify a different directory. scriptName: is specified via nmrShell's "-sh" option. cpuID: is a number used to distinguish between dif- ferent processors on the same multi-processor machine. It is determined from the server list file, according to how many times the same host name appears. It is zero by default. Because of its position in the com- mand line, the cpuID becomes an argument to the shell-script specified by scriptName. As a specific example, nmrShell would actually use commands like the following to start remote scripts, via the popen(3) library function: rsh -n spite "cd /spite2/frankie; sh xyz.com 0" rsh -n spun "cd /spite2/frankie; sh xyz.com 0" Remote commands can be customized for each computer by adding information to the server list file; any text which follows the "hostName hostSpeed" data will be used in place of "sh" in the remote command for that machine. For exam- ple, if we wanted to accommodate different directory names on each remote computer, we could use the following server list file: spite 10 cd /net1/frank; sh spun 10 cd /net/frankie; sh along with the following nmrShell command: nmrShell -path ./ -par pipe.net -sh xyz.com In this case, nmrShell will generate the following remote commands instead of the default ones (note that the "-path ./" option is used to "neutralize" the first cd in the remote command): rsh -n spite "cd ./; cd /net1/frank; sh xyz.com 0" rsh -n spun "cd ./; cd /net/frankie; sh xyz.com 0" MULTI-PROCESSOR COMPUTERS With the help of custom remote commands, the static load-balancing schemes described so far can also be used to perform and control parallel spectral processing on a multi-CPU computer. As an example, we'll consider a four-processor SGI Challenge, with the hostname charybdis. If an ordinary processing script is executed on this com- puter, the operating system itself will distribute the vari- ous instances of nmrPipe so that they automatically run on different processors; however this distribution may not be the ideal one. So, the goal of our scheme for this machine will to encourage an even distribution of work among the processors. On the SGI Challenge, each CPU behaves as if it has the same name (charybdis) but a different CPU ID (0, 1, 2, or 3). So, schemes for this situation reflect the fact that we have to use a combination of both a name and an ID number to refer to a given CPU. In our scheme, we'll use the special SGI command "runon", which executes a command on a particu- lar processor. It has the form: runon processorID command During processing, each CPU will be responsible for process- ing an equal sub-set of the data, as if it were an indepen- dent computer on the network. So, each CPU will have its own entry in the server list file, with the same name and speed as the others. Additionally, in order to have nmrShell execute the scheme on each processor, the server list file will be adjusted to include the appropriate runon command as a custom option: charybdis 10 runon 0 csh charybdis 10 runon 1 csh charybdis 10 runon 2 csh charybdis 10 runon 3 csh Since the hostname charybdis appears more than once in the server list, nmrShell will automatically use different ID numbers as the last argument of its remote commands. So, the server file contents listed above would lead to remote commands like the following: rsh -n charybdis "cd /data; runon 0 csh xyz.com 0" rsh -n charybdis "cd /data; runon 1 csh xyz.com 1" rsh -n charybdis "cd /data; runon 2 csh xyz.com 2" rsh -n charybdis "cd /data; runon 3 csh xyz.com 3" In each case, the shell-script "xyz.com" will be invoked with an ID number as its first argument, which is accessed as "$1" in the script. This argument will be used to tell the programs waitFor and xyz2pipe which processor they are running on. So, once the proper server file is created, we can change a parallel scheme for use on a multi-processor computer just by adding the option "-cpu $1" in the appropriate places: #!/bin/csh waitFor -par pipe.net -ext part1 -init -cpu $1 xyz2pipe -cpu $1 \ -in fid/test%03d.fid -x -verb -par pipe.net \ | nmrPipe -fn POLY -time \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 2 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 43 -p1 0.0 \ | nmrPipe -fn EXT -left -di -sw \ | nmrPipe -fn TP \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 1.0 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 -135 -p1 180 -di \ | nmrPipe -fn TP \ | nmrPipe -fn POLY -auto \ | pipe2xyz -out ft/test%03d.ft2 -y waitFor -par pipe.net -ext part1 -cpu $1 xyz2pipe -cpu $1 \ -in ft/test%03d.ft2 -z -verb -par pipe.net \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 0.0 -p1 0.0 \ | pipe2xyz -out ft/test%03d.ft3 -z Note that this same script can also be used on single-processor computers; in these cases, the script will be executed with argument of zero (that is, $1 will have the value 0). OTHER CUSTOM COMMANDS In both the default and custom examples so far, nmrShell always uses the remote shell command rsh -n to execute com- mands. Custom commands can override use of rsh by including the "!" character at the start of the custom command. This may be useful in situations were the remote shell command is different than rsh -n, or in cases where remote execution of commands is not really needed. If a custom command in the server file begins with the "!" character, nmrShell will execute the command directly (without rsh), according to the following template: command scriptName workingDir host cpuID For example, this server list file replaces the default com- mand sequence with the UNIX echo command: spite 10 ! echo spun 10 ! echo According to the template, this server file would give rise to commands like the following, which nmrShell will execute via the popen(3) library function: echo xyz.com /net/frankie spite 0 echo xyz.com /net/frankie spun 0 SUMMARY The examples so far lead to this summary of the features of parallel NMRPipe scripts compared to ordinary ones: 1. Parallel scripts require a server list file, which lists the names and relative speeds of the computers of interest. 2. Parallel scripts will begin with "waitFor -init" or with a UNIX rm command to delete old synchronization files from previous tasks. 3. Parallel scripts will invoke xyz2pipe with the parallel server list option "-par". 4. Parallel scripts will use a waitFor command between each part of the overall scheme, to synchronize the computers before continuing with the next stage of the processing. 5. Parallel scripts will be executed simultaneously on a group of computers, either manually or by the nmrShell command. 6. Parallel scripts must be executed on all computers listed in the server file in order to generate a com- plete result. 7. Parallel schemes for multi-processor computers will use custom commands in the server list file. They will also use "-cpu" arguments for xyz2pipe and "wait- For". 8. Parallel scripts will not use the ZTP transpose function, or in-place processing for the Z-Axis or A-Axis. CONDITIONS FOR PARALLEL PROCESSING Some hints for establishing and verifying the conditions for NMRPipe parallel processing schemes are listed here. If possible, consult with your system manager before proceed- ing, especially if network security is an issue, or if you are unfamiliar with UNIX. Hint 1. The rsh command must be the correct one: some com- puters have more than one command called rsh; for instance, older versions of the SGI implementation of UNIX have a "restricted shell" command as well as a "remote shell" com- mand, both called rsh. Use your computer's manual pages to find out where the "remote shell" resides. Then, make sure your default version of "rsh" corresponds to "remote shell", and not something else. You can use the UNIX command "which" to find which command is currently being used: which rsh If the default version of rsh is the wrong one, you can adjust your .cshrc file to include an alias to the correct version, for example: alias rsh /usr/ucb/rsh Hint 2. The remote shell must have permission to run: each computer maintains a general list of other hosts and users allowed to execute remote commands. Each user can also have a private list of hosts, in the file ".rhosts" in the user's home directory. The format of these authorization lists is described in the rsh manual pages. Our test cases made use of the ".rhosts" file, which contains trusted hostname/username pairs. In order to have remote commands work correctly on all machines, we had to list both the long and short versions of each hostname in ".rhosts", for exam- ple: spite delaglio spite.niddk.nih.gov delaglio spun delaglio spun.niddk.nih.gov delaglio charybdis delaglio charybdis.niddk.nih.gov delaglio To test that rsh is working correctly, you can try sending a simple remote command to each computer, for instance the ls command to list files: rsh spite ls rsh spun ls rsh charybdis ls If authorization is not established correctly, rsh will respond with the message Permission denied. If the remote command fails in a different way (perhaps with a "core dumped" error message) the next hint may apply. Hint 3. The remote login procedure can't be interactive: some users have log-in procedures which require information to be entered at the keyboard (for instance, terminal type). Since nmrShell uses a non-interactive procedure to execute remote commands, it will fail if the remote log-in requires interactive input. So, the log-in procedure must be adjusted to avoid asking for input when it is run non-interactively. For example, in a ".login" C-shell script, the following lines could be used to enclose interactive commands so that they are not executed by the remote shell: if ($?prompt) then ...interactive commands... endif Hint 4. The programs must exist: the remote computers must have access to the correct versions of nmrPipe and the related programs. You can test this by executing the which command remotely on each machine, as in these commands and their corresponding output: Command: rsh spite which nmrPipe Output: /u/delaglio/bin/nmrPipe Command: rsh spun which nmrPipe Output: /u/delaglio/bin/nmrPipe Command: rsh charybdis which nmrPipe Output: /u/delaglio/bin/sgi/nmrPipe If this doesn't work, verify that a version of NMRPipe software is installed on the remote computer, and that the remote log-in procedure includes the software in its search path. Hint 5. The data and directories must exist: the data and directories must be available and accessible. This means that the data directories will have to be NFS-mounted on the network. In these cases, it is most convenient if a given directory is mounted with the exact same path name on every computer. If this is not the case, the server list file can be adjusted so that the directory to use for each remote computer is specified explicitly. You can confirm that data is available by trying to list it via remote shell. For instance, to confirm that data in directory "/spite2/frankie" is available on remote machines, commands like the following can be used: rsh spite ls /spite2/frankie rsh spun ls /spite2/frankie rsh charybdis ls /spite2/frankie Hint 6. Perform a simple test with nmrShell: before proceed- ing with an NMR processing scheme, try using nmrShell with a much simpler shell-script, just to confirm that it can exe- cute remote commands correctly, configure the terminal screen, etc. A good choice would be a shell-script which lists files. We made a script called "ls.com": #!/bin/csh ls -la and executed it this way: nmrShell -par pipe.net -sh ls.com If nmrShell fails to execute its shell-script, first try invoking it with an explicit path name; this may avoid any problems due to mismatches between actual and symbolic link names for directories on different machines: nmrShell -par pipe.net -sh ls.com -path /spite2/frankie If this doesn't work, and no useful diagnostic messages are produced, try adding the -log option, and then examine the resulting log files. If the terminal doesn't seem to be configured correctly, check the terminal configuration and the TERM environment variable. You may have to use UNIX commands like reset or resize to configure the terminal properly. Hint 7. Killing nmrShell may not kill remote processes: the remote processes may continue running, or they may stay in a suspended state. You can try to kill the remote processes with the server list option of the killShell program, for example: killShell xyz.com -par pipe.net OPTIONS -par serverListName This required argument specifies the name of the server list file, which lists the hostnames of the computers of interest, one per line. The format of a line in the file is: hostName relativeSpeed [remoteCommand] Blank lines and lines beginning with the "#" are ignored. The relativeSpeed field of the entry is not used by nmrShell, but it must be present for con- sistency with other programs. The optional remoteCom- mand is used to override the default command used on the remote machine; this option can be used to accommo- date different directory names on each on each com- puter, or to execute a command on a specific CPU of a multi-processor machine. If the remoteCommand argument begins with the "!" character, it will be executed directly, otherwise it will be executed via rsh. -sh scriptName This required argument specifies the name of the shell-script to be executed on the remote computers in the server list. The implies that the shell-script is available in the appropriate directory of every remote computer. It also implies that all data, programs, and commands required by the shell-script are available. If this shell-script is an NMRPipe processing scheme, it should be identified as a C-shell by including "#!/bin/csh" as the first line of the file. -path remotePath This option is used to override the default directory which will be used on the remote computers. By default, the directory name where nmrShell is invoked will be used as the directory name for the remote com- mand. -log When this option is included, status messages from each computer will be written to a corresponding text file as well as to the screen. The text file names have the form "hostName.cpuID.log", for example "charybdis.2.log". This option is useful for tracing problems with remote command execution. -to uSecDelay This option adjusts the time delay used to read and display status messages from the remote computers. It is intended primarily for development and testing. The following is an example of 3D processing with Linear Prediction (LP) in two of the dimensions. It is suitable for both single-processor computers and multi-CPU machines. Note that the "-cpu $1" options can safely be left out if no multi-processor machines are involved. #!/bin/csh # xyz.lp.com: Four-Part Parallel Linear Prediction # Invoked by "nmrShell" with the Processor # ID Number as Argument 1 ($1). # Remove files used to synchronize parts 1, 2, and 3: # waitFor -par pipe.net -init -ext part1 -cpu $1 -verb waitFor -par pipe.net -init -ext part2 -cpu $1 -verb waitFor -par pipe.net -init -ext part3 -cpu $1 -verb # Execute Part 1 of the scheme: X-Axis Processing # Wait for all computers to finish part 1. # xyz2pipe \ -in fid/test%03d.fid -x -verb -par pipe.net -cpu $1 \ | nmrPipe -fn SOL -head 1 -mir \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 2 -c 0.5 \ | nmrPipe -fn ZF \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 43 -p1 0.0 \ | nmrPipe -fn EXT -left -di -sw \ | pipe2xyz -out ft/test%03d.dat -x waitFor -par pipe.net -ext part1 -cpu $1 -verb # Execute Part 2 of the scheme: Z-Axis Processing # Wait for all computers to finish part 2: # xyz2pipe \ -in ft/test%03d.dat -z -verb -par pipe.net -cpu $1 \ | nmrPipe -fn SP -off 0.5 -end 0.95 -pow 1 -c 0.5 \ | nmrPipe -fn ZF -auto \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 0.0 -p1 0.0 -di \ | pipe2xyz -out ft/test%03d.ft3 -z waitFor -par pipe.net -ext part2 -cpu $1 -verb # Execute Part 3 of the scheme: Y-Axis LP Processing # Wait for all computers to finish part 3: # xyz2pipe \ -in ft/test%03d.ft3 -y -verb -par pipe.net -cpu $1 \ | nmrPipe -fn LP -fb \ | nmrPipe -fn SP -off 0.5 -end 0.98 -pow 1 -c 0.5 \ | nmrPipe -fn ZF -auto \ | nmrPipe -fn FT \ | nmrPipe -fn PS -p0 -135 -p1 180 -di \ | pipe2xyz -out ft/test%03d.dat -y waitFor -par pipe.net -ext part3 -cpu $1 -verb # Execute Part 4 of the scheme: Z-Axis LP Re-Processing # xyz2pipe \ -in ft/test%03d.dat -z -verb -par pipe.net -cpu $1 \ | nmrPipe -fn HT -auto \ | nmrPipe -fn PS -inv -hdr \ | nmrPipe -fn FT -inv \ | nmrPipe -fn ZF -inv \ | nmrPipe -fn SP -inv -hdr \ | nmrPipe -fn LP -fb \ | nmrPipe -fn SP -off 0.5 -end 0.99 -pow 1 -c 0.5 \ | nmrPipe -fn ZF -auto \ | nmrPipe -fn FT \ | nmrPipe -fn PS -hdr -di \ | pipe2xyz -out ft/test%03d.ft3 -z SEE ALSO getwd(3), killShell(1), nmrPipe(1), rsh(1C), which(1), popen(3), xyz2pipe(1) BUGS nmrShell may not always configure or restore the terminal screen properly, especially if the terminal type environment is not established correctly. The nmrShell terminal display is incorrect if the screen is too small to support enough sub-windows for each computer in the server list; at least four lines per computer are required. Parallel processing options are not yet supported by conver- sion programs such as bruk2pipe and var2pipe. Parallel schemes cannot make use of the nmrPipe in-memory 3D transpose function ZTP.. DIAGNOSTICS If remote commands fail, nmrShell may not be able to display diagnostic messages on the screen. In these cases, try using the -log option, and look for diagnostic messages in the log files instead. LEGAL NOTICE This program and its related software is provided "as is". The NIH, the Laboratory of Chemical Physics, NIDDK, and the authors make no warranties, either express or implied, as to any matter whatsoever with respect to the software. In particular, any and all warranties of merchantability and fitness for any particular purpose are expressly excluded. In no event will the NIH, the Labora- tory of Chemical Physics, NIDDK, or the authors be liable for any loss of profits, any incidental, special, exem- plary, or consequential damages of any nature whatsoever (including without limitation, loss of use or other com- mercial or research loss) arising out of or relating to the use or performance of the software.