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