Yeppp!
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Yeppp! library documentation for C programmers

Introduction

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! functions are presented in several versions with optimizations for different processor microarchitectures. During initialization Yeppp! library detects the processor it is running on, and chooses the optimal function implementations.

Additionally, the library provides information about the CPU, such as processor vendor and microarchitecture, and an OS- and hardware-independent interface to processor cycle counters, and high-resolution timers.

File structure

Releases of Yeppp! library contain the following files relevant to C/C++ programming:

LocationDescription
binaries/windows/amd64/Pre-built Yeppp! DLL, import library, and debug information files for x64 (64-bit) Windows
binaries/windows/x86/Pre-built Yeppp! DLL, import library, and debug information files for x86 (32-bit) Windows
binaries/android/armeabi/Pre-built Yeppp! shared object and debug symbols for Android ("armeabi" ABI)
binaries/android/armeabi-v7a/Pre-built Yeppp! shared object and debug symbols for Android ("armeabi-v7a" ABI)
binaries/android/x86/Pre-built Yeppp! shared object and debug symbols for Android ("x86" ABI)
binaries/android/mips/Pre-built Yeppp! shared object and debug symbols for Android ("mips" ABI)
binaries/android/yeppp/Android.mkDescription of Yeppp! library as an import module for Android NDK
binaries/linux/i586/Pre-built Yeppp! shared object and debug symbols for GNU/Linux on x86 architecture
binaries/linux/x86_64/Pre-built Yeppp! shared object and debug symbols for GNU/Linux on x86-64 (aka AMD64, x64, or Intel64) architecture
binaries/linux/k1om/Pre-built Yeppp! shared object and debug symbols for GNU/Linux on k1om (Xeon Phi) architecture
binaries/linux/armel/Pre-built Yeppp! shared object and debug symbols for GNU/Linux on ARM architecture with armel ABI (ARM EABI Little-Endian Soft-Float)
binaries/linux/armhf/Pre-built Yeppp! shared object and debug symbols for GNU/Linux on ARM architecture with armhf ABI (ARM EABI Little-Endian Hard-Float)
binaries/macosx/x86/Pre-built Yeppp! dynamic library and debug symbols for Mac OS X on x86 architecture
binaries/macosx/x86_64/Pre-built Yeppp! dynamic library and debug symbols for Mac OS X on x86-64 (aka AMD64, x64, or Intel64) architecture
library/headers/ Yeppp! headers for C and C++ compilers
library/sources/ Yeppp! source code
examples/c/Examples of calling Yeppp! functions in C code
docs/c/ Yeppp! documentation for C and C++ programmers
SetVars.cmdWindows batch script to setup environment variables for Yeppp!
set-vars.shPOSIX shell script to setup environemnt variables for Yeppp! . Compatible with bash/dash/ksh/zsh on Linux and Mac OS X.

Getting Started

Using Yeppp! with Visual Studio

Download the recent release of Yeppp! from the official website. On Windows we recommend that you use the MSI installer for Yeppp! SDK. The installer will install the library components, and also set YEPROOT environment variable.

Open the Visual C++ project where you want to use Yeppp! . Choose Project->Properties in the main menu. A project properties window will appear on the screen.

Choose "All configurations" and "All platforms" in the combo boxes on the top of the window.

visual-studio-all-configs-all-platforms.png

Expand the "C/C++" option group, and open "General" subgroup of options. Add $(YEPROOT)\library\headers to Additional Include Directories list. This will tell the compiler where it can find the header files for Yeppp! library. The $(YEPROOT) environment variable specifies the directory where Yeppp! SDK is installed. This variable is set by Yeppp! SDK installer.

visual-studio-compiler-options-general.png

Similarly, expand the "Linker" option group, and open "General" subgroup of options. Add $(YEPROOT)\binaries\windows\ to Additional Library Directories list, so the linker will know where to search for Yeppp! import library (yeppp.lib). The path will expand to $(YEPROOT)\binaries\windows\x86 for 32-bit (x86) builds, and to $(YEPROOT)\binaries\windows\amd64 when targeting 64-bit (x64 AKA amd64) platform.

visual-studio-linker-options-general.png

Now switch to "Input" subgroup of Linker options. Add yeppp.lib to Additional Dependencies list. This file provides the linker with information about the functions in Yeppp! library.

visual-studio-linker-options-input.png

Finally, you need to let Windows know where to find Yeppp! DLL. The easy way to achieve it is to copy yeppp.dll (which should match your target platform) to your output directory.

Now you are ready to use Yeppp!

Using Yeppp! with command-line tools on Windows

Download the recent release of Yeppp! from the official website. On Windows we recommend that you use the MSI installer for Yeppp! SDK. The installer will install the library components, and also set YEPROOT environment variable.

Open the Visual Studio Command Prompt for your target platform (x86 or x64). With Yeppp! we provide a shell script to set up environment variables. In the Visual Studio Command Prompt execute the command

"%YEPROOT%\SetVars.bat" <arch>

where <arch> specifies the architecture for which you want to compile your program. The following values are accepted:

You can also omit the <arch> parameter. This case the setup script will auto-detect the OS architecture and set the environment variable accordingly.

The SetVars.bat script modifies environment variables INCLUDE and LIB which tell the compilers where to search for Yeppp! headers and import library. It also sets environment variables to let the system find Yeppp! when you execute a program which makes use of this library.

Now just add yeppp.lib option when linking your program, e.g.

link /OUT:HelloWorld.exe HelloWorld.obj yeppp.lib

and you are ready to use Yeppp! in your codes!

Using Yeppp! with Android NDK on Windows

Download the recent release of Yeppp! from the official website. On Windows we recommend that you use the MSI installer for Yeppp! SDK. Make sure that you mark "Android NDK Integration" feature for installation, and that the installation directory does not contain any spaces. The installer will install the library components, and also set YEPROOT environment variable.

Yeppp! integrates with Android NDK as an import module. To enable Yeppp! in your Android NDK project, first open the Android.mk in a text editor. Add yeppp to the list of required shared libraries:

LOCAL_SHARED_LIBRARIES += yeppp

In the end of Android.mk file add the line

$(call import-module,yeppp)

(note that there is no space before yeppp).

Now open a Command Prompt window and execute command

"%YEPROOT%\SetVars.bat"

(you may still specify the <arch> parameter as described in the previous section, but it is not necessary for building Android programs).

The SetVars.bat script adjusts environment variable NDK_MODULE_PATH which is used by Android NDK build system to find import module desciptions.

Now you can use this Command Prompt window to build your Yeppp! -powered Android NDK projects via the standard ndk-build script.

Using Yeppp! with command-line tools on Linux and Mac OS X

Download and unpack the recent release of Yeppp! from the official website.

Open a terminal window where you plan to build your program. With Yeppp! we provide a shell script to set up environment variables. Navigate to Yeppp! directory and execute command

source set-vars.sh <arch>

If your shell does not support source command, use the equivalent command

. set-vars.sh <arch>

<arch> specifies the architecture/ABI for which you want to compile your program. The following values are accepted:

You can also omit the <arch> parameter. This case the setup script will auto-detect the host architecture and set the environment variable accordingly.

The set-vars.sh script modifies environment variables CPATH and LIBRARY_PATH which tell the compilers where to search for Yeppp! headers and binaries. However, when doing cross-compilation the linker ignores LIBRARY_PATH variable, so you will need to manually specify the search directory for Yeppp! binaries by adding -L to LDFLAGS. It also sets environment variables to let the dynamic linker find Yeppp! when you execute a program which makes use of this library.

Now just add -lyeppp option when linking your program, e.g.

gcc HelloWorld.o -o HelloWorld -lyeppp

and you can use Yeppp! in your codes!

Using Yeppp! with Android NDK on Linux and Mac OS X

Download and unpack the recent release of Yeppp! from the official website.

Yeppp! integrates with Android NDK as an import module. To enable Yeppp! in your Android NDK project, open the Android.mk in a text editor and add yeppp to the list of required shared libraries:

LOCAL_SHARED_LIBRARIES += yeppp

In the end of Android.mk file add the line

$(call import-module,yeppp)

(note that there is no space before yeppp).

Open a terminal window where you plan to build your program and execute command

source set-vars.sh <arch>

If your shell does not support source command, use the equivalent command

. ./set-vars.sh <arch>

(you may still specify the <arch> parameter as described in the previous section, but it is not necessary for building Android programs).

The set-vars.sh script adjusts environment variable NDK_MODULE_PATH which is used by Android NDK build system to find import module desciptions.

Now you can use this terminal window to build your Yeppp! -powered Android NDK projects via the standard ndk-build script.