blob: 66eae5e77cef0d139f414ba2b88c58c5636c0099 [file] [log] [blame]
Pau Espin Pedrol762c9512018-07-05 18:26:12 +02001[[osmotrx_arch_support]]
2== OsmoTRX hardware architecture support
3
4OsmoTRX comes out-of-the-box with several algorithms and operations
5optimized for certain instruction-set architectures, as well as non-optimized
6fall-back algorithms in case required instruction sets are not supported by the
7compiler at compile time or by the executing machine at run-time. Support for
8these optimized algorithms can be enabled and disabled by means of configure
9flags. Accelerated operations include pulse shape filtering, resampling,
10sequence correlation, and many other signal processing operations.
11
12On Intel processors, OsmoTRX makes heavy use of the Streaming SIMD Extensions
13(SSE) instruction set. SSE3 is the minimum requirement for accelerated use.
14SSE3 is present in the majority of Intel processors since later versions of the
15Pentium 4 architecture and is also present on low power Atom processors. Support
16is automatically detected at build time. SSE4.1 instruction set is supported
17too. This feature is enabled by default unless explicitly disabled by passing
18the configure flag _--with-sse=no_. When enabled, the compiler will build an
19extra version of each of the supported algorithms using each of the supported
20mentioned instruction sets. Then, at run-time, OsmoTRX will auto-detect
21capabilities of the executing machine and enable an optimized algorithm using
22the most suitable available (previously compiled) instruction set.
23
24On ARM processors, NEON and NEON FMA are supported. Different to the x86, there
25is no auto-detection in this case, nor difference between compile and runtime.
26NEON support is disabled by default and can be enabled by passing the flag
27_--with-neon=yes_ to the configure script; the used compiler must support NEON
28instruction set and the resulting binary will only run fine on an ARM board
29supporting NEON extensions. Running OsmoTRX built with flag _--with-neon_ on a
30board without NEON instruction set support, will most probably end up in the
31process being killed with a _SIGILL_ Illegal Instruction signal by the operating
32system. NEON FMA (Fused Multiply-Add) is an extension to the NEON instruction
33set, and its use in OsmoTRX can be enabled by passing the _--with_neon_vfpv4_
34flag, which will also implicitly enable NEON support (_--with_neon_).