KFR 3.0 is released
15 March 2019
Here is a brief summary of the major improvements in this release.
What's new in KFR 3.0
15 March 2019
MSVC, GCC, and AVX512 support, as well as DFT with non-power-of-2 sizes.
Version 1.2.0 has been released: real FFT, FFT plan caching, reduced build times
12 September 2016
New features and notable changes:
How C++14 and C++17 help to write faster (and better) code. Real world examples
29 August 2016
Writing high performance code is always a difficult task. Pure algorithms are not always a good fit for real-world architectures.
Once having begun to speed up all these pure algorithms, we quickly find that some implementation is pretty fast on one architecture, but terribly slow on another while the second implementation outperforms the first one in some contexts losing speed in all the rest.
Numerous big and small optimizations for each of the supported architectures can quickly bloat our code and waste our time.
Compile-time arguments and function wrappers
24 August 2016
Passing values in C++ as template arguments has limitations. For example, when a function template is wrapped in a functor class, there is no way to pass a value as a template argument.
Example: FIR filter in C++
14 August 2016
The following example shows how to apply an FIR filter to audio data using the KFR framework.
#include <kfr/all.hpp> using namespace kfr; int main(int argc, char** argv) { // static array (like std::array) to hold the taps univector<double, 15> taps; // create the window function // the tap count is passed to window_hann // window_hann does not calculate the window immediately // it creates an expression that represents a Hann window expression_handle<double> hann = to_handle(window_hann<double>(taps.
Version 1.0 is now available
12 August 2016
Today the KFR framework has been updated to v1.0.0 and has reached a stable release. Nearly 200 commits have been pushed since the previous version, and many improvements and fixes landed in this release.
What's new in KFR 1.0
12 August 2016
ARM NEON support New in 1.0 One of the most significant features added since the previous version is full ARM NEON support. All algorithms bundled with KFR 1.0 are already optimized for armv7, armv7s and aarch64 (arm64).
Intel SSE2..4.2 and AVX1..2 KFR produces code optimized for the latest Intel and AMD processors as well as for legacy ones.
Generic implementation New in 1.0 In addition to optimized ones, a generic implementation of vector functions is available for all other architectures.
Basic expression tutorial
2 August 2016
The expression is the central entity of the KFR framework.
Input expressions can be read from and output expressions can be written to. A class can be an input and output expression at the same time. univector is an example of such a class.
The data type of an input expression can be determined by calling value_type_of. However, not all expressions have their types specified. In such cases, value_type_of returns the special type generic.