What is Yeppp!?
Yeppp! is a high-performance SIMD-optimized mathematical library for x86, ARM, PowerPC, and MIPS processors on Windows, Android, Mac OS X, and GNU/Linux systems. Yeppp! contains versions of its functions for multiple architectures and instruction sets and chooses the optimal implementation during initialization to guarantee the best performance on the host machine.
Which vector operations are supported?
Yeppp! aims to provide an orthogonal set of vector operations. By orthogonal we mean that Yeppp! supports all possible variations of operands. For example, for subtraction Yeppp! has 7 variants:
- Subtraction of two arrays (z[i] := x[i] - y[i])
- Subtraction of constant from array (z[i] := x[i] - c)
- Subtraction of array from constant (z[i] := c - x[i])
- In-place subtraction of two arrays, overwrite first array (x[i] := x[i] - y[i])
- In-place subtraction of two arrays, overwrite second array (y[i] := x[i] - y[i])
- In-place subtraction of constant from array (x[i] := x[i] - c)
- In-place subtraction of array from constant (x[i] := c - x[i])
Moreover, there is a complete set of the above functions for different data types:
- 8-bit, 16-bit, 32-bit, and 64-bit integers (signed and unsigned)
- Single precision (32-bit) and double precision (64-bit) floating-point numbers
Besides basic arithmetic operations (addition, subtraction, multiplication) Yeppp! provides high-performance mathematical functions, such as log, exp, sin, which operate on vectors.
What other functionality is supported?
Yeppp! provides a number of functions to retrieve information about the processor (supported instruction extensions, architecture and microarchitecture, canonical processor name), measure processor cycles, access high-performance system timer, and processor energy counters.
Do I have to write in C++ to use Yeppp?
No. Yeppp! functions can be called from C, C++, C#, Java, FORTRAN.
Which architectures and operating systems are supported?
As of Yeppp! 1.0.1, the library supports 15 platforms:
- Windows on x86 (32-bit) architecture
- Windows on x86-64 (64-bit) architecture
- Mac OS X on x86 (Intel 32 bit) architecture
- Mac OS X on x86-64 (Intel 64 bit) architecture
- Linux on x86 architecture
- Linux on x86-64 architecture
- Linux on armel ABI (ARMv5T architecture, Soft-Float EABI)
- Linux on armhf ABI (ARMv7-A architecture, Hard-Float EABI)
- Linux on k1om architecture (Xeon Phi)
- Linux on PowerPC 64 architecture
- Linux on Blue Gene/Q architecture
- Android "armeabi" ABI (ARMv5TE architecture)
- Android "armeabi-v7a" ABI (ARMv7-A architecture)
- Android "x86" ABI
- Android "mips" ABI
What is the license?
Yeppp! is licensed under the New BSD license (AKA 3-clause BSD), an OSI-approved permissive open source license. In particular, the license allows you to
- Use Yeppp! in closed-source projects
- Distribute Yeppp! as a part of your commercial product
- Modify Yeppp! source code