LuxMark is a OpenCL cross-platform benchmark tool and has become, over past years, one of the most used (if not the most used) OpenCL benchmark. It is intended as a promotional tool for LuxCoreRender and it is now based on LuxCore API, the LuxCoreRender v2.x C++ or Python API available under Apache Licence v2.0 and freely usable in open source and commercial applications.
This release is based on LuxCoreRender v2.2 and includes benchmarks with the following rendering engines:
- A micro-kernel based OpenCL path tracer with/without Global Illumination cache;
- A C++ path tracer with/without Global Illumination cache;
- An hybrid OpenCL for GPUs and C++ for CPUs path tracer with/without Global Illumination cache;
- A C++ Bidirectional path tracer with a Metropolis–Hastings sampler.
LuxMark includes Intel OpenImageDenoise. A comparison between raw and denoised image is shown at the end of the benchmark or during the stress test. However Intel OpenImageDenoise is a CPU-only task and it is not part of the benchmark result.
Aside from benchmarking modes, it is also available a stress mode to check the reliability of the hardware under heavy load. Hybrid OpenCL GPUs + C++ CPUs is well suited to put the maximum load possible on the system.
Benchmark Result Validation
LuxMark includes a validation of the rendered image by using the same technology used for pdiff in order to check if the benchmarked result is valid or something has gone wrong. It has also a validation of the scene sources used (i.e. hash of scene files).
Brute force path tracing (OpenCL, C++ and Hybrid)
The main LuxMark benchmark is a brute force path tracer (i.e. no cache used).
Path tracing with GI cache (OpenCL, C++ and Hybrid)
The second LuxMark benchmark is a path tracer with global illumination cache. This rendering mode slightly simpler than pure brute force and may work better on some GPU.
Bidirectional path tracing with Metropolis sampler (C++ only)
The last LuxMark benchmark is a bidirectional path tracer with a Metropolis–Hastings sampler. Due to its complexity and the serialize nature of Metropolis, this rendering mode is available only for CPUs.
Command line options
Usage: ./bin/luxmark [options] --help (display this help and exit) --scene=FOOD|HALLBENCH|WALLPAPER (select the scene to use) --mode=BENCHMARK_OCL_GPU|BENCHMARK_OCL_CPUGPU|BENCHMARK_OCL_CPU|BENCHMARK_OCL_CUSTOM|BENCHMARK_HYBRID|BENCHMARK_HYBRID_CUSTOM|BENCHMARK_NATIVE|STRESSTEST_OCL_GPU|STRESSTEST_OCL_CPUGPU|STRESSTEST_OCL_CPU|STRESSTEST_HYBRID|STRESSTEST_NATIVE|DEMO_LUXCOREUI|PAUSE (select the mode to use) --devices=<a string of 1 or 0 to enable/disable each OpenCL device in CUSTOM modes> --single-run (run the benchmark, print the result to the stdout and exit) --ext-info (print scene and image verification too with --single-run)
- Windows 64bit: https://github.com/LuxCoreRender/LuxMark/releases/download/luxmark_v4.0alpha0/luxmark-v4.0alpha0-win64.zip (Note: you have to install the Microsoft Visual C++ Redistributable for Visual Studio 2017 in order to run the Windows executable)
- Linux 64bit: https://github.com/LuxCoreRender/LuxMark/releases/download/luxmark_v4.0alpha0/luxmark-v4.0alpha0-linux64.tar.bz2 (Note: You have to install Qt5 from your distribution in order to run the Linux executable)
Compile from sources
Some note to compile LuxMark:
- the sources are available here: https://github.com/LuxCoreRender/LuxMark (tag: luxmark_v4.0)
- LuxMark can be compiled exactly like LuxCoreRender. It has exactly the same dependencies (i.e. LuxCore, LuxRays, etc.). The procedure described in repository and repository can be used to compile LuxMark too.
- the complete scenes directory is available here: https://github.com/LuxCoreRender/LuxMark/releases/download/luxmark_v4.0alpha0/scenes.tgz