Skip to content

Showcase of parallelization technologies using sequence alignment algorithms

License

Notifications You must be signed in to change notification settings

t-neumann/versalignLib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

versalignLib

Author: Tobias Neumann

Programming language: C/C++11

Technologies: SSE2, AVX2, OpenCL, OpenMP

Source: tar, zip

What is it?

versalignLib is a showcasing project of parallelization technologies comprising implementations of the sequence alignment algorithms Smith-Waterman and Needleman-Wunsch.

It builds a set of libraries, each library containing implementations utilizing a different parallelization technology (OpenMP, SSE2, AVX2, OpenCL). They are provided as shared objects and can be dynamically loaded depending on available resources and can be benchmarked to one another.

For any details on usage and benchmarks of the reference implementation, please refer to the Github wiki.

INSTALLATION

Building versalignLib requires cmake (>=2.8.11), g++ and an OpenCL implementation.

Build tools

Typically cmake and g++ should be already available on your machine. If not, please install them.

OpenMP

To activate OpenMP parallelization, your compiler needs to have OpenMP support. Otherwise all Kernels except the OpenCL Kernel will run single-threaded. OpenMP is natively supported by gcc and for newer versions of Clang.

OpenCL

To build the OpenCL library, an OpenCL implementation must be available on your machine.

Mac

Mac OS X comes natively with an OpenCL implementation. No need for further setup.

Linux

For Linux, versalignLib utilizes the AMD OpenCL™ APP SDK. All you need to to is to make versalignLib aware of the AMD OpenCL™ APP SDK library by setting the following environment variables:

cd versalignLib
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/opencl-AMD-sdk/x86_64/lib"
export OPENCL_VENDOR_PATH="$PWD/opencl-AMD-sdk/x86_64/lib/vendors"

In case the symlink to the libOpenCL.so.1 library is not preserved, recreate it like this:

(cd opencl-AMD-sdk/x86_64/lib ; rm libOpenCL.so ; ln -s libOpenCL.so.1 libOpenCL.so)

AVX2

cmake automatically checks whether AVX2 build support is available and will only produce the shared object if if detects support.

Caveat 1: You still need to check for AVX2 instruction support during runtime, for more see the versalignLib example implementation!

Caveat 2: OpenMP support for the AVX2 Kernel is currently disabled and needs more bugfixing!

Build

To build versalignLib simply run the following commands:

cd versalignLib
mkdir build
cd build

# Release
cmake -DCMAKE_BUILD_TYPE=Release ..
# Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..

make

System requirements

CPU: 64 bit SSE2 enabled, (optional) AVX2 enabled
RAM: Tested on regular systems with minimum 4 GB RAM
OS: Linux (Ubuntu Server 16.04, Debian 7.7), Mac OSX (10.11)
Software: cmake (>=2.8.11)