HPC for everyone!

Yeppp! is a high-performance SIMD-optimized mathematical library for x86, ARM, and MIPS processors on Windows, Android, Mac OS X, and GNU/Linux systems.

Yeppp! officially supports the C, C++, C#, Java, and FORTRAN programming languages.

Ok, I want it now! Hmm… I'm not sure

7 reasons to use Yeppp!

Reason 1: Yeppp! is fast!

Yeppp! provides extremely fast vector mathematical functions, such as log, exp, and cos. On Haswell, Intel's latest microarchitecture, Yeppp! spends on average 5 cycles per element to compute log or less than 3 cycles per element to compute exp. BTW, floating-point addition on Haswell takes 3 cycles, and multiplication — 5.

Can Java be faster than FORTRAN? Yeppp! (if you use Yeppp!) Yeppp! enables high-level managed languages in getting better performance than the best optimizing C and FORTRAN compilers.

Yeppp! can accelerate computations from the top-end processors inside compute clusters to low-power processors in mobiles phones, tablets, and single-board computers like Raspberry Pi.

Reason 2: Yeppp! makes a better use of your CPU

Instead of processing elements one-by-one, Yeppp! uses special SIMD instructions, which compute several elements in just one instruction.

Yeppp! uses software pipelining, a technique which rearranges instructions to better fit processor pipeline, to utilize your processors' ability to execute multiple instructions per cycle.

Yeppp! provides compute kernels in multiple versions optimized for different processors and instruction sets with the same interface. The optimal implementation is automatically detected during initialization.

Reason 3: Yeppp! improves battery life and reduces cloud computing cost

With Yeppp! processor can finish computations faster and switch to low-power idle state.

With Yeppp! real-time applications can use fewer processor cores and still maintain comfortable FPS. As operating system can switch the idle cores to deep sleep state, the Yeppp!-powered applications will enjoy better battery life.

Due to better utilization of CPU resources, applications which use Yeppp! spend less CPU time, and need fewer cloud computing instances.

Reason 4: "It just works" with popular programming languages

Yeppp! provides pure C interface headers which can be natively used with C (C89 and later), C++, and Objective-C languages.

Getting started
with C/C++ and Yeppp! »

Yeppp! comes with interface definitions for FORTRAN. It allow to use Yeppp! with gfortran, Intel Fortran Compiler, and other FORTRAN compilers which support the standard ISO_C_BINDING module.

Getting started
with FORTRAN and Yeppp! »

Yeppp! can be used from .Net languages, such as C#, F#, and VB.Net. Official binaries are provided for .Net 2.0 (compatible with newer .Net versions and Mono framework).

Getting started
with C# and Yeppp! »

Yeppp! supports Java via official JNI bindings. These bindings also can be used with other JVM languages, such as Scala and Jython.

Getting started
with Java and Yeppp! »

Reason 5: Yeppp! supports a wide range of hardware

Yeppp! can detect more than 60 x86 and x86-64 instruction extensions. Yeppp! has compute kernels are optimized for SSE (up to 4.2), AVX, AVX2, FMA (both FMA3 and FMA4), XOP, and supports Xeon Phi co-processor.

Yeppp! is equally well optimized for Intel and AMD processors.

Yeppp! detects all publicly announced ARM instruction sets, including ARMv6, ARMv7, VFPv3, VFPv4, NEON, NEONv2, half-precision extensions, and hardware division extension. Some extensions can be detected even if Linux kernel is not aware of them. Yeppp! compute kernels are optimized for ARM Vector Floating-Point (VFP) and NEON instruction sets.

On MIPS Yeppp! recognizes most instruction extensions, including MIPS R2, DSP and DSPv2, paired-single instructions, and MXU (Ingenic Media Extension).

Reason 6: Yeppp! is available on multiple platforms

Yeppp! supports x86 (32-bit) and x86-64 (64-bit) versions of Windows, starting with Windows XP.

Yeppp! can be used on Android 1.5 and later. We provide binaries for ARM (both ARMEABI and ARMEABIv7a), x86, and MIPS, so you can use Yeppp! on nearly all Android devices. And due to Java bindings you can use Yeppp! on Android without writing any C/C++ code!

Yeppp! runs well on Intel-based Apple computers with Mac OS X 10.5 or later. You are free to use either 32-bit or 64-bit version or the library.

Yeppp! works on Linux-based systems with 2.6 or later kernels. Yeppp! does not depend on any system libraries (including libc), and is binary compatible with most Linux distributions. x86 (Pentium and later), x86-64, armel (ARMv5T and later), armhf (ARMv7-A and later), and k1om (Xeon Phi) architectures are supported on Linux.

Reason 7: Yeppp! is reliable and documented

Yeppp! was tested on a high number of software and hardware installations ranging from nodes of Cray XE6 supercomputer to Raspberry Pi microcomputer to ensure that the processor features are always correctly detected. This includes over 2000 mobile devices which installed Yeppp! CPUID utility from Android Play Store.

Get it on Google Play

Yeppp! uses unit tests for all optimized compute kernels to make sure that they produce the same results as the reference non-optimized implementations.

Yeppp! provides extensive documentation for C/C++, C#, FORTRAN, and Java programmers auto-generated with Doxygen. The documentation includes examples of using Yeppp! with each of these programming languages.

Browse documentation »

Bonus reason: Yeppp! is free and open-source software

Yeppp! is licensed under the New (3-clause) BSD license, an OSI-approved permissive license.

Yeppp! repository is hosted on BitBucket and contributors are welcome.

Browse repository »

Download now! »