Installation
============
AddingDoublingRT ships as three independent backends. You only need to build
the ones you intend to use.
Requirements
------------
C++ / CUDA
~~~~~~~~~~
* A C++17 compiler (GCC, Clang, or MSVC).
* CMake ≥ 3.15.
* `Eigen 3.4 `__ — fetched automatically by CMake
via ``FetchContent``; no manual installation required.
* A CUDA toolkit (optional, only for the GPU backend).
JAX
~~~
* Python ≥ 3.9.
* `JAX `__ (``pip install jax``).
* NumPy.
* For GPU acceleration: ``pip install "jax[cuda12]"``.
Building the C++ / CUDA backends
--------------------------------
CPU only:
.. code-block:: bash
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
CPU **and** CUDA:
.. code-block:: bash
cmake -B build -DCMAKE_BUILD_TYPE=Release -DADRT_ENABLE_CUDA=ON
cmake --build build
The build produces the example/demo program (``ad_example``), the C++ test
suite, and — when CUDA is enabled — the CPU-vs-GPU benchmark
(``ad_cuda_benchmark``).
Using the JAX backend
---------------------
The JAX backend is a plain Python package and does not need to be compiled.
Import it directly from the source tree:
.. code-block:: python
from src_jax import ADConfig, solve
from src_jax import BatchConfig, solve_batch
Importing the package enables 64-bit floating point in JAX
(``jax_enable_x64``), which the solver relies on for numerical stability.
Running the examples and tests
------------------------------
C++ / CUDA:
.. code-block:: bash
# Run the example/demo program
./build/ad_example
# Run the C++ test suite
cd build && ctest --output-on-failure
# Run the CPU-vs-CUDA benchmark
./build/ad_cuda_benchmark
JAX:
.. code-block:: bash
# Run the JAX test suite (mirrors the C++ tests)
pytest tests/test_jax_solver.py -v
# Run the 3-way benchmark (C++ CPU vs CUDA vs JAX)
python tests/benchmark_all.py --build-dir build
Building this documentation
---------------------------
The documentation is built with `Sphinx `__ and
the Read-the-Docs theme:
.. code-block:: bash
pip install -r docs_src/requirements.txt
sphinx-build -M html ./docs_src ./docs
The rendered HTML is written to ``docs/html``. Pushing to the ``doc`` branch
triggers the GitHub Pages workflow, which runs the same command and publishes
the result.