NMRPipe processing on multiple CPUs


For 4D (and even some 3D) sets it takes a crazy long time to process data, particularly if you are using linear prediction. 

Processing on multiple processors (if you have a cluster like MOSIX or a dual processor PC) can considerably reduce this time.

To do this you will need three files:
1) a file (e.g. called main.com) containing the name of your processing script  and the processor number to run it on: e.g. for 3 processors and a processing script called 4d.com, my file should read:
        ./4d.com 0 &
        ./4d.com 1 &
        ./4d.com 2 &

2) a file (called pipe.net) with the name of the computer and a number - the number is arbirtary, but the ratios should reflect the processor speeds. In the case below I am using lindau, lille and liverpool. Since they are the same speed they all have the same name.

    lille    100
    lindau    100
    liverpool 100

3) the nmrPipe processing script (e.g. 4d.com in this case). This is the same as normal. However, the bold type indicates additions required for processing on multiple CPUs:






#!/bin/csh
#4d.com


xyz2pipe -in fid/test%02d%03d.fid -x -verb  -par pipe.net -cpu $1 \
| nmrPipe -fn EXT -time                             \
| nmrPipe -fn SOL                             \
| nmrPipe -fn SP  -off 0.35 -end 0.95 -pow 2 -c 0.5 \
| nmrPipe -fn ZF  -auto                         \
| nmrPipe -fn FT                                    \
| nmrPipe -fn PS  -p0 14 -p1 0.0 -di               \
| nmrPipe -fn EXT -x1 10.3ppm -xn 6.0ppm -sw                                    \
| nmrPipe -fn TP                                               \
#| nmrPipe -fn LP -fb                                           \
| nmrPipe -fn SP  -off 0.35 -end 0.98 -pow 2  -c 0.5 \
| nmrPipe -fn ZF  -auto                         \
| nmrPipe -fn FT -auto                                    \
| nmrPipe -fn PS  -p0 0 -p1 0 -di               \
| pipe2xyz -out ft/c13c13noe%02d%03d.ft2 -y -ov



waitFor -par pipe.net -ext part1 -cpu $1




xyz2pipe -in ft/c13c13noe%02d%03d.ft2 -z -verb  -par pipe.net -cpu $1  \
| nmrPipe -fn LP -fb                                           \
| nmrPipe -fn SP -off 0.4  -end 0.95 -pow 2  -c 0.5  \
| nmrPipe -fn ZF -auto                           \
| nmrPipe -fn FT                                     \
| nmrPipe -fn PS  -p0 45  -p1 0  -di             \
| nmrPipe -fn REV                                              \
| nmrPipe -fn CS -ls 80 -sw                                              \
| pipe2xyz -out ft/c13c13noe%02d%03d.ft3 -z -ov

waitFor -par pipe.net -ext part1 -cpu $1

#
#
xyz2pipe -in ft/c13c13noe%02d%03d.ft3 -a -verb    -par pipe.net -cpu $1 \
| nmrPipe -fn LP -fb                                           \
| nmrPipe -fn SP -off 0.4 -end 0.95 -pow 2  -c 1.0 \
| nmrPipe -fn ZF -auto                          \
| nmrPipe -fn FT                                   \
| nmrPipe -fn PS  -p0 -115  -p1 180.0  -di            \
| pipe2xyz -out ft/shift%02d%03d.ft4 -a -ov

waitFor -par pipe.net -ext part1 -cpu $1
#




#sleep 3





To run - remember to make your scripts executable and simply execute the file generated in step 1 (main.com in this example).