Release Notes for Monte Carlo eXtreme v2020 (1.8.0)

Code name: Furious Fermion, released on September 6, 2020

Click this link to download MCX v2020

Acknowledgement: This software release is made possible with the funding support from the NIH/NIGMS under grant R01-GM114365.

1. Introduction
2. About this release
3. What's new compared to v2019.4
4. System requirements
5. Reference

1. Introduction

Monte Carlo eXtreme, or MCX, is an ultra-fast Monte Carlo light transport simulator for arbitrary 3D random media. It uses Graphics Processing Units (GPU) to run thousands of photons simultaneously, and is typically hundreds or thousands times faster than a single-threaded CPU-based simulation.

This release fully supports all major NVIDIA GPU architectures ranging from Fermi, Kepler, Maxwell, Pascal, and Volta, as well as future generations. The speed comparisons between different generations of NVIDIA GPUs can be found at

2. About this release

MCX v2020 represents a new milestone towards the development of a fast, versatile and feature-rich open-source Monte Carlo 3D photon simulator. It is packed with numerous improvements in both functionality and stability. We want to specifically highlight the below major additions:

  • Built-in benchmarks (--bench) for easy testing and adoption by new users
  • Transition to JSON/JNIfTI input/output files (-F jnii, -F bnii, --zip lzma) for easy data sharing
  • Exporting simulation as JSON with binary volume data (--dumpjson)
  • All-in-one Windows installer for MCXStudio/MCX/MMC/MCXCL, support Winget installation
  • Automated code building, testing and continuous integration via Travis-CI
  • User can modify JSON input data using --json in command line
  • Unit testing script for verifying performance (mcx/test/
  • Standalone Speed Contest Perl script: mcx/speedcontest/
  • New matlab functions: mcxcreate, mcxplotshapes
  • CMake based compilation and Visual Studio support
  • Printing progress bar is working again on Windows
  • Fixed a critical bug when saving diffuse reflectance using a single pattern source
  • Add manpage, add command line flag, add axis ticks in mcxshow/mcxviewer GUI for visualization, showing volume in x/y/z planes
  • Accelerating simulation by 1.6 fold on Pascal and Maxwell GPUs
  • An experimental python module (pymcx) contributed by Maxime Baillot

Between 2019 and 2020, four new journal papers have been published as the result of this project. Please see the full list at

3. What's new compared to v2019.4

Compared to the previous release (version v2019.4, released in April 2019), MCX v2020 gains the following new features and bug fixes:

A detailed list of updates is summarized below (key features marked with "*"):

*2020-08-29*[6eb9596] add mcxcreate.m, add mcxplotshapes.m to render json shapes
*2020-08-27 [63e5a5f] handle det radii less than or equal to 0.5, fix #101
*2020-08-24 [6f11857] add command line option cheatsheet
*2020-08-24 [cea663b] test cmake in travis
*2020-08-24 [782b4a3] massive update of documentation
*2020-08-20 [e8e6b58] print an explicit messgae if error 30 is found
*2020-08-19*[883f61b] restore windows progress bar support, disabled in @ae2d60e45
*2020-08-17 [c47de01] allow running testing script on machines without nvidia gpu
*2020-08-16 [0c25958] add more tests for various mcx options
*2020-08-16 [ff2f68f] add sphshell benchmark - see GPU MMC paper
*2020-08-15 [2afab4a] test if media prop count is less than max label
*2020-08-15 [2d71eb7] accept array as Domain.Media json input
*2020-08-15*[433df1f] accept json modifier via --json for easy testing
*2020-08-14 [09adbd0] support --bc or cfg.bc to set an entire bounding face as detector
*2020-08-11*[e095dbb] speed up by 1.6x on 1080Ti by restoring source template for pencil beam only
*2020-08-11 [a220cc2] autoblock size no less than 64, speed up on Turing GPU by doubling threads
*2020-08-04 [71d4196] fix incorrect detpt column when savedetflag/issaveexit are both set
*2020-08-04 [20c596a] retrieve energy tot and abs regardless of isnormalized
*2020-08-03*[30e01a1] add standalone script to submit to mcx speed contest
*2020-07-31 [d9a5953] avoid autoblock is 0 when driver fails, close #99
*2020-07-28 [daa9d56] fix inaccurate core count on Volta, Turing and Pascal
*2020-07-25 [37793ae] fix -b 0 -B rrrrrr crash, thanks to @ShijieYan
*2020-07-22*[f844fe8] add automated building script via travis-ci
*2020-07-22*[cbf0225] add unit testing script
*2020-07-09 [5b038a7] add winget manifest
*2020-07-04*[4bda593] inno windows installer
*2020-07-02 [38529a7] accept -f in mcxshow and mcxviewer
*2020-07-02 [34ecf5f] add glscene directly to the source code
*2020-07-01*[f1828d3] add manpage for mcx
*2020-06-29 [cd4acb8] visual studio project file updated
*2020-06-29 [b22025d] update vs project file
*2020-06-28 [71bedc5] add benchmark options, add jnii/bnii output formats
*2020-05-02 [e7ce8f7] compiles lzma on windows, #94
*2020-05-02*[e56fa2b] add UBJ support, output .bnii files, close #95
*2020-05-01 [ed80ad5] now support lzma and lzip compression
*2020-05-01 [f136bc9] upgrade all built-in binary files to JData formatted JSON files #94
*2020-04-29 [0d9c162] save detected photon data in JSON/JData format, close #94
*2020-04-25 [045a3de] update json schema
*2020-04-25 [e8aae66] initialize gsrcpattern
*2020-04-23*[8086175] add built-in colini27 data,add --dumpjson, add -F jnii output format
*2020-04-19*[da73b8d] add mcx built in benchmarks
*2020-03-21*[b8fb79a] plot data in x/y/z slices,add axis labels and grid
*2020-03-20 [d7e6203] add axis lable and scaling to volume viewer
*2020-03-14*[b91dc5a] update mcxstudio gui to support gpu mmc
*2020-02-18*[8c37911] adding pymcx written by Maxime Baillot as submodule
*2020-02-08 [ba78df5] add template to disable continuous medium support, close #89
*2020-01-28 [b7c1982] speed up cone beam photon launch, fix accuracy, close #86
*2020-01-25*[984b2a0] initial support for hybrid optical properties: tissue type label combined with continous optical properties
*2019-11-19 [1c07b16] scale partial-path when getting det photon time and weight, close #83
*2019-08-08 [0bdbef6] allow to browse file folder on windows
*2019-07-26*[8a341ee] update mcxstudio to add the new flags
*2019-07-23 [e3b53dc] add 2d sample script
*2019-07-22*[c4baa84] output fluence/flux in replay, backport changes from mcxcl
*2019-05-24 [02efc62] bug fix for continuous varying media patch
Pre-compiled MCX are provided for Windows (64 bit), Linux (64bit) and Mac OS (64bit). In the case of MCXLAB, mex files for both Matlab and Octave on these platforms are provided. All binaries have been tested on Kepler, Maxwell, Pascal, Volta, and Turing GPUs.

All released binaries are compiled and linked with CUDA 8 (which is "embedded" into the binary) due to faster speed. All pre-compiled binaries are meant to be executable out-of-box.

The provided binaries require a Kepler (Compute Capability 3.0) or newer GPU. If you have an older GPU (CC 1.0 or 2.0), you will have to download MCX's source code, and replace sm_30 in mcx/src/Makefile by sm_20 and recompile using CUDA 8.0 or earlier.

The detailed change logs can be found in the ChangeLog and Github commit history pages.

4. System requirements

To install MCX version v2020, you need

  • a CUDA-enabled graphics card made by NVIDIA (essentially all GPUs made by NVIDIA today)
  • the latest graphics driver for your graphics card

In this release, all precompiled binaries, including both mcx executables and mcxlab mex files, have built-in CUDA run-time libraries via static linking. Therefore, downloading/setting CUDA toolkit and the run-time librarie files (cudart.dll/ are no longer needed.

However, if you run into CUDA errors, please first try to update your NVIDIA graphics driver to the latest version

If the latest graphics driver still can not solve the problem, please download the "developer driver" for your GPU. You may download the developer driver as part of the CUDA Toolkit installation package.

5. Reference

Powered by Habitat