Skip to content
Alexander Bürger edited this page Feb 4, 2026 · 3 revisions

Versioning

The fimex-program is considered stable and the releases are those used in production at met.no. API- and configuration changes are still likely between two releases.

Build

Fimex is built using cmake. Some unit tests require extra data which are distributed separately from the source code due to the file size:

The is also an R-Wrapper available here.

Dependencies

Fimex requires at least the following libraries to be installed for compilation:

To configure the different file formats or features it requires:

Optimizations with gcc

The following optimizations have been tried with gcc 4.4 and kd-tree interpolation.

  • -O2 general optimizations like loop-unrolling/inline
  • -mfpmath=sse -msse2 on i386 computers, use math from sse-unit. The built-in FPU is not IEEE conform and performs very slowly (> factor 2) when calculating sqrt(nan). This is already the default on x86_64.
  • -ftree-vectorize -fno-math-errno gives tiny performance gain through auto-vecotrization. -fno-math-errno is required to enable vectorization of intrinsic functions like sqrt.
  • -fno-trapping-math -fno-signaling-nans fimex does not make use of trapping-math or signaling-nans, so this option can safely be switched on. Unfortunately, this does not give any performance gain.
  • -O3 gives no visible performance gain. This should be tested again with newer compiler-versions.
  • -fprofile-generate / -fprofile-use gives a performance gain of ~4%. Since it complicates the build, it is not used by default.

Parallelization (OpenMP)

Fimex can be build with OpenMP parallelization support with the //configure// option //--enable-openmp//. The following operations are parallelized:

  • interpolation: fill2d (good parallelization on z-axis)
  • interpolation with coord_nearestneighbor (good parallelization in startup)

Clone this wiki locally