|
FEAT 3
Finite Element Analysis Toolbox
|
This page summarizes the preprocessor macros defined by the build-system, the compiler detection or the user.
This section enlists the macros defined by the compiler detection headers to provide information about the compiler and its version being in use.
This macro is defined by the compiler detection system and its value is a string literal specifying the name and possibly the version of the compiler in use, e.g. "Microsoft Visual C++ 2015" or "GNU C++ compiler".
This macro is defined if the GNU C++ compiler is detected. Its value is defined as
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
which is a constant integral expression identifying the compiler version, e.g. the value 40702 identifies the G++ 4.7.2 compiler. See the compiler's documentation for details.
This macro is defined if the Clang/LLVM C++ compiler is detected. Its value is defined as
(__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
which is a constant integral expression identifying the compiler version, e.g. the value 40702 identifies the clang 4.7.2 compiler. See the compiler's documentation for details.
This macro is defined if the Cray C++ compiler is detected. Its value is defined as
(_RELEASE_MAJOR * 10000 + _RELEASE_MINOR)
which is a constant integral expression identifying the compiler version. See the compiler's documentation for details.
This macro is defined if the Intel C++ compiler is detected. Its value coindices with the compiler's internal macro __INTEL_COMPILER, which is a constant integral expression identifying the compiler version, e.g. the value 1210 identifies the Intel C++ 12.1 compiler. See the compiler's documentation for details.
This macro is defined if the Intel OneAPI C++ compiler is detected. Its value coindices with the compiler's internal macro __INTEL_LLVM_COMPILER, which is a constant integral expression identifying the compiler version, e.g. the value 20250000 identifies the Intel OneAPI C++ 2025.0 compiler. See the compiler's documentation for details.
This macro is defined if the Microsoft Visual C++ compiler is detected. Its value coincides with the compiler's internal macro _MSC_FULL_VER, which is an constant integral expression identifying the compiler version, e.g. the value 193030705 identifies the initial release version of the Visual C++ 2022 compiler. See the compiler's documentation for details.
This section enlists macros defined by the build system, which specify what types of third-party libraries and backends are available to FEAT.
This macro is defined by the build system if the FEAT kernel is linked against the ALGLIB library.
This macro is defined by the build system if the FEAT kernel is linked against the CGAL library.
This macro is defined by the build system if the FEAT kernel is linked against the BOOST library.
This macro is defined by the build system if the FEAT kernel is linked against the DeathHandler library.
This macro is defined by the build system if the FEAT kernel is linked against the CUDA library.
If defined, the LAFEM subsystem of the FEAT kernel will offer corresponding specializations for the containters and operations using CUDA as a work-horse.
This macro is defined by the build system if the FEAT kernel is linked against the cuDSS library.
This macro is defined by the build system if the FEAT kernel is linked against the fparser library.
This macro is defined by the build system if the FEAT kernel has support for datatypes offered by the FloatX library.
This macro is defined by the build system if the FEAT kernel has support for halfmath datatypes. The datatypes name is half_float::half.
This macro is defined by the build system if the FEAT kernel is linked against the HYPRE library.
This macro is defined by the build system if the FEAT kernel is linked against the METIS library.
This macro is defined by the build system if the FEAT kernel is linked against the Intel MKL library.
If defined, the LAFEM subsystem of the FEAT kernel will offer corresponding specializations for the operations using the MKL as a work-horse.
This macro is defined by the build system if the FEAT kernel is linked against a MPI library.
This macro activates support for OpenMP, a compilerpragma based C++ extension for multithreading. Note, that this also activates support for the parallel version of the Intel MKL Library, if enabled separately.
This macro is defined by the build system if the FEAT kernel is linked against the ParMETIS library.
FEAT_HAVE_METIS is also defined.This macro is defined by the build system if the FEAT kernel is linked against the quadmath library, which is included in the GCC compiler since version 4.6.0. If defined, corresponding specializations and overloads for the datatype __float128 are supplied.
This macro is defined by the build system if the FEAT kernel is linked against the SuperLU_DIST library.
This macro is defined by the build system if the FEAT kernel is linked against the triangle library, which offers a set of 2D triangular mesh generators.
triangle.h header file, you first have to define the following preprocessor macros, before including the header itself: This macro is defined by the build system if the FEAT kernel is linked against the trilinos library, a collection of reusable scientific software libraries, known in particular for linear solvers, non-linear solvers, transient solvers, optimization solvers, and uncertainty quantification (UQ) solvers.
This macro is defined by the build system if the FEAT kernel is linked against the UMFPACK library, which is part of the SuiteSparse library package.
This macro is defined by the build system if the FEAT kernel is linked against the zfp library.
This macro is defined by the build system if the FEAT kernel is linked against the zlib library.
This macro is defined by the build system if the FEAT kernel is linked against the zoltan library.
This section enlists miscellaneous macros that can be defined by the user via the build-system to affect various parts of the FEAT kernel.
This macro can be defined to enable explicit instantiation of all common kernel templates.
--eickt is passed to the configure script.This macro can be defined to affect the definition of the FEAT::Index data type in the kernel base-header.
Effects:
If undefined, FEAT::Index is a typedef for std::uint64_t.
If defined, FEAT::Index is a typedef for std::uint32_t.
This macro can be defined to avoid config-header inclusion in the kernel base-header.
Effects:
If undefined, the kernel base-header will include the header feat_config.hpp from the FEAT root directory at the beginning of the file.
This macro can be defined to override the default MPI operation implmentations by custom implementations.
Effects:
If defined, the MPI wrapper classes and functions implemented in the FEAT::Dist namespace will use custom implementations of the Dist::op_sum, Dist::op_max and Dist::op_min operations, which provide support for additional custom datatypes such as the 128-bit float supplied by the quadmath library.
--ovr_mpi_ops is passed to the configure script.This macro can be defined to distribute the actual executoin of asynchronous mpi calls to separate threads.
Effects:
If defined, the SynchScalarTicket starts a new thread for its MPI calls and thus enforces truly asynchronous execution. In accordance to [Wittmann13], the MPI_Wait call follows directly after the previous mpi call to unconditionally trigger the start of all mpi communication.
--mpi_thread_multiple is passed to the configure script.Use the new intel mkl sparse executor interface for sparse matrix vector products.
This macro can be defined to enable loop unrolling of the SparseMatrixBanded kernels via template meta programming.
--unroll_banded is passed to the configure script.This section enlist various macros which control the compiler's code generation.
This macro can be used to instruct the compiler to ignore assumed vector dependencies. To use this loop pragma, place it immediately before - not in - a loop definition. The pragma takes effect for the scope of the loop that follows it.
See also:
This macro is used to declare OpenMP pragmas in FEAT3 code and its one and only parameter is the omp directive part following the #pragma omp, so as an example, the typical #pragma omp parallel for simply becomes FEAT_PRAGMA_OMP(parallel for). The reason for why one should use this macro (instead of the direct #pragma omp directive) is that the FEAT_PRAGMA_OMP macro can be deactivated via the build system if FEAT3 is configured to build without OpenMP support enabled, which would result in 'unknown pragma' warnings otherwise.
This macro can be used to force the compiler to compile a function inline. The semantics of FORCE_INLINE are exactly the same as those for the C++ inline keyword.
This macro can be used to force the compiler to compile a function without inlining.
This section enlists various macros which do not fit into any other section.
This macro pair can be used to modify the compiler's diagnostics settings to suppress warnings for the inclusion of third-party header includes.
Example:
This macro contains the git sha1 checksum of the current HEAD in FEAT_SOURCE_DIR, at the time configure was executed.
This functional macro can be used to define 128-bit floating point constants if FEAT is configured to link against the quadmath library. The exact definition of this macro is as follows:
This section enlists the macros defined directly by the buildsystem, specifying the current build mode.
This macro is defined if the corresponding build is a debug build. If defined, the kernel base-header defines the DEBUG macro.
This macro is defined as 1 by the hand-made Visual Studio project files. It must be left undefined by the CMake and any other build system, independent of whether the MS VC++ compiler is used or not.
This macro is defined as 1 by the Visual Studio regression test system to disable error popup dialogs and install a custom exception filter for the Windows OS.
This macro contains a string literal specifying the full absolute path to the root source directory.
This macro contains a string literal specifying the full absolute path to the root binary directory.
This macro contains a string literal specifying the user provided build id string, that was passed to the configure_feat script.
This macro contains a string literal describing the detected target cpu type.
The system compiler the actual host compiler will rely on, e.g. using its header files etc.
The host compiler that will be used by nvcc for host code compilation.
Descriptive compiler name, as detected by cmake.
Descriptive compiler name, as set by the configure_feat script.
Compiler version, as detected by cmake.
Path to the used host compiler.
This macro indicates, if defined, that a compiler wrapper like ccache or distcc is used to compile FEAT.
Contains the 'real' compiler, if we use a COMPILER_WRAPPER. Is empty, if we don't.
Path to CMAKE_CXX_COMPILER_ARG1, if any.
The CXXFLAGS of the host compiler.
Path to the used nvcc compiler.
The CXXFLAGS of the nvcc compiler.
Version of the cuda SDK.
Major version of the cuda SDK.
Compile for this CUDA device architecture
Absolute path to mpi compiler wrapper.
Absolute path to mpi execution wrapper.
MPI Library version.
Hostname of the computer in use.
Full path of the cmake binary.
The 'makefile' generator used by cmake.