5 ms·
From the docs: 1.2 Features of VCL ∙ Vectors of 8-, 16-, 32- and 64-bit integers, signed and unsigned ∙ Vectors of single and double precision floa
by jey 7y ago
From the docs:
1.2 Features of VCL
∙ Vectors of 8-, 16-, 32- and 64-bit integers, signed and unsigned
∙ Vectors of single and double precision floating point numbers
∙ Total vector size 128, 256, or 512 bits
∙ Defines almost all common operators
∙ Boolean operations and branches on vector elements
∙ Many arithmetic functions
∙ Standard mathematical functions
∙ Permute, blend, gather, scatter, and table look-up functions
∙ Fast integer division
∙ Can build code for different instruction sets from the same source code
∙ CPU dispatching to utilize higher instruction sets when available
∙ Uses metaprogramming to find the optimal implementation for the selected instruction set and parameter values of a given operator or function
∙ Includes extra add-on packages for special purposes and applications
(Tldr: this is for CPU vectors and isn't directly comparable to a linear algebra library like Eigen.)
- throwaway542134 7y ago> ∙ CPU dispatching to utilize higher instruction sets when available What's the advantage of hand rolled CPU dispatching over compiler intrinsincs like function multiversioning in GCC/Clang?
- pdovy 7y agoFMV is pretty neat but there are scenarios where it's not ideal, so I'm not surprised to see it not used in what is meant to be a lightweight high performance library. Notably the fact that the dispatching is done at runtime means you are trading off the convenience factor for code size and running extraneous dispatching code in your critical path. Additionally I've anecdotally seen on modern Intel hardware the power heuristics can penalize you for even _speculatively_ running some of the wider instruction sets.
- throwaway542134 7y agoAm I missing something? The CPU dispatching in this library is done at runtime too... I thought FMV only has a penalty on the first call?
- pdovy 7y agoAh apologies, I only took a cursory look at his dispatching logic. It looks to me like it supports both modes, but you have to hand roll the dispatching logic if you want to use it at runtime (but he provides an example). If you _really_ need the runtime dispatch then yeah I'd agree FMV is probably cleaner.