Different build-time features of ecTrans are enabled or disabled through CMake's "features",
functionality. Here we list all of the features which can be enabled by passing
-DENABLE_<feature name>=ON (and disabled by specifying OFF).
OMP: Enable OpenMP parallelism. Default ON. (Note: currently this controls both OpenMP multithreading for the
CPU version of ecTrans but also OpenMP offloading for the GPU version. In future we may split
these into two separate features.)ACC: Enable OpenACC parallelism. Default ON.DOUBLE_PRECISION: Enable double-precision build of ecTrans. Default ON.SINGLE_PRECISION: Enable single-precision build of ecTrans. Default ON.MKL: Use Intel's Math Kernel Library for the BLAS and FFTW calls in ecTrans. Default ON.CPU: Enable CPU build of ecTrans. Default ON.TRANSI: Enable transi C interface for ecTrans. Requires DOUBLE_PRECISION and CPU to be
enabled. Default ON.GPU: Enable GPU build of ecTrans. Requires ACC or OMP to be enabled. Default OFF.CUTLASS: Use Nvidia's CUTLASS library to accelerate the Legendre transform BLAS operations.
Requires GPU to be enabled and CUDA to be found. Default OFF.CUTLASS_3XTF32: Use 3XTF32 kernel to accelerate the Legendre transform GEMM. Requires
SINGLE_PRECISION to be enabled and CUTLASS to be found. Default ON.GPU_AWARE_MPI: Use direct GPU-GPU communication for the transpose routines. Requires GPU to be
enabled and MPI to be found. Default ON.GPU_GRAPHS_GEMM: Enable graph optimisation of Legendre transform GEMM kernels. Requires GPU to
be enabled. Default ON.GPU_GRAPHS_FFT: Enable graph optimisation of FFT kernels. Requires GPU to be enabled. Default
ON.GPU_STATIC: Compile GPU library as a static library. Default ON when BUILD_SHARED_LIBS
evalutes to true, otherwise OFF.ETRANS: Build limited-area version of ecTrans ("etrans"). Default OFF.ECTRANS4PY: Build ectrans4py Python interface to ecTrans. Requires ETRANS and
DOUBLE_PRECISION to be enabled. Default OFF.FIELD_API: Build experimental FIELD API - ecTrans interface library. Default OFF.Deprecated features:
MPI: Enable MPI parallelism. ecTrans is supposed to carry out all message passing through
FIAT's MPI wrapper, MPI, rather than by calling MPI directly. This feature was therefore
redundant and was removed in version 1.8.0. To use ecTrans without MPI, instead configure FIAT
with ENABLE_MPI=OFF. Note that, for now, the GPU version of ecTrans still requires an MPI
library, but a search for an MPI library is triggered by the GPU_AWARE_MPI feature.