High-Performance Computing at the NIH
GitHub YouTube @nih_hpc RSS Feed
GAUSS on Biowulf & Helix

gaussThe GAUSS Mathematical and Statistical System is a fast matrix programming language widely used by scientists, engineers, statisticians, biometricians, econometricians, and financial analysts. Designed for computationally intensive tasks, the GAUSS system is ideally suited for the researcher who does not have the time required to develop programs in C or FORTRAN but finds that most statistical or mathematical "packages" are not flexible or powerful enough to perform complicated analysis or to work on large problems.

The GAUSS executables are not multithreaded or parallel. The advantage of using GAUSS on Biowulf would be to run many GAUSS jobs simultaneously, i.e. a 'swarm' of single-threaded jobs.

There are 2 versions of GAUSS available, as shown in the table below. There are a limited number of licenses for GAUSS 10, so you will need to use GAUSS 3.2 to run swarm jobs.

VersionTo useLicensesArchitectureCan be run on
Gauss 10module load gauss/102 64-bit Helix or
any Biowulf node
Gauss 3.2module load gauss/3.2unlimited 32-bit Helix or
any Biowulf node

On Helix

[user@helix]$ module avail gauss

------------------- /usr/local/lmod/modulefiles -----------------------
gauss/10(F)         gauss/3.2                 
[user@helix]$ 
[user@helix]$ module load gauss/3.2

[user@helix]$ module list
Currently Loaded Modulefiles:
  1) gauss/3.2

Start up GAUSS by typing 'tgauss [flag] program'. The following example creates a simple GAUSS program and executes it. (user input in bold).

[user@helix ~]$ cat > doloop.inp
format /rdn 1,0; 
space = "      "; 
comma = ","; 
i = 1;
do while i <= 4; 
j = 1;
do while j < = 3; print space i comma j;; 
j = j+1;
endo; 
i = i+1; 
print;
endo;
[Ctrl-D]

[user@helix ~]$ tgauss doloop.inp

GAUSS 10.0.3 (Dec 22 2009, 1346) 64-bit
(C)Copyright 1984-2009 Aptech Systems, Inc.
All Rights Reserved Worldwide.

        1,1     1,2     1,3
        2,1     2,2     2,3
        3,1     3,2     3,3
        4,1     4,2     4,3

Running multithreaded GAUSS 10 jobs

There are several threading programs that can be used to multithread (i.e. run on multiple processors) specific parts of your programs. These are described here . These threading functions can be used to utilize all the processors on an allocated node. It is important to know exactly how many threads you are executing and match this number to the available processors on the node, so that you neither overload the node (very inefficient) or waste processors.

Since there are only 2 GAUSS 10 licenses, multithreaded GAUSS is the only good reason to run GAUSS 10 on Biowulf. For all other uses of GAUSS 10, it is probably simpler to run Gauss 10 on Helix

For example, the following sample code from the GAUSS 10 User Guide defines 4 concurrent threads:

ThreadStat n = m'm;    //Thread 1
ThreadBegin;           //Thread 2  
y = x'x;
z = y'y; 
ThreadEnd;
ThreadBegin;          //Thread 3
q = r'r; 
r = q'q;
ThreadEnd; 
ThreadStat p = o'o;   //Thread 4

Write a batch script along the following lines:

#!/bin/bash
# ---- this file is called myjobscript -------

module load gauss/10
cd mydir
tgauss multi.inp

This job can be submitted with:

sbatch  myjobscript
This command will submit the job to 2 cores and 4 GB of memory. If you need more than the default 4 GB, use
sbatch --mem=#g  jobscript

Running a single GAUSS 3.2 batch job

Create a batch input file, e.g. /home/username/gaussrun. Example:

#!/bin/tcsh

module load gauss/3.2
cd mydir
gauss -v -b gauss.in > gauss.out

Submit this job with:
sbatch  jobscript

Running a swarm of GAUSS 3.2 jobs

The swarm program is designed to submit a group of commands to the Biowulf cluster. Each command is represented by a single line in the swarm command file that you creare, and runs as a separate batch job. See the swarm page for more information.

Create a swarm command file, say, cmdfile, with each line containing a single gauss run. Example:

cd /home/user/mydir; gauss -v -b gauss1.in > gauss1.out
cd /home/user/mydir; gauss -v -b gauss2.in > gauss2.out
cd /home/user/mydir; gauss -v -b gauss3.in > gauss3.out
cd /home/user/mydir; gauss -v -b gauss4.in > gauss4.out
cd /home/user/mydir; gauss -v -b gauss5.in > gauss5.out
If each Gauss process requires less than 4 GB of memory, submit this to the batch system with the command:
swarm -f cmdfile --module gauss/3.2

If each Gauss process requires more than 4 GB of memory, use

swarm -g # -f cmdfile
where '#' is the number of Gigabytes of memory required by each Gauss process.

Running GAUSS interactively on Biowulf

If you really want to run interactively, you can allocate a node for interactive use. Once the node is allocated, you can type commands directly on the command-line. Example:

biowulf$ sinteractive
sinteractive
salloc.exe: Granted job allocation 138039


[cn0005 ~]$ module load gauss/3.2

[cn0005 ~]$cd mydir

[cn0005 ~]$gauss -v -b gauss.in > gauss.out

[cn0005 ~]$ exit
logout

salloc.exe: Relinquishing job allocation 138039
salloc.exe: Job allocation 138039 has been revoked.

biowulf$ 
GAUSS Documentation