46

Major Update of Vector Class Library

 4 years ago
source link: https://www.tuicool.com/articles/aI3mYjF
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Good news. I have made a major update of the Vector Class Library.

Highlights:

  • Moved to Github
  • Apache 2.0 License
  • VCL version 2 uses the C++17 standard. Version 1 is still available for compilers not supporting C++17
  • Makes full use of new instruction sets: AVX512F/BW/DQ/VL
  • Support for future instruction sets: AVX512VBMI and VBMI2
  • Improved permute and blend functions, making full use of C++17 metaprogramming features
  • Testbench for systematic testing of VCL
  • Add-on packages for various purposes

This has been a lot of work, and it has been postponed because I have been busy on other projects. But finally VCL version 2.00 is here. The new C++14 and C++17 standards allow me to do a lot of metaprogramming, especially in the permute and blend functions. The code will do a lot of calculations and search to find the optimal implementation of a particular permutation pattern - at compile time. The result is just one or a few instructions to execute at run time. These metaprogramming features are something that I have been longing for. Version 1 of VCL used a lot of awkward tricks to work with the limited metaprogramming possibilities.

The AVX512 instruction set adds a lot of instructions that we have been missing. It also adds more efficient branching and conditional execution of vector elements. PC processors with AVX512 have been delayed for a couple of years, but now they are available, and they give significant improvement to vector performance.

More than half the work of updating VCL has been testing. I have developed a testbench and a bash script that runs through thousands of combinations of functions, operators, vector classes, instruction sets, compilers, and platforms. Each combination is compiled and tested automatically. It would have been impossible to do so many tests manually. The development of this testbench has certainly been worth the effort. It allowed me to find some hidden bugs in my code - and some bugs in the compilers as well.

The Vector Class Library is already used by programmers all over the world. I am sure that it will be even more useful with these updates.

I have decided for a more permissive license because the selling of commercial licenses gave a lot of administrative and bureaucratic problems for just a small profit. The Apache license will make commercial use of VCL easier. Instead of selling commercial licenses, I am now suggesting that commercial users donate to some open source project.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK