GPU-accelerated micromagnetism.
Paper on the design and verification of MuMax3: http://scitation.aip.org/content/aip/journal/adva/4/10/10.1063/1.4899186
👉 Pre-compiled binaries, examples, and documentation are available on the mumax³ homepage.
Documentation of several tools, like mumax3-convert, is available here.
Contributions are gratefully accepted. To contribute code, fork our GitHub repo and send a pull request.
Consider downloading a pre-compiled mumax³ binary.
If you want to compile nevertheless, 4 essential components will be required to build mumax³: an NVIDIA driver, Go, CUDA (≤12.9) and C.
- If they are not yet present on your system: install them as detailed below.
- If they are already installed: check if they work correctly by running the check for each component written below.
Click on the arrows below to expand the installation instructions:
These instructions were made for Windows 10 and Ubuntu 22.04 (but should be applicable to all Debian systems). Your mileage may vary.
Install an NVIDIA driver
-
Windows: Find a suitable driver here.
-
Linux: Install the NVIDIA proprietary driver.
Troubleshooting Linux →click here←
If the following error occurs, proceed as follows:nvidia-smi has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running
-
Check for existing NVIDIA drivers.
- Run
dpkg -l | grep nvidiato see if any NVIDIA drivers are installed. - If it shows some drivers, you might want to uninstall them before proceeding with the clean installation:
sudo apt-get --purge remove '*nvidia*'
- Run
-
Update system packages. Make sure your system is up to date with
sudo apt updateandsudo apt upgrade. -
(Optional but recommended:) Add the official NVIDIA PPA to ensure you have access to the latest NVIDIA drivers with
sudo add-apt-repository ppa:graphics-drivers/ppaandsudo apt update. -
Install the recommended driver. Ubuntu can automatically detect and recommend the right NVIDIA driver for your system with the command
ubuntu-drivers devices. This will list the available drivers for your GPU and mark the recommended one.
To install the recommended NVIDIA driver, usesudo apt install nvidia-driver-<version>(replace<version>with the number of the recommended driver e.g., nvidia-driver-535) -
Reboot your system with
sudo rebootto apply the changes. -
Verify the installation with
nvidia-smi. This returns something like this, which shows you the driver version in the top center:
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 552.22 Driver Version: 552.22 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 3080 ... WDDM | 00000000:01:00.0 Off | N/A | | N/A 53C P8 9W / 115W | 257MiB / 8192MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 28420 C+G ...Programs\Microsoft VS Code\Code.exe N/A | | 0 N/A N/A 31888 C+G ...les\Microsoft OneDrive\OneDrive.exe N/A | +-----------------------------------------------------------------------------------------+ -
-
WSL: Follow the instructions and troubleshooting for Linux above. If you encounter issues/errors during that process, see the troubleshooting section below:
Troubleshooting WSL →click here←
When using Windows Subsystem for Linux, your graphics card might not be recognized. If an error occurs after running the command:-
If
ubuntu-drivers devicesthrows the errorCommand 'ubuntu-drivers' not found: run the commandsudo apt install ubuntu-drivers-common.ERROR:root:aplay command not found: run the commandsudo apt install alsa-utils.
-
If
sudo apt install nvidia-driver-<version>throws the errorE: Unable to locate package nvidia-driver-<version>: run the commandssudo apt install software-properties-gtk sudo add-apt-repository universe sudo add-apt-repository multiverse sudo apt update sudo apt install nvidia-driver-<version>
-
If
nvidia-smithrows the errornvidia: command not found: the controller is probably not using the correct interface (sudo lshw -c displayshould show NVIDIA). To solve this, follow these steps. If adocker: permission deniederror occurs: close and re-open WSL.
-
👉 Check NVIDIA driver installation with: nvidia-smi
Install CUDA ≤12.9
- Windows: Download an installer from the CUDA website.
⚠️ To be on the safe side, it is recommended to install CUDA in a directory without spaces, likeC:\cuda. Spaces should not cause issues when runningdeploy_windows.ps1, but this is not guaranteed.
- Linux: Use
sudo apt-get install nvidia-cuda-toolkit, or download an installer.-
Pick the default installation path. If this is not
usr/local/cuda/, create a symlink to that path. -
Match the version shown in your driver (see top right in
nvidia-smioutput). -
When prompted what to install: do not install the driver again, only the CUDA toolkit.
-
Add the CUDA
binandlib64paths to yourPATHandLD_LIBRARY_PATHby adding the following lines at the end of your shell profile file (usually.bashrcfor Bash):export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
Apply the changes with
source ~/.bashrc.
-
👉 Check CUDA installation with: nvcc --version
Install Go
- Download and install from the Go website.
- The
GOPATHenvironment variable should have been set automatically (note: the folder it points to probably doesn't exist yet).
Check withgo env GOPATH.Click here to set
GOPATHmanually if it does not exist.-
On Windows:
%USERPROFILE%/gois often used, e.g.C:/Users/<name>/go. See this guide if you are unfamiliar with environment variables. -
On Linux:
~/gois often used. Open or create the~/.bashrcfile and add the following lines.export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
After editing the file, apply the changes by running
source ~/.bashrc.
-
👉 Check Go installation with: go version
Install a C compiler
- Linux:
sudo apt-get install gcc⚠️ each CUDA version has a maximum supportedgccversion. This StackOverflow answer lists the maximum supportedgccversion for each CUDA version. If necessary, usesudo apt-get install gcc-<min_version>instead, with the appropriate<min_version>.
- Windows:
- CUDA does not support the
gcccompiler on Windows, so download and install Visual Studio with the "Desktop development with C++" workload. After installing, check if the path tocl.exewas added to yourPATHenvironment variable (i.e., check whetherwhere cl.exereturns an appropriate path likeC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64). If not, add it manually. - To compile Go, on the other hand,
gccis needed. Usually this is included in the Go installation, but if not it can be downloaded and installed from w64devkit.
- CUDA does not support the
👉 Check C installation with: gcc --version on Linux and where.exe cl.exe on Windows.
(Optional: install git to contribute to mumax³)
If you don't have a GitHub profile yet, make one here.
- Windows: Download and install.
- Linux:
sudo apt install git - Set up your username in Git and setup an SSH key for your GitHub account.
👉 Check Git installation with: git –-version
(Optional: install gnuplot for pretty graphs)
- Windows: Download and install.
- Linux:
sudo apt-get install gnuplot
👉 Check gnuplot installation with: gnuplot -V
With these tools installed, you can build mumax³ yourself.
-
Within your
GOPATHfolder, create the subfolderssrc/github.com/mumax. -
Clone the GitHub repository by running
git clone https://github.com/mumax/3.gitin that newly createdmumaxfolder.- If you don't have git, you can manually fetch the source here and unzip it into
$GOPATH/src/github.com/mumax/3.
- If you don't have git, you can manually fetch the source here and unzip it into
-
Initialize a Go module by moving to the newly created folder with
cd 3/and runninggo mod init github.com/mumax/3, followed bygo mod tidy. -
Query the compute capability of your GPU using the command
nvidia-smi --query-gpu=compute_cap --format=csv. Based on this, set the environment variableCUDA_CC: if your compute capability is e.g., 8.9, then set the valueCUDA_CC=89. -
You can now compile mumax³ ...
-
... on Linux:
make realclean make
Your binary is now at
$GOPATH/bin/mumax3.Note: each CUDA version has a maximum supported GCC version. If your default GCC compiler is too recent, you can use a different GCC compiler by instead running
make NVCC_CCBIN=<path_to_gcc>where<path_to_gcc>is a less recent GCC. Check the version compatibility here. Alternatively, setting theNVCC_CCBINenvironment variable achieves the same thing, allowing you to runmakeas usual. -
... on Windows: The
Makefiles may experience issues with whitespaces. Instead, we recommend to use thedeploy/deploy_windows.ps1script: this generates the Windows executables for the mumax³ download page, but can also be used to build a single mumax³ executable for yourself by making the following adjustments:- Change the
$VS2022variable to point to your Visual Studio executable. If you wish to compile for CUDA versions below v11.6, also set$VS2017. Example: ifwhere.exe cl.exereturnsfoo\bar\cl.exe, then set$VS2022 = "foo\bar". - (Not strictly necessary, but check this anyway) Throughout the file there are several
switch ( $CUDA_VERSION )blocks. If these do not address your installed CUDA version, add your version. Consult nearby comments when in doubt.
Now you can compile mumax³ by opening Powershell in the
/deploydirectory and running./deploy_windows.ps1 -CUDA_VERSIONS <your_cuda_version> -CUDA_CC <your_compute_capability>
where e.g.
<your_cuda_version>is12.6and<your_compute_capability>is86, if you have installed CUDA v12.6 and your GPU's compute capability is 8.6.Your executable will be created in the
deploy/builddirectory. - Change the
-
-
Check installation with:
which mumax3on Linux orwhere.exe mumax3.exeon Windows, followed bymumax3 -test.Troubleshooting:
This usually means that thecuda.horcurand.hnot found: →click here←CGO_CFLAGSandCGO_LDFLAGSenvironment variables are not found or point to the wrong path. To fix this, either define them in the script you are using to build mumax³, or define them in the terminal before running the script.-
On Windows: say your CUDA is installed in
%CUDA_PATH%(e.g.C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1), then run these two lines in Powershell before runningdeploy_windows.ps1:$env:CGO_CFLAGS = '-I "%CUDA_PATH%\include"' $env:CGO_LDFLAGS = '-L "%CUDA_PATH%\lib\x64"'
Troubleshooting: `mumax3.exe` is not generated: →click here←
If, during the build process of mumax³, everything runs smoothly until you get the error that the
mumax3.exeexecutable can not be found, try setting theCGO_ENABLEDenvironment variable to1in your build script.Troubleshooting: `vcvars64.bat` not found or could not initialise VC environment: →click here←
CUDA requires Visual Studio to compile, which tries to set various environment variables. If Visual Studio fails to do so automatically, you can open a new shell, manually run the
vcvars64.batfile there (the error message should contain the path to this Batch file), and then compile mumax using that shell.Troubleshooting: Windows errors not mentioned above: →click here←
If you encounter an error during compilation on Windows, other than those mentioned above, you may try to run the compilation commands in the "Developer Powershell for VS 20XX" that should have been automatically installed alongside MSVC. Sometimes this special shell solves conflicts between MSVC and CUDA, sometimes not.
-