Skip to content
The Vector Optimized Library of Kernels
C++ CMake C Python Assembly Shell Csound
Branch: master
Clone or download

Latest commit

jdemel Merge pull request #379 from jdemel/readme-platforms
readme: Add section on supported platforms
Latest commit e564299 May 19, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows ci: Add Github CI Action Apr 10, 2020
apps shadow: rebase volk_profile fix Apr 10, 2020
cmake versioning: Remove .Maint from libvolk version Apr 9, 2020
docs logo: Add logo at top of README.md Jan 18, 2020
gen python: Move to Python3 syntax and modules Jan 26, 2020
include/volk divide: Optimize complexmultiplyconjugate Apr 8, 2020
kernels Merge pull request #373 from jdemel/divide-avx2 Apr 19, 2020
lib Test the rotator kernel with a realistic scalar May 9, 2020
python/volk_modtool python: Move to Python3 syntax and modules Jan 26, 2020
scripts/ci Using the Intel SDE to test all kernels Nov 8, 2019
tmpl add volk_version.h Feb 12, 2020
tools tools: Update tools/release.sh May 9, 2020
.clang-format
.gitignore Project: Add release script including infrastructure Dec 21, 2019
.gitlab-ci.yml six: Remove build dependency on python six Jan 28, 2020
.lastrelease Release 2.3.0 May 9, 2020
.travis.yml ci: Remove Ubuntu 16.04 GCC5 test on TravisCI May 2, 2020
CHANGELOG.md Release 2.3.0 May 9, 2020
CMakeLists.txt Release 2.3.0 May 9, 2020
CODE_OF_CONDUCT.md Adding the Code of Conduct to the repository. May 20, 2019
COPYING copy GPLv3 license from gnuradio Mar 4, 2015
Doxyfile.in Misc. typos Feb 6, 2018
DoxygenLayout.xml docs: adding kernels page and subpage documentation for a handful of … Feb 2, 2015
README.md readme: Fix wording May 19, 2020
appveyor.yml six: Remove build dependency on python six Jan 28, 2020
versioning.md Added versioning Document Aug 5, 2019
volk.pc.in build: more mods for installation and versioning. Feb 2, 2015

README.md

Build Status Build status Check PR Formatting Run VOLK tests

VOLK Logo

Welcome to VOLK!

VOLK is a sub-project of GNU Radio. Please see http://libvolk.org for bug tracking, documentation, source code, and contact information about VOLK. See https://www.gnuradio.org/ for information about GNU Radio.

VOLK is the Vector-Optimized Library of Kernels. It is a library that contains kernels of hand-written SIMD code for different mathematical operations. Since each SIMD architecture can be very different and no compiler has yet come along to handle vectorization properly or highly efficiently, VOLK approaches the problem differently.

For each architecture or platform that a developer wishes to vectorize for, a new proto-kernel is added to VOLK. At runtime, VOLK will select the correct proto-kernel. In this way, the users of VOLK call a kernel for performing the operation that is platform/architecture agnostic. This allows us to write portable SIMD code.

Bleeding edge code can be found in our git repository at https://www.gnuradio.org/git/volk.git/.

How to use VOLK:

For detailed instructions see http://libvolk.org/doxygen/using_volk.html

See these steps for a quick build guide.

Building on most x86 (32-bit and 64-bit) platforms

$ mkdir build
$ cd build
$ cmake ..
$ make
$ make test
$ sudo make install

# volk_profile will profile your system so that the best kernel is used
$ volk_profile

Building on Raspberry Pi and other ARM boards

To build for these boards you need specify the correct cmake toolchain file for best performace.

  • Raspberry Pi 4 arm_cortex_a72_hardfp_native.cmake
  • Raspberry Pi 3 arm_cortex_a53_hardfp_native.cmake
$ mkdir build && cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake ..
# make -j4 might be faster
$ make
$ make test
$ sudo make install

# volk_profile will profile your system so that the best kernel is used
$ volk_profile

Supported platforms

VOLK aims to be portable to as many platforms as possible. We can only run tests on some platforms.

Hardware architectures

Currently VOLK aims to run with optimized kernels on x86 with SSE/AVX and ARM with NEON.

OS / Distro

We run tests on a variety of Ubuntu versions and aim to support as many current distros as possible. The same goal applies to different OSes. Although this does only happen rarely, it might occur that VOLK does not work on obsolete distros, e.g. Ubuntu 12.04.

Compilers

We want to make sure VOLK works with C/C++ standard compliant compilers. Of course, as an open source project we focus on open source compilers, most notably GCC and Clang. We want to make sure VOLK compiles on a wide variety of compilers. Thus, we target AppleClang and MSVC as well. Mind that MSVC lacks aligned_alloc support for aligned arrays. We use MSVC specific instructions in this case which cannot be free'd with free.

License

Copyright 2015 Free Software Foundation, Inc.

This file is part of VOLK

VOLK is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

VOLK is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with GNU Radio; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301, USA.

You can’t perform that action at this time.