# Using Mathematica on Savio¶

This document describes how to use Mathematica on the Savio high-performance computing cluster at the University of California, Berkeley.

## Loading Mathematica¶

To load Mathematica into your current software environment on Savio, at any shell prompt, enter:

```
module load mathematica
```

To launch the Mathematica graphical user interface (GUI) from a shell prompt on a login node, a compute node, or the visualization node, enter:

```
mathematica
```

To launch only the Mathematica kernel from a shell prompt, enter:

```
math
```

## Licensing¶

The UC Berkeley Mathematica license makes Mathematica available at no direct cost to all Savio users.

## Running Mathematica notebooks in SLURM batch jobs¶

To submit Mathematica jobs to Savio compute nodes via a SLURM batch script, the Mathematica commands to be executed must be contained in a single .m script. The .m script will then be passed to the `math`

command in an sbatch script.

For more detailed information on using `sbatch`

and job
script files, see Running Your Jobs.

As an example, here is a basic Mathematica script called `math-simple.m`

that computes the sum of A and B:

```
A = Sum[i, {i,1,100}]
B = Mean[{25, 36, 22, 16, 8, 42}]
Answer = A + B
Quit[];
```

This script can be submited to SLURM with an sbatch SLURM shell script (e.g.,`sbatch math-simple.sh`

), which will send the job to a compute node:

```
#!/bin/bash
# Job name:
#SBATCH --job-name=mathematica_example1
#
# Account:
#SBATCH --account=account_name
#
# Partition:
#SBATCH --partition=partition_name
#
# Number of tasks per node:
#SBATCH --ntasks=1
#
# Wall clock limit:
#SBATCH --time=00:5:00
#
## Commands to run:
module load mathematica/11.1
math -run < math-simple.m
```

and the following output is obtained when the job completes:

```
In[1]:=
Out[1]= 5050
In[2]:=
149
Out[2]= ---
6
In[3]:=
30449
Out[3]= -----
6
```

Of course if one uses a partition in which jobs are allocated a full node, this job will still be charged for all the cores on the node even when only one core is used.

## Using Multiple CPUs in Mathematica¶

Mathematica can be run in parallel using the built in `Parallel`

commands or by utilizing the parallel API. Parallel Mathematica jobs
are limited to one node, but can utilize all CPU cores on the
node. Here we request and use eight cores (but would have access to all the cores
on the node):

```
#!/bin/bash
# Job name:
#SBATCH --job-name=mathematica_example2
#
# Account:
#SBATCH --account=account_name
#
# Partition:
#SBATCH --partition=partition_name
#
# Request one node:
#SBATCH --ntasks=1
#
# Number of tasks per node:
#SBATCH --ncpus-per-task=8
#
# Wall clock limit:
#SBATCH --time=00:10:00
#
## Commands to run:
module load mathematica/11.1
math -run < ./sample-parallel.m
```

and the example parallel Mathematica script `sample-parallel.m`

in this case is:

```
(*Limits Mathematica to requested resources*)
Unprotect[$ProcessorCount];$ProcessorCount = 8;
(*Prints the machine name that each kernel is running on*)
Print[ParallelEvaluate[$MachineName]];
(*Prints all Mersenne Prime numbers less than 2000*)
Print[Parallelize[Select[Range[2000],PrimeQ[2^#-1]&]]];
```

The output obtained when the job completes includes:

```
In[1]:=
In[2]:=
In[3]:=
In[4]:=
In[5]:= Launching kernels...
Updating from Wolfram Research server ...
{n0040, n0040, n0040, n0040, n0040, n0040, n0040, n0040}
In[6]:= In[6]:=
In[7]:= {2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279}
In[8]:=
```