Skip to content

Installation

Code Availability

THOR is available via Apptainer containers. The source code will be released openly after publication of the code paper (under review). For early source access or contributions, contact contact@thor-rt.org.

Containers Available

Apptainer containers provide an alternative to compiling from source — the generic image runs on CPU, NVIDIA, or AMD GPU, MPI included (experimental).

Requirements

  • Clang >= 18.0 (required)
  • CMake >= 3.29.0 && < 4.0.0
  • Git with submodules
  • MPI (for distributed computing)
  • SYCL implementation: AdaptiveCpp >= 25.10.0 with the required PTX logarithm fix (recommended), or Intel oneAPI

PointCloud/Voronoi datasets use portable SYCL kernels and oneDPL sorting when built with Intel oneAPI. Install the oneDPL headers alongside the compiler.

Setup

1. Clone the repository

git clone https://github.com/cbyrohl/thor.git
cd thor
./scripts/init-submodules.sh base

Use graphical instead for native-display or GUI-test dependencies; all initializes every nested submodule. Failed updates retry after 15, 30, and 60 seconds before tag-fetch and broken-checkout repair. Successful updates incur no delay; a persistent failure adds at most 105 seconds of backoff, plus the Git operations themselves. The same helper is used by CI. [AI-Codex]

2. Install SYCL runtime

You need either AdaptiveCpp (recommended) or Intel oneAPI. If your HPC provider doesn't offer these as modules, you'll need to compile AdaptiveCpp from source. See AdaptiveCpp setup for guidance.

3. Build

export CXX="<c++ compiler>"
export CC="<c compiler>"
cmake -S . -B build
cmake --build build

Set CC and CXX to the paths of your SYCL compiler. For AdaptiveCpp, the executables are clang and acpp, while for Intel oneAPI these are icx and icpx, see here for more details.

AdaptiveCpp targets: use generic only

The supported and tested AdaptiveCpp configuration is the default generic (SSCP/JIT) target — a single build serves both CPU and GPU execution. Only change ACPP_TARGETS if you know what you are doing, see Compiler Settings.

Memory Usage

Compilation can require large amounts of memory. If you run out of memory during the build, reduce the number of concurrent builders by adding -j1 to the build command:

cmake --build build -j1

Python Packages

For the full Python environment without compiling the C++ bindings, run from the repository root:

uv sync --extra all
source .venv/bin/activate

This installs the analysis helpers, live client, MCP interface, and test helpers. Install thor-bindings separately if needed.

For reference-data preparation, install the base package:

uv tool install "/path/to/thor/python/thor-rt"
thor-tools prepare list

See Preparing reference data for catalog manifests, downloads, verification, and shared data storage.

THOR includes Python packages for post-processing and visualization. To install the thor-tools CLI globally:

uv tool install "/path/to/thor/python/thor-rt[all]"

For development (editable install into the current environment):

uv pip install -e "/path/to/thor/python/thor-rt[all]"

See Python Packages for details on individual packages and the C++ bindings.

Getting Help