Skip to content

Releases: fangq/mcxcl

MCX-CL v2024.2 (Genesis)

15 Mar 22:25
Compare
Choose a tag to compare

Monte Carlo eXtreme (MCX-CL) - OpenCL Edition

v2024.2

Download

What's New

MCX-CL v2024.2 contains both new major features and critical bug fixes.
It is a strongly recommended upgrade for all users.

Specifically, MCX-CL v2024.2 received two important features ported from MCX:

The first feature allows users to define a scattering zenith angle distribution
via a discretized inverse CDF (cumulative distribution function). The
second feature allows users to define the zenith angle distribution for
launching a photon, relative to the source-direction vector, also via
a discretized inverse CDF. In MATLAB/Octave, they can be set as
cfg.invcdf or cfg.angleinvcdf, respectively. We provided ready-to-use
demo scripts in mcxlabcl/examples/demo_mcxlab_phasefun.m and
demo_mcxlab_launchangle.m.

Additionally, in this release, we further improved the simulations when
using Intel CPU or integrated GPU.

Aside from new features, a severe bug was discovered that affects all
pattern and pattern3d simulations that do not use photon-sharing,
please see

fangq/mcx#212

Because of this bug, MCX/MCX-CL in older releases has been simulating squared
pattern/pattern3d data instead of the pattern itself. If your simulation
uses these two source types and you do not use photon-sharing (i.e. simulating
multiple patterns together), please upgrade your MCX/MCX-CL and rerun your
simulations. This bug only affect volumetric fluence/flux outputs; it does not
affect diffuse reflectance outputs or binary patterns.

We also ported a bug fix from fangq/mcx#195 regarding precision loss when
saving diffuse reflectance. Finally, starting from this release, we are providing
native binary packages built for Apple M1/M2 (arm64) processors. All Apple silicon
packages are labeled with macos-arm64 in the package names.

We want to thank Haohui Zhang for reporting a number of critical issues
(fangq/mcx#195 and fangq/mcx#212). ShijieYan and fanyuyen have also contributed
to the bug fixes and improvements.

The detailed updates can be found in the below change log

  • 2024-03-12 [1fc8286] [ci] building binaries on Apple M1 macos-14 runner
  • 2024-03-12 [bf89aff] [ci] update nightly build script
  • 2024-03-08 [4891c72] [ci] remove mcxlabcl gcc warnings
  • 2024-03-05 [80551a4] [bug] remove duplicated and overwritten cfg initialization
  • 2024-03-04 [84c64ec] [bug] fix cuda core count for Ada and Blackwell
  • 2024-03-01 [1e56f5b] [doc] update documentation for v2024.2
  • 2024-03-01 [d4fb874] [ci] bump pmcxcl to v0.1.6
  • 2024-03-01 [0d9f77f] [doc] update neurojson website url to https://neurojson.io
  • 2024-02-29 [580cb27] [format] reformat all MATLAB codes with miss_hit
  • 2024-02-29 [ce1d374] [bug] fixes to pass tests on Intel CPU, AMD GPU and pthread-AMD
  • 2024-02-29 [2f70174] [bug] free ginvcdf and gangleinvcdf buffers
  • 2024-02-29 [9aee8ce] [bug] fix many errors after testing, still need to fix replay
  • 2024-02-29 [b82c856] [feat] add missing demo scripts
  • 2024-02-29 [21e1e72] *[feat] port scattering and launch angle invcdf from fangq/mcx#129 fangq/mcx#13
  • 2024-02-28 [90a28f3] [ci] remove macos-11 as brew fails for octave, Homebrew/brew#16209
  • 2024-02-28 [fbe270b] [pmcxcl] bump pmcxcl to 0.1.4 after fixing fangq/mcx#212
  • 2024-02-27 [4e1ec7f] [ci] fix windows cmake zlib error, fix mac libomp error
  • 2024-02-27 [3d18b78] *[bug] fix critical bug, squaring pattern/pattern3d, fangq/mcx#212
  • 2023-11-10 [26ec422] [ci] install mingw 8.1 for matlab mex build, matlab-actions/setup-matlab#75
  • 2023-11-10 [5a96d02] [ci] set MW_MINGW64_LOC to octave bunded mingw, matlab-actions/setup-matlab#75
  • 2023-10-31 [337c51c] [bug] apply fangq/mcx#195 fix to avoid dref accuracy loss
  • 2023-10-29 [3b01475] further simplify bc handling, #47
  • 2023-10-29 [f816140] latest matlab fails to respect MW_MINGW64_LOC on windows, use R2022a
  • 2023-10-29 [adc0316] simplify boundary condition handling, fix #47
  • 2023-10-07 [04a7155] bump pmcxcl to 0.1.3
  • 2023-10-07 [e930448] remove opencl jit warnings, adjust optlevel order
  • 2023-10-07 [1a30e5c] update copyright dates
  • 2023-10-07 [dcdb117] fix unitinmm double-scaling bug, close #46, close #45
  • 2023-10-03 [fa8dbb2] fix bc mcxlab/pmcxcl memory error,fangq/mcx#191,fangq/mcx#192
  • 2023-09-29 [aa5da8c] fix -F flag overwrite bug
  • 2023-09-26 [507b37b] fix continuous media scaling issue,pmcxcl 0.1.2, fangq/mcx#185
  • 2023-09-26 [378f4eb] fix group load balancing for --optlevel 4
  • 2023-09-24 [07bc297] additional patch to handle half-formatted cont. media

MCX-CL v2023 (Fractal)

07 Oct 20:09
Compare
Choose a tag to compare

Monte Carlo eXtreme (MCX-CL) - OpenCL Edition

v2023

Download

What's New

The last official MCX-CL release was v2020 nearly 3 years ago. Many new
features have been implemented in MCX/MCX-CL since then. Some of the key
updates made to the v2023 version of MCX-CL are listed below

MCX-CL v2023 is significantly faster than the previous releases due to
two major updates. First, on NVIDIA GPUs, an native PTX-based atomic function
is used to gain 40% acceleration on NVIDIA hardware. Secondly, a highly
efficient DDA (Digital Differential Analyzer) ray-marching algorithm was
implemented to MCX and ported to MCX-CL. This also brings up to 40% speedup
in certain benchmarks such as cube60. Moreover, MCX-CL v2023 provides an
official Python mcx module (pmcxcl) to run stream-lined MCX simulations
in Python, offering intuitive mcxlab-like interface. During the past year,
a large effort was committed to build automated continuous integration (CI)
pipelines using Github Action, allowing us to automatically create, test,
and distribute portable packages across Linux, Windows, MacOS OSes, and
MATLAB, GNU Octave and Python environments.

Starting in MCX-CL v2023, we have completed the migration from MCX-specific binary output
formats (.mc2/.mch) to human-readable, extensible and future-proof JSON-based portable
data formats defined by the NeuroJSON project. The NeuroJSON
project aims at simplify scientific data exchange using portable data formats that are
readable, searchable, shareable, can be readily validated and served in the web and cloud.
The NeuroJSON project is also led by MCX's author, Dr. Qianqian Fang, funded by the
US NIH U24-NS124027 grant.

As a result of this migration, the MCX-CL executable's default output formats are now
.jnii for volumetric output data, and .jdat for detected photon/trajectory data.
Both data formats are JSON compatible. Details on how to read/write these data files
can be found below.

In summary, v2023 is packed with exciting updates, including

  • pmcxcl (https://pypi.org/project/pmcxcl/) - a Python interface to mcxcl
  • New continuous integration (CI) and testing system based on Github Action
  • CMake based building environment
  • Use NVIDIA PTX-based float atomicadd to gain >30% speedup
  • Efficient DDA (Digital Differential Analyzer) ray-marching algorithm, gain 40% speedup
  • Fixed loss of accuracy near the source (fangq/mcx#41)
  • Trajectory-only output with debuglevel=T
  • Adopted standardized NeuroJSON JNIfTI and JData formats to ease data exchange

The detailed updates can be found in the below change log

  • 2023-09-13 [0722c09] support ASCII escape code in Windows terminals
  • 2023-08-27 [080855a] fix pmcxcl gpu hanging bug, import utils from pmcx, v0.0.12
  • 2023-08-27 [e342756] port negative pattern support from mcx
  • 2023-08-27 [7a7b456] update debuglevel=R for RNG testing
  • 2023-08-25 [b8095a8] add mcxlab('version'), use MCX_VERSION macro, update msg, port many bug fixes from mcx
  • 2023-08-04 [9b4d76f] fix boundary condition handling, port from mcx
  • 2023-07-30 [50940de] update zmatlib to 0.9.9, use miniz, drop zlib
  • 2023-07-30 [370128a] support compileropt and kernelfile in mcxlab/pmcxcl, fix omp
  • 2023-07-30 [1b28a6d] fix windows gomp multiple linking bug
  • 2023-07-29 [4916939] automatically build and upload Python module via github action
  • 2023-07-28 [09c61b7] bump pmcxcl version, fix windows pypi version check
  • 2023-07-25 [4b5606e] port python module action scripts from mcx
  • 2023-07-25 [f92425e] add initial draft of pmcxcl for Python, add cmake
  • 2023-07-25 [3c2c735] update missing output structs
  • 2023-07-23 [87f3c0e] allow early termination if -d 3 or cfg.issavedet=3 is set
  • 2023-07-23 [c8ccc04] support outputtype=length/l for saving total path lengths per voxel
  • 2023-07-23 [57c3b9b] fix incorrect comment regarding gaussian src, fangq/mcx#165
  • 2023-07-23 [7d5bd16] update mcxplotphoton to mcx
  • 2023-07-23 [1cafd3e] allow to get fluence in non-absorbing medium, fangq/mcx#174
  • 2023-07-23 [8dbc397] update neurojson repo paths
  • 2023-07-23 [0d780bd] support trajectory only output with debuglevel=T
  • 2023-07-23 [e4ade36] fix replay test result matching
  • 2023-07-03 [b57b157] fix macos error
  • 2023-07-02 [99a4486] port zmat ci changes to mcxcl
  • 2023-06-03 [980cc9f] enable doxygen documentation via make doc
  • 2023-05-17 [a25f302] allow device query to handle open-source AMD ocl runtime, fix #44
  • 2023-03-12 [c9697a9] update action from mmc to mcxcl
  • 2023-03-12 [11938a3] copy mmc's merged action script
  • 2023-03-07 [ee7e940] add github action
  • 2022-10-08 [ae7f6e3] update version to 1.0
  • 2022-10-03 [695d2f3] run test on all platforms
  • 2022-10-03 [85beae7] revert debugging information, fix cyclic bc for mac
  • 2022-10-02 [53ec9e7] attempt to fix cyclic bc
  • 2022-10-02 [263abb2] test cyclic bc
  • 2022-10-02 [6c588fa] debug cyclic bc
  • 2022-10-02 [fc481ba] debug cyclic test on the mac
  • 2022-10-02 [8bdc33e] disable zmat and file IO functions in mex/oct targets
  • 2022-10-02 [c6e280a] fix CI error after using voxel index dda
  • 2022-10-01 [24bf948] allow disabling PTX based f32 atomicadd
  • 2022-10-01 [2277f7f] using nvidia native atomicadd for float add 30% speedup
  • 2022-09-29 [f0d0bad] update skipvoid
  • 2022-09-29 [b3d94d2] update to match mcx flipdir use
  • 2022-09-23 [1931489] adopt voxel-index based dda, like fangq/mcx b873f90c6
  • 2022-09-21 [d9e5eaa] add jammy to ci
  • 2022-09-21 [3e71eac] making double-buffer finally work to solve fangq/mcx#41, thanks to @ShijieYan
  • 2022-09-21 [2216686] sync mcxcl's json2mcx with the latest version from mcx
  • 2022-05-21 [39913fc] complete reformat of source code using astyle with 'make pretty'
  • 2022-05-21 [f7d69d5] sync mcx2json from mcx repo
  • 2022-01-27 [2559135] sync mcxdetphoton.m with mcx, move location
  • 2021-10-29 [867314a] Update README.md
  • 2021-06-23 [818f3a1] set maximum characters to read for fscanf, fix #41
  • 2021-06-23 [38d56a6] handle empty detector array in json2mcx
  • 2021-05-26 [4c18305] fix a few minor memory leaks based on valgrind output, still leaks on nvidia GPUs
  • 2021-05-15 [bbee39e] save volume in jdata format by default
  • 2021-02-26 [8eba2cd] add MATLAB_MEX_FILE in the makefile
  • 2021-02-24 [8f793a0] use memcpy to avoid strncpy warning from gcc 10
  • 2021-02-24 [89b46a9] update windows compilation commands
  • 2021-02-24 [49c6217] allow compiling GNU Octave mex on windows
  • 2021-02-07 [e9d2ce7] following Debian script suffix rule
  • 2020-09-06 [a39f271] update numeral version number
  • 2020-09-06 [6ea10b2] add back wiki versions of the README file for easy website update
  • 2020-09-04 [de59205] patch mcxcl for fangq/mcx#103 and fangq/mcx#104
  • 2020-09-01 [9b5431e] sync with mcx, add cubesph60b to match example/benchmark2
  • 2020-08-31 [7e7eb06] flush output for mcxlabcl
  • 2020-08-31 [6079b17] fix pattern3d demo script bug
  • 2020-08-31 [7b36ee8] fix photon sharing mcxlab crash
  • 2020-08-30 [f498e29] fix typo
  • 2020-08-29 [b001786] update mcxlabcl, update ChangeLog

MCX-CL v2020 (Eternity)

07 Sep 07:03
Compare
Choose a tag to compare

Download

What's New

In MCX-CL v2020 (0.9.9), we added a list of major new additions, including

  • Support running on multiple NVIDIA GPUs (merged from nvidiaomp branch)
  • Built-in benchmarks for easy testing and adoption by new users
  • Transition to JSON/JNIfTI input/output files for easy data sharing
  • Exporting simulation as JSON with binary volume data
  • All-in-one Windows installer for MCXStudio/MCX/MMC/MCXCL
  • Automated code building, testing and continuous integration via Travis-CI
  • CMake based compilation and Visual Studio support
  • 1.6x speedup on Pascal GPUs
  • Add 4 built-in complex domain examples - Colin27 brain atlas, USC_19-5 brain atlas,
    Digimouse, and mcxyz skin-vessel benchmark
  • Support isotropic launch for all focuable sources - gaussian, pattern, pattern3d,
    fourier, disk, fourierx, fourierx2d, and slit - by setting cfg.srcdir(4) to nan
  • Add python-based mch file reader (by Shih-Cheng Tu), nightly build compilation
    script, colored command line output, and more

Compared to MCXCL v2019.4 (0.9.8), MCX-CL has gained support of nearl all core features in MCX, i.e.

  • Output momentum transfer for DCS simulations
  • Output photon trajectory data
  • Specifying one of the four boundary conditions for each of the 6 facets of the domain
  • Output partial scattering event counts like MMC
  • Photon replay
  • Photon sharing - simultaneous simulations of multiple patterns
  • 2D simulations
  • Support photon numbers over 2^31-1 in one simulation

In addition, we also fixed a number of critical bugs, such as

  • fix critical bug when output diffuse reflectance using a single pattern source
  • fix bugs for incorrect results for isotropic source, cone source
  • fix mcxlabcl gpuinfo output crash using multiple GPUs
  • fix mcxlab crash when srcpattern/srcdir/srcpos/detpos are not in double precision
  • fix mcxlab crash due to racing in multi-threads
  • force g to 1 in region where mus is 0

Full ChangeLog

  • 2020-08-28 [2ef3ee7] sync mcxlabcl with mcxlab
  • 2020-08-28 [89df0be] patch mcxcl for fangq/mcx#101
  • 2020-08-24 [9306ba3] massive documentation update for v0.9.8 release
  • 2020-08-18 [e76d67f] add automated valgrind testing
  • 2020-08-18 [dcbf360] add pocl for ubuntu 18.04
  • 2020-08-18 [acc6783] update ubuntu 20.04 pocl package name
  • 2020-08-18 [6db02a4] add ubuntu 20.04 target with pocl and testing
  • 2020-08-17 [9c90d06] fix typo
  • 2020-08-17 [4e95e18] add -O3 for zmat units
  • 2020-08-17 [265ef1f] remove type casting warning on the mac
  • 2020-08-17 [670f783] add back the accidentally removed MATLAB_MEX_FILE flag
  • 2020-08-17 [0bf5063] finetune valgrind and cuda-memcheck test
  • 2020-08-17 [3973557] bind -j to --json, add help info, update examples
  • 2020-08-17 [2a5a54e] add valgrind and cuda-memcheck test
  • 2020-08-17 [656815d] fix regression introduced in @80861754 in handling --shapes
  • 2020-08-16*[acb8280] allow testing script to work on mac
  • 2020-08-16 [c752642] return total and absorbed energy when -S 0 and -U 0 is used
  • 2020-08-16 [e872b58] add sphshell benchmark - see GPU MMC paper
  • 2020-08-16*[64cf701] sync bc detector support via --bc 7-12 chars,disable group load balance
  • 2020-08-15 [9997a28] remove warnings from gcc 9.3
  • 2020-08-15*[3b3f224] add --json option, sync with mcx
  • 2020-08-15*[d893be3] sync with mcxcontest.pl in mcx
  • 2020-08-12 [8c96656] fix incorrect srcparam brackets
  • 2020-08-12 [dbc12eb] add group load balance into default option
  • 2020-08-12 [6ba4d97] use run-time compilation macro to replace const mem, gain 16% speedup
  • 2020-08-08 [761dcbc] handle record-breaking benchmark results
  • 2020-08-08 [12f7961] fix nvidia gpu core count, sync from mcx
  • 2020-08-08 [e6873a9] fix do_reflect macro testing
  • 2020-08-08 [4e3deda] speedup updateproperty via using macros
  • 2020-08-08*[c1e3ebb] merge with nvidiaomp branch, support multi NVIDIA GPUs
  • 2020-08-05 [a024fa4] add -L and save workload
  • 2020-08-05 [60622d6] update help info
  • 2020-08-04 [1c431bb] fix -n/G/W flags
  • 2020-08-04 [34ed2a5] sync with mcx script
  • 2020-08-04*[d0a73cf] fix double scaling for pattern/pattern3d source, like fangq/mcx@c04bff5
  • 2020-08-03 [fd0e0ec] debug on the mac
  • 2020-08-03 [7d85545] switch json to JSON::PP in the core
  • 2020-08-03*[3c110b2] standalone mcxcl benchmark and speed contest script
  • 2020-07-28 [34ab8cb] fix 0 global memory on AMD GPUs, regression of 67576f6, #40
  • 2020-07-25 [967e9e6] enable testing on mac
  • 2020-07-25 [3f41350] testmcx.sh accepts additional param
  • 2020-07-25 [23dc45a] linux target add pocl
  • 2020-07-24 [b8b6a24] build mcxlabcl octave mex on linux targets
  • 2020-07-24 [1c61c8d] add msys shell for travis
  • 2020-07-24 [ab6155f] try to use mingw32-make
  • 2020-07-22*[c838d58] add travis ci script
  • 2020-07-22 [36e0e9e] match test script symbols
  • 2020-07-22 [cb3f3ac] remove --verbose, set to --version to match mcx
  • 2020-07-05 [2e52966] fix nightly build issues
  • 2020-06-27 [21bebc6] fix all ubj warnings
  • 2020-05-03 [4b59557] add the missing header file, finish #37
  • 2020-05-03*[d2501dc] sync with mcx to support JData/JNIfTI output and --bench, close #37
  • 2020-04-06 [da59c72] remove mingw64 compilation warnings
  • 2020-04-05 [39a8341] update help info for buildmcxcl.m
  • 2020-04-05 [1903818] make creating octave mex file work again
  • 2020-04-04 [7ac3b56] use the correct macro on windows
  • 2020-04-04 [7911b02] fix cygwin binary library entry point error
  • 2020-04-04 [199f708] simplify makefile
  • 2020-04-03 [388e1a1] use default msys2 root folder
  • 2020-04-03 [c7f0eda] update help info, flush output
  • 2020-04-03 [ee807d9] flush output in octave, fix error in octave mex
  • 2020-04-03 [3d768fa] fix compilation on linux
  • 2020-04-03 [f989f37] compile both binary and mex on windows
  • 2020-04-03 [7d3bc69] update makefile to compile on msys2
  • 2020-04-03 [67576f6] fix warnings for gcc 8 and 9.3, compiles windows mex file
  • 2020-04-02 [e5f2881] migrate windows compilation to msys2
  • 2020-03-29 [f1fcd01] sync with mmc to stay compatible with MS VS
  • 2020-03-20 [e855627] define a background grid if dim.x/y/z is defined
  • 2020-02-05 [5868f95] fix one warning of the cl kernel
  • 2020-02-05 [1388f7d] remove all warnings from gcc 7
  • 2020-02-05 [2a2116a] update cjson to the latest git version
  • 2019-11-21 [ff9e097] Updated and renamed readme.txt to readme.md
  • 2019-10-18 [10cac7b] fixing optical property initialization for continuously varying mua; add missing input file for digimouse demo
  • 2019-08-03 [96eaba7] apple cpu special config
  • 2019-08-02 [a54cb6e] fix missing dosaveref field, swap incorrect short flag
  • 2019-08-02 [9186f25] test to see if progress bar is supported
  • 2019-08-01 [01efe5e] enable reflection when bc contains r/m/c/_
  • 2019-08-01 [22e84b4] deal with device names without vendor, like Titan V
  • 2019-08-01 [ee67942] use kernel event to terminate progress bar, set workgroup size to 1 on Mac
  • 2019-07-31 [61eb317] use finer progress bar on cpu hosts
  • 2019-07-30 [a432ee0] fix typo to enable a set of new flags
  • 2019-07-29*[93b3d0c] fix voxel [0 0 0] is always zero bug, same as fangq/mcx@63e5e23
  • 2019-07-26 [40f79d9] linking with cuda opencl.lib on windows
  • 2019-07-26 [eedf008] do not print progress bar by default, still causing hanging on certain gpu
  • 2019-07-26 [881ae8c] fix JIT errors on the mac
  • 2019-07-25 [4b3a58f] make kernel compatible with older opencl libraries
  • 2019-07-25 [7f61afd] sync mcxlab with mcxlabcl
  • 2019-07-25 [e523747] set printing progress as default
  • 2019-07-25 [fa246b4] fix two GPU progress bar error
  • 2019-07-25 [c8b8b24] fix cyclic boundary condition
  • 2019-07-24*[898c1f3] fix sharing demo
  • 2019-07-24 [7fc5669] update output deposit and print info. for sharing
  • 2019-07-24 [071e1a4] fix wrong pattern number index for single pattern illumination
  • 2019-07-24 [b64a562] match anistropy change to that of mcx
  • 2019-07-24 [2001c19] fix fluence/energy output deposit and add one register pathlen to accumulate photon partial pathlengths that fall in the same voxel
  • 2019-07-22 [e87220d] partial sync with mcx_utils.c from mcx-cuda
  • 2019-07-22 [0e6f8a9] fixing compatibility issues when running mcxlab srctype tests
  • 2019-07-22 [9fac24d] port mcx replay patch
  • 2019-07-22*[2894ea1] progress bar finally works on NVIDIA, thanks to Robert Crovella@NVIDIA http://bit.ly/2XY0IVb
  • 2019-07-22 [2863ae3] partially fix some compatability issues to run mcxlab samples
  • 2019-07-21*[f242201] add replay support
  • 2019-07-19 [53bcd77] use float byte alignment
  • 2019-07-19 [136f3bf] align local memory buffer to 8-byte-alignment to avoid CL_INVALID_COMMAND_QUEUE error
  • 2019-07-19 [c0d0c9a] use cl_ulong to define 64bit integers
  • 2019-07-19*[fbfe876] add -m -q and -V options, but shared mem is not working
  • 2019-07-17*[490c215] now mcxcl can save trajectories
  • 2019-07-17 [2257db0] ported --gscatter option
  • 2019-07-17*[53cb0e7] massive update - ported bc, multibyte and savedetflag, 2d to from mcx to mcxcl
  • 2019-07-17 [ff58c0c] fix type-punning warning
  • 2019-07-17 [412f801] partially sync with mcx
  • 2019-07-16*[969907e] add colin27 example from mcx
  • 2019-07-16 [fc6ff40] sync with mcx's helper functions
  • 2019-06-08 [d5cac7d] fix excess buffer release and add missing one
  • 2019-05-31 [0fe7813] remove un-needed -k parameter from samples
  • 2019-03-20 [a6d38d4] fix empty string test

MCXCL v0.9.5 for packaging for Fedora

03 Oct 20:44
Compare
Choose a tag to compare
apple cpu special config

MCXCL 0.8 (v2018 - Duality)

26 Aug 16:18
Compare
Choose a tag to compare

Release Notes for Monte Carlo eXtreme - OpenCL v2018

code name: Sachima, released on August 20, 2018

Click this link to download MCX-CL/MCXLAB-CL v2018

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

Opening Remarks

We are proud to share with you that the first formal release of MCX-CL (v2018) is finally here! MCXCL is the first reported general purpose OpenCL-based MC simulator for photon transport modeling. It extends our GPU accelerated MC work (MCX) from NVIDIA-only hardware to nearly all mainstream CPUs and GPUs that are available today. The portability and scalability of MCXCL is unprecedented - it runs on Intel CPUs, Intel's integrated GPUs, almost all AMD CPUs and GPUs as well as NVIDIA GPUs currently in production (and future generations). If your processor has four cores, MCXCL will take 4; if it has 4000 cores, MCXCL will happily make use of all 4000 of them fully automatically and transparently to the user. It not only can run on different processors made by many processor vendors, but also can run simulations on multiple of them simultaneously, even mixing CPUs and GPUs, to maximize throughput.

Although the initial working version of MCX-CL was coded back in 2010, and publicly announced in 2012, we have been continuously developing, studying, optimizing this unique software and keeping it in sync for every new feature we added to it's CUDA sibling, MCX. Over the past two years, we have been systematic studying and benchmarking MCXCL and optimized its performance. The results of these investigations were summarized in a JBO Letter paper we published earlier this year

We demonstrated that MCXCL can get impressive speedup, similar to MCX, when running on a high-performance GPU; even running it on a multi-core CPU can be faster than most existing CPU-only MC codes. We also showed our GPU optimization strategies, load-balancing strategies as well as benchmark results across many different processors.

As of today, MCXCL has most core features as in MCX - wide-field and complex source support, 3D arbitrary media, partial-path length and photon detection, matlab mex file, JSON input, interoperability with MCXStudio, and many more. In fact, both MCXCL binary and MCXLAB-CL share nearly identical input parameters and interface as their CUDA counterparts. An input file that works for MCX can be directly executed using MCXCL and MCXLAB-CL without change. This makes it effortless for someone to run high performance MC simulations on non-NVIDIA hardware.

In April 2018, we have used MCXCL as our primary tool in our 2nd MCX Training Workshop during the OSA BIOMED conference. The code had become solidified after extensive testing by both the developers and the workshop trainees. As a result, we felt that it is time to introduce MCXCL to everyone and bring high performance and highly salable MC simulations to the hands of researchers worldwide.

Introduction

MCX-CL (or MCX for OpenCL) is a high-performance, highly scalable and general-purpose Monte Carlo photon transport simulator for biophotonics applications. Compared to MCX (implemented with NVIDIA CUDA), MCXCL is written in the OpenCL framework, and is capable of launching parallel photon simulations on most modern CPUs and GPUs produced by many vendors, including NVIDIA, AMD and Intel.

MCX-CL shares nearly identical command line options and input file formats as MCX. The simulation settings designed for MCX can be simply used for MCX-CL simulations without major modifications. There are only a few features in MCX that have not yet been ported to MCXCL, such as photon replay, we are working on those and hopefully make both software 100% compatible.

Similar to MCXLAB, MCXLAB-CL is the MATLAB mex version of the MCXCL software. It can be directly called inside MATLAB and GNU Octave. It also uses the same input structure settings as in MCXLAB, making both packages highly compatible. One can even define USE_MCXCL=1 in MATLAB command window, and all MCXLAB calls will call MCXLAB-CL automatically.

About this release

MCXCL/MCXLAB-CL v0.8 contains a [MCXCL/ChangeLog list of important new features as well as bug fixes].

Over the past two years, we have gradually ported all key features from MCX to MCXCL, including

  1. !!key!! port complex source support from mcx
  2. !!key!! accept full json input in the command line
  3. !!key!! port saveref from mcx to save diffuse reflectance
  4. !!key!! fix floating point accummulation error, port from mcx #41
  5. !!key!! changes to compile mcxcl.mex using mingw64 g++ on Windows
  6. !!key!! port progress bar from mcx (AMD device only)
  7. !!key!! port mcxlab as mcxlabcl
  8. !!key!! integer media,savenii,mcxstudio flags
  9. incorporate Leiming's workgroup load-balancing,simulate exact photon number
  10. auto tune AMD autothread number and Intel GPU thread numbers

Pre-compiled MCXCL and MCXLAB-CL binaries are provided for Windows, Linux and Mac OS.

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

System requirements

In all cases, the OpenCL library (libOpenCL.so*, OpenCL.dll or /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL on the Mac) must be preinstalled in your system. Typically, these libraries are automatically installed after you installed your integrated or discrete GPU graphics driver.

The lowest OpenCL support version is OpenCL 1.0. Essentially, nearly all OpenCL compliant processors can run MCXCL/MCXLAB-CL.

Step-by-step installation guide can be found in this link.

Features that are available on MCX but not yet ported to MCXCL

The below features have not yet been ported to MCXCL:

  • Photon replay for building Jacobians
  • storing photon trajectory data
  • saving momentum transfer for DCS simulations
  • displaying progress bar on NVIDIA/Intel processors

we are working hard to port these features to MCXCL and MCXLABCL.

Reference