Skip to content

Releases: kfrlib/kfr

6.0.2

14 Feb 10:45
Compare
Choose a tag to compare

What's new in KFR 6

  • DFT performance has been improved up to 40% (backported to KFR 5.2.0 branch)
  • C API for non x86 architectures
  • DSP refactoring with easier initialization
  • Multiarchitecture for resampling, FIR and IIR filters
  • matrix_transpose: optimized matrix transpose (square/non-square, inplace/out-of-place, real/complex, scalar/vectors)
  • CMake config file generation (find_package(KFR CONFIG) support, see installation)
  • .npy format support (reading/writing, v1/v2, c/fortran order, real/complex, bigendian/littleendian)
  • Multidimensional DFT: real/complex
  • inline_vector
  • Windows arm64 support
  • Emscripten (wasm/wasm64) support

Other changes

  • CMake minimum version is 3.12
  • Multidimensional reference DFT
  • Easier cross compilation to ARM64 on x86_64 macOS
  • Automated tests using GitHub Actions (previously Azure Pipelines)
  • GCC 7 and 8: emulate missing avx-512 instrinsics
  • read_group and write_group
  • [❗breaking change] reshape_may_copy and flatten_may_copy in tensor<> allows copying by default
  • shape<>::transpose function
  • tensor<>::transpose function
  • convert_endianess
  • DFT, DSP and IO sources have been moved to src/ directory
  • Multiarchitecture is enabled by default
  • KFR_DFT_NO_NPo2 has been removed (assumed always enabled)
  • Tests refactoring
  • Some tests moved to tests/internal/
  • [❗breaking change] Scalars are now passed by value in expressions (this fixes dangling references in some cases)
  • Expression functions should return expression_make_function instead of expression_function
  • KFR_WITH_CLANG
  • KFR_VERSION CMake variable
  • Functions to get module versions (library_version_dft, library_version_dsp etc)
  • Exceptions are no longer enforced in MSVC
  • kfr::complex removed (use std::complex instead). KFR_STD_COMPLEX cmake variable removed too
  • strides_for_shape for fortran order
  • AARCH and ARM emulation refactoring (dynamic libraries are now supported)
  • call_with_temp
  • maximum_dims is now 16 (was 8)
  • to_fmt/from_fmt supports inplace
  • shape refactoring: rotate_left, rotate_right, remove_back, remove_front
  • temp argument can be nullptr for DFT (temporary buffer will be allocated on stack or heap)
  • dft_plan and similar classes have now default and move constructors
  • -DCMAKE_POSITION_INDEPENDENT_CODE=ON is required for building C API
  • ci/run.sh can now build in a directory outside source tree
  • [❗breaking change]graphics/color.hpp and graphics/geometry.hpp have been removed
  • Simpler CMT_CVAL macro
  • /Zc:lambda is now required for building KFR in MSVC
  • println for string_view
  • MSVC internal compiler error fixed
  • Complex vector operators fixed

6.0.0 RC

05 Feb 21:56
Compare
Choose a tag to compare

What's new in KFR 6

  • DFT performance has been improved up to 40% (backported to KFR 5.2.0 branch)
  • C API for non x86 architectures
  • DSP refactoring with easier initialization
  • Multiarchitecture for resampling, FIR and IIR filters
  • matrix_transpose: optimized matrix transpose (square/non-square, inplace/out-of-place, real/complex, scalar/vectors)
  • CMake config file generation (find_package(KFR CONFIG) support, see installation)
  • .npy format support (reading/writing, v1/v2, c/fortran order, real/complex, bigendian/littleendian)
  • Multidimensional DFT: real/complex
  • inline_vector

Other changes

  • CMake minimum version is 3.12
  • Multidimensional reference DFT
  • Easier cross compilation to ARM64 on x86_64 macOS
  • Automated tests using GitHub Actions (previously Azure Pipelines)
  • GCC 7 and 8: emulate missing avx-512 instrinsics
  • read_group and write_group
  • [❗breaking change] reshape_may_copy and flatten_may_copy in tensor<> allows copying by default
  • shape<>::transpose function
  • tensor<>::transpose function
  • convert_endianess
  • DFT, DSP and IO sources have been moved to src/ directory
  • Multiarchitecture is enabled by default
  • KFR_DFT_NO_NPo2 has been removed (assumed always enabled)
  • Tests refactoring
  • Some tests moved to tests/internal/
  • [❗breaking change] Scalars are now passed by value in expressions (this fixes dangling references in some cases)
  • Expression functions should return expression_make_function instead of expression_function
  • KFR_WITH_CLANG
  • KFR_VERSION CMake variable
  • Functions to get module versions (library_version_dft, library_version_dsp etc)
  • Exceptions are no longer enforced in MSVC
  • kfr::complex removed (use std::complex instead). KFR_STD_COMPLEX cmake variable removed too
  • strides_for_shape for fortran order
  • AARCH and ARM emulation refactoring (dynamic libraries are now supported)
  • call_with_temp
  • maximum_dims is now 16 (was 8)
  • to_fmt/from_fmt supports inplace
  • shape refactoring: rotate_left, rotate_right, remove_back, remove_front
  • temp argument can be nullptr for DFT (temporary buffer will be allocated on stack or heap)
  • dft_plan and similar classes have now default and move constructors
  • -DCMAKE_POSITION_INDEPENDENT_CODE=ON is required for building C API
  • ci/run.sh can now build in a directory outside source tree
  • [❗breaking change]graphics/color.hpp and graphics/geometry.hpp have been removed
  • Simpler CMT_CVAL macro
  • /Zc:lambda is now required for building KFR in MSVC
  • println for string_view
  • MSVC internal compiler error fixed
  • Complex vector operators fixed

5.2.0

27 Nov 14:22
Compare
Choose a tag to compare

This release mainly focuses on DFT performance (which has been increased up to 40% on x86 and x86_64) and bug fixes.

Changed

  • The performance of DFT has been increased up to 40% compared to KFR 5 on x86 and x86_64
    in single and double precision, inplace and out of place processing.

Added

  • KFR_NO_PERF_TESTS define can now disable performance tests
  • CMT_CVAL for extracting constexpr-enabled value from cval_t
  • fft_algorithm_selection to select FFT algorithm for given FFT size.

Fixed

  • Warnings in Clang 10 #198
  • std::is_pov is peprecated in C++20 #190
  • DFT sizes 0 and 1 were not processed correctly #195
  • Internal compiler error in Visual Studio Compiler 19.37 #194
  • Goertzel issue #121
  • Bug in nearest_real_or_complex #137
  • Fixed operators in KFR_STD_COMPLEX mode
  • Testo library: typo in epsilon_scope
  • Fix ambiguities with std::identity (C++20)
  • Force linking in correct order for multi-architecture binaries

5.1.0

11 Oct 23:38
Compare
Choose a tag to compare

Added

  • Tukey window function
  • Subscript operator for vec<>
  • Unary operators for vec<>

Fixed

  • Inverse DCT has been fixed
  • Allow C API to be built on non-x86 systems
  • Tensor iteration range has been fixed
  • transpose(vec<vec<>>) has been fixed
  • vec<bit<>> bug on GCC and MSVC
  • Internal constant is_pod has been removed
  • root and cbrt have been fixed for negative values
  • Fixed numerous warnings in MSVC

5.0.3

26 Jun 21:02
Compare
Choose a tag to compare

Added

  • Planck-taper window function

Fixed

  • Sample rate conversion: automatic zero padding
  • DFT: incorrect result of real dft when input size != 4N #141
  • Add options for installing libraries and headers #182

5.0.2

25 Jan 17:43
Compare
Choose a tag to compare
  • ARM/ARM64 performance has been improved up to 2 times in various usage scenarios, including DFT.
  • Fix sine and other functions not accepting scalar references
  • Fix possible name conflict with fmt

5.0.1

06 Dec 08:53
Compare
Choose a tag to compare
  • New tensor<T, dims> class for multidimensional data (like numpy's nparray)
  • Histogram computation
  • Normal (gaussian) distribution for random number generator
  • Documentation updates
  • All builtin expressions support multiple dimensions
  • Exception support (may be configured to call user-supplied function or std::abort)
  • [changes required] CMake variables now have KFR_ prefix
  • Template parameter deduction for vec, so vec{1, 2} is the same as vec<int, 2>{1, 2}
  • [changes required] random_state is now architecture-agnostic and defined in kfr namespace
  • All expression classes have been moved from kfr::CMT_ARCH_NAME::internal to kfr::CMT_ARCH_NAME namespace
  • expression_traits<T> introduced to support interpreting any object as kfr expression
  • [changes required] User-defined expressions should be rewritten to be used in KFR5
  • Out-of-class assign operators for all input & output expressions
  • round.hpp, clamp.hpp, select.hpp, sort.hpp, saturation.hpp, min_max.hpp, logical.hpp, abs.hpp headers have been moved to simd module
  • state_holder.hpp has been moved to base module
  • All code related to expressions have been moved to base module
  • vec<T, N>::front() and vec<T, N>::front() are now writable
  • set_elements functions for output expressions like get_elements for input expressions

5.0.0

30 Nov 10:38
Compare
Choose a tag to compare
5.0.0 Pre-release
Pre-release
  • New tensor<T, dims> class for multidimensional data (like numpy's nparray)
  • histogram computation
  • normal (gaussian) distribution for random number generator
  • All builtin expressions support multiple dimensions
  • Exception support (may be configured to call user-supplied function or std::abort)
  • [changes required] CMake variables now have KFR_ prefix
  • Template parameter deduction for vec, so vec{1, 2} is the same as vec<int, 2>{1, 2}
  • [changes required] random_state is now architecture-agnostic and defined in kfr namespace
  • All expression classes have been moved from kfr::CMT_ARCH_NAME::internal to kfr::CMT_ARCH_NAME namespace
  • expression_traits<T> introduced to support interpreting any object as kfr expression
  • [changes required] User-defined expressions should be rewritten to be used in KFR5
  • Out-of-class assign operators for all input & output expressions
  • round.hpp, clamp.hpp, select.hpp, sort.hpp, saturation.hpp, min_max.hpp, logical.hpp, abs.hpp headers have been moved to simd module
  • state_holder.hpp has been moved to base module
  • All code related to expressions have been moved to base module
  • vec<T, N>::front() and vec<T, N>::front() are now writable
  • set_elements functions for output expressions like get_elements for input expressions

4.3.1

23 Nov 13:03
Compare
Choose a tag to compare

C++20 compatibility fixes for v4 branch

4.3.0

14 Oct 07:09
Compare
Choose a tag to compare

Changed

  • Compile times improved and memory usage reduced for MSVC and GCC
  • cxxdox version updated
  • Tests for latest Clang, Azure Pipelines images are updated
  • .editorconfig file

Fixed

  • Fixed incompatibility with latest GCC
  • Fixed various Internal Compiler Error in latest MSVC2019
  • Fixed tests for Clang 14
  • Fixed bugs in gather/scatter and read/write functions