Mathematica¶
Description and Overview¶
Mathematica is a fully integrated environment for technical computing. It performs symbolic manipulation of equations, integrals, differential equations, and most other mathematical expressions. Numeric results can be evaluated as well.
How to Use Mathematica¶
Running in the Notebook Interface¶
To use the graphical interface to Mathematica, you will need to connect to a NERSC machine with a graphical environment. You can do so with X11, but performance will be much better if you use NoMachine (NX). In NoMachine, you can simply click the Perlmutter button to get a login shell that has graphics enabled. In X11, you can log in with -Y.
mylaptop$ ssh -Y perlmutter.nersc.gov
Tip
We highly recommend the use of NX to invoke a graphical session and run the Mathematica notebook interface.
Next, you will need to load the Mathematica module. To use the default version of Mathematica, use
nersc$ module load mathematica
To start up Mathematica once the module is loaded, you can simply type
nersc$ mathematica
You should see the Mathematica logo ("Spikey") appear, followed by the application interface.
Mathematica Licensing¶
NERSC's Mathematica licenses are for a limited number of seats. Once you are finished using Mathematica, please be sure you disconnect your terminal session so that your seat becomes available to the next user. If you use NX, remember to exit Mathematica within your NX session before closing, as NX will otherwise keep the session alive, preventing other users from launching Mathematica.
When starting up a new Mathematica session, check to be sure that you don't already have an instance of Mathematica running. The most common issue with Mathematica licensing at NERSC is that another user is inadvertently using multiple seats.
Running Mathematica Scripts¶
To run Mathematica scripts, you can do so in interactive mode or in batch mode. Both approaches require the use of the job scheduler.
To run in interactive mode, use salloc
to obtain access to a compute node. To avoid using multiple license seats at once (always a good thing), specify a single node and a single task per node. If you want to take advantage of parallelism in your script, you can specify more than one CPU per task. An allocation to run on four cores in the interactive QOS would be obtained with a command like the following:
nersc$ salloc -N 1 -n 1 -c 4 -q interactive -C cpu -t 00:30:00
Running the script is then as simple as
nersc$ srun ./mymathscript.m
To run in batch mode, you will need to write a Slurm batch script and then use sbatch
to put your job into the queue. An example batch script that makes 8 cores available to your script follows.
#!/bin/bash
#SBATCH -q shared
#SBATCH -t 00:30:00
#SBATCH -n 1
#SBATCH -c 8
#SBATCH -C cpu
module load mathematica
srun ./myscript.m
If you want to take advantage of parallelism in Mathematica, you can use the application's built-in parallel commands. (See the Wolfram web site for more about parallel commands in Mathematica.) Following is an example script that works on Perlmutter. With Perlmutter, you can use up to 128 cores. Be sure the first line of your script points to the correct directory for the machine on which you're running and your desired version of Mathematica.
#!/global/common/software/nersc/pm-2021q4/sw/mathematica/13.0.1/Executables/wolframscript -script
(* Limit Mathematica to requested resources *)
Unprotect[$ProcessorCount]; $ProcessorCount = 8;
(* calculate some Mersenne primes on one core, then on many *)
MersennePrimeQ[n_Integer] := PrimeQ[2^n - 1]
DistributeDefinitions[MersennePrimeQ]
slow = AbsoluteTiming[Select[Range[5000], MersennePrimeQ]]
WriteString[$Output, slow]
fast = AbsoluteTiming[Parallelize[Select[Range[5000], MersennePrimeQ]]]
WriteString[$Output, fast]
Documentation¶
Extensive on-line documentation is available at the Wolfram web site.