VOLK News

Release v1.2.3

02 Jul 2016 by Nathan West

Release v1.2.3

Contributors

Changes

The index_max kernels were named with the wrong output datatype. To fix this there are new kernels that return a 32u (int32_t) and the existing kernels had their signatures changed to return 16u (int16_t).

The output to stdout and stderr has been shuffled around. There is no longer a message that prints what VOLK machine is being used and the warning messages go to stderr rather than stdout.

MSVC builds without explicitly set flags.

VolkConfig.cmake includes a hardcoded install path so that VOLK is easier to find in non-standard prefixes. Similarly the BOOST_ROOT environment variable is no longer overridden so that it is easier to find BOOST in non-standard prefixes.

The 32fc_index_max kernels previously were only accurate to the SSE register width (4 points). This was a pretty serious and long-lived bug that's been fixed and the QA updated appropriately.

Release v1.3

02 Jul 2016 by Nathan West

Release v1.3

Contributors

Changes

Several new kernels are available. These include several type conversions, some fixed point complex operations, and a complex float divide.

Volk_config functions are now overloaded to be able to read and write to a custom volk_config path which can be controlled with a new --path option in volk_profile.

Volk-config-info can now tell you the alignment VOLK is using for your CPU and malloc implementation used in volk_profile.

Builds define the Dual ABI macro _GLIBCXX_USE_CXX11_ABI to 1, which should allow builds with GCC 4 when linking against C++ libraries that are built with GCC 5.

Release v1.2.2

07 Apr 2016 by Nathan West

Release v1.2.2

Contributors

Changes

This is a maintenance release the primarily addresses build issues, primarily for MSVC. Additionally, this fixes an issue when building as a sub-project of GNU Radio with cmake versions >= 3.5

Release v1.2.1

07 Feb 2016 by Nathan West

Release v1.2.1

Contributors

Changes

Profiler

  • Fixed a segfault in the polar butterfly puppet
  • Reverted back to input values in range [-1, 1] rather than [-pi, pi].

Builds (all windows related)

  • Add MSVC 14 to processor detection
  • Minor tweaks to fix builds on MSVC 2015

Kernels

Small performance improvement in log2 by switching to log2f, which is explicitly for floats.

Add reusable intrinsics for NEON. This continues the push for creating an internal library of intrinsics that will make composing more complex kernels from simpler reusable building blocks without going back to memory.

Release v1.2

23 Dec 2015 by Nathan West

Release v1.2

Contributors

Changes

Kernels

New kernels for doing polar codes are available with generic, SSE3, and AVX implementations. This is the result of ESA SoC by Jannes Demel and used in GNU Radio.

The rotator protokernels now normalize phase after every time finished through the main for loop to guarantee normalization happens for a series of calls with smaller vector lengths.

Some kernels now use inacc tolerances for QA. The kernels themselves are exactly the same funcationality as before, but with the existing QA tolerance would fail on NEON due to sqrt and inverse approximations in NEON.

Release v1.1.1

31 Oct 2015 by Nathan West

Release v1.1.1

This is the first maintenance release with only bug fixes since v1.1

Contributors

The following authors have contributed code to this release:

Changes

Coverity

Ben spent the post-GRcon hackfest fixing a few errors that the GNU Radio coverity scan reported. The critical fix was a potential buffer overflow in the profiler while reading existing results.

Builds

Based on feedback from packagers VOLK has made strides towards reproducible builds. The latest effort is removing the builddate.

Several header includes and ifdef guards have been shuffled around to make VOLK out of tree modules easier to work with and ARM builds more robust to compiler whims.

Release v1.1

24 Aug 2015 by Nathan West

Release v1.1

Contributors

The following authors have contributed code to this release:

Changes

This release contains all of the bug fixes from v1.0.1 and v1.0.2 as well as new features and other changes that didn't belong on maint. The following is a summary of non-maint changes.

Architectures

New architectures exist for the AVX2 and FMA ISAs. Along with the build-system support the following kernels have no proto-kernels taking advantage of these architectures:

  • 32f_x2_dot_prod_32f
  • 32fc_x2_multiply_32fc
  • 64_byteswap
  • 32f_binary_slicer_8i
  • 16u_byteswap
  • 32u_byteswap

QA/profiler

The profiler now generates buffers that are vlen + a tiny amount and generates random data to fill buffers. This is intended to catch bugs in protokernels that write beyond num_points.

Miscellaneous

  • All builds now use '-Wall'
  • Removed stray references to PCC and Altivec

Maintenance Release v1.0.2

24 Jul 2015 by Nathan West

Release v1.0.2

This is a relatively minor maintenance release with bug fixes since v1.0.1.

Contributors

The following have contributed code to this release:

Changes

The major change is the CMake logic to add ASM protokernels. Rather than depending on CFLAGS and ASMFLAGS we use the results of VOLK's built in has_ARCH tests. All configurations should work the same as before, but manually specifying CFLAGS and ASMFLAGS on the cmake call for ARM native builds should no longer be necessary.

The 32fc_s32fc_x2_rotator_32fc generic protokernel now includes a previously implied header.

Finally, there is a fix to return the "best" protokernel to the dispatcher when no volk_config exists. Thanks to Alexandre Raymond for pointing this out.

Maintenance Release v1.0.1

08 Jul 2015 by Nathan West

This is a maintenance release with bug fixes since the initial release of v1.0 in April.

Contributors

The following authors have contributed code to this release:

Changes

Kernels

Several bug fixes in different kernels. The NEON implementations of the following kernels have been fixed:

  • 32f_x2_add_32f
  • 32f_x2_dot_prod_32f
  • 32fc_s32fc_multiply_32fc
  • 32fc_x2_multiply_32fc

Additionally the NEON asm based 32f_x2_add_32f protokernels were not being used and are now included and available for use via the dispatcher.

The 32f_s32f_x2_fm_detect_32f kernel now has a puppet. This solves QA seg faults on 32-bit machines and provide a better test for this kernel.

The 32fc_s32fc_x2_rotator_32fc generic protokernel replaced cabsf with hypotf for better Android support.

Building

Static builds now trigger the applications (volk_profile and volk-config-info) to be statically linked.

The file gcc_x86_cpuid.h has been removed since it was no longer being used. Previously it provided cpuid functionality for ancient compilers that we do not support.

All build types now use -Wall.

QA and Testing

The documentation around the --update option to volk_profile now makes it clear that the option will only profile kernels without entries in volk_profile. The signature of run_volk_tests with expanded args changed signed types to unsigned types to reflect the actual input.

The remaining changes are all non-functional changes to address issues from Coverity.

Initial Release

11 Apr 2015 by Nathan West

VOLK 1.0 is available. This is the first release of VOLK as an independently tracked sub-project of GNU Radio.

Contributors

VOLK has been tracked separately from GNU Radio since 2014 Dec 23. Contributors between the split and the initial release are

Changes

QA

The test and profiler have significantly changed. The profiler supports run-time changes to vlen and iters to help kernel development and provide more flexibility on embedded systems. Additionally there is a new option to update an existing volk_profile results file with only new kernels which will save time when updating to newer versions of VOLK

The QA system creates a static list of kernels and test cases. The QA testing and profiler iterate over this static list rather than each source file keeping its own list. The QA also emits XML results to lib/.unittest/kernels.xml which is formatted similarly to JUnit results.

Modtool

Modtool was updated to support the QA and profiler changes.

Kernels

New proto-kernels:

  • 16ic_deinterleave_real_8i_neon
  • 16ic_s32f_deinterleave_32f_neon
  • fix preprocessor errors for some compilers on byteswap and popcount puppets

ORC was moved to the asm kernels directory.

volk_malloc

The posix_memalign implementation of Volk_malloc now falls back to a standard malloc if alignment is 1.

Miscellaneous

Several build system and cmake changes have made it possible to build VOLK both independently with proper soname versions and in-tree for projects such as GNU Radio.

The static builds take advantage of cmake object libraries to speed up builds.

Finally, there are a number of changes to satisfy compiler warnings and make QA work on multiple machines.