Skip to content

Latest commit

 

History

History
539 lines (382 loc) · 14.9 KB

CHANGELOG.md

File metadata and controls

539 lines (382 loc) · 14.9 KB

Changelog

6.0.2

Added

  • Windows arm64 support
  • Emscripten (wasm/wasm64) support

Changed

  • complex_size now takes dft_pack_format as parameter

6.0.0

  • 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

2023-11-27

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 kfrlib#198
  • std::is_pov is peprecated in C++20 kfrlib#190
  • DFT sizes 0 and 1 were not processed correctly kfrlib#195
  • Internal compiler error in Visual Studio Compiler 19.37 kfrlib#194
  • Goertzel issue kfrlib#121
  • Bug in nearest_real_or_complex kfrlib#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

2023-10-11

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

2023-06-26

Added

  • Planck-taper window function

Fixed

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

5.0.2

2023-01-25

Performance

  • ARM/ARM64 performance has been improved up to 2 times in various usage scenarios, including DFT.

Fixed

  • Fix sine and other functions not accepting scalar references
  • Fix possible name conflict with fmt

5.0.1

2022-12-06

Changed

  • Documentation updates

Fixed

  • MSVC fixes
  • Ambiguous assign operator fixes

5.0.0

2022-11-30

Added

  • 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

Changed

  • Documentation updates

4.3.1

2022-11-23

Fixed

  • C++20 compatibility fixes

4.3.0

2022-10-14

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

4.2.1

2021-04-29

Fixed

  • AVX512 intrinsics in MSVC and GCC
  • carg
  • Python 3.7 compatibility

Changed

  • Global constants are now inline

4.2.0

2020-02-17

Added

  • ENABLE_DFT_MULTIARCH cmake option can be used to build kfr_dft with multiple architectures support (x86/x86_64 only)
  • config.h is generated during install step with all #defines needed for correct usage of installed libraries

Changed

  • CMAKE_INSTALL_PREFIX is reset to empty on Win32 (can be overriden in cmake command line)
  • C API binary is now installed using install command (make install, ninja install or cmake --build . --target install)

4.1.0

2020-03-04

Added

Changed

  • cdirect_t{} is now allowed in real dft plan methods for compatibility
  • complex support for convolve_filter (thanks to https://github.com/slarew)

Fixed

4.0.0

2019-12-05

Added

  • IIR filter design
    • Butterworth
    • Chebyshev type I and II
    • Bessel
    • Lowpass, highpass, bandpass and bandstop filters
    • Conversion of arbitrary filter from Z,P,K to SOS format (suitable for biquad function and filter)
  • Discrete Cosine Transform type II and III
  • cmake uninstall target
  • C API:
    • DFT
    • real DFT
    • DCT
    • FIR
    • IIR
    • Convolution
    • Aligned memory allocation
    • Built for SSE2, SSE4.1, AVX, AVX2, AVX512, x86 and x86_64, architecture is selected at runtime
  • New vector based types:
    • color
    • rectangle
    • point
    • size
    • border
    • geometric vector
    • 2D matrix
  • Color space conversion:
    • sRGB
    • linear RGB
    • XYZ
    • Lab
    • LCH
    • HSV
  • MP3 audio reading
  • aligned_reallocate function
  • zip and column functions
  • vec<vec<vec<T>>> support
  • New example: iir.cpp
  • biquad that gets std::vector of biquad_params
  • csqr function
  • factorial function
  • isreal function
  • make_complex function for expressions
  • New optimization technique for vector element shuffle
  • std::get<> support for vec<>
  • C++17 structured bindings support for vec<>
  • comparison operators for cvals_t
  • compile time cminof, cmaxof functions
  • vector_width_for constant to get vector width for specific architecture
  • make_univector for containers and arrays
  • univector: copy constructor optimization
  • Custom assertion_failed

Changed

  • C++17 compiler is required. Some of C++17 library features may be missing, in this case KFR uses custom implementation
  • cast function now works with both vectors and expressions (expression versions was previously called convert)
  • Memory alignment can be up to 32768
  • New implementation for cometa::function using shared pointer
  • memory.hpp allocation functions has been moved to cometa
  • cconj has been moved to simd module (instead of math)
  • dr_libs version updated
  • All global constants are now inline constexpr
  • enums moved out of architecture namespace
  • special_constant::undefined removed

Fixed

  • Fixed real DFT with raw poitners
  • Bug with generators
  • Fixed grid issues in dspplot
  • Wrong index in concatenate
  • csqrt function
  • Fixed NaNs in amp_to_dB
  • GCC 9 support
  • Workaround for Clang 8.0 FMA code generator bug
  • Flat top window
  • SSE4.2 detection (previously detected as SSE4.1)

Notes

  • MSVC support is limited to MSVC2017 due to ICE in MSVC2019. Once fixed, support will be added
  • DFT is limited to Clang due to ICE in MSVC and broken AVX optimization in GCC 8 and 9. Once fixed, support will be added

3.0.9

2019-04-02

Added

  • reduce supports different types and containers other than univector
  • Assignment operators for univector: +=, *= etc
  • concatenate function to concatenate two expressions sequentially
  • Audio file IO: read_channels/write_channels to read channels data directly without interleaving/deinterleaving
  • as_string: support for std::vector

Changed

  • expression_scalar: support for vec<T>

Fixed

  • CPU detection in cmake subdirectory
  • MSVC 2017 32-bit intrinsics

3.0.8

2019-03-15

Added

  • Ability to pass random_bit_generator by reference
  • Tests for iOS ARM and ARM64

Changed

  • kfr::complex is placed in kfr namespace

Fixed

3.0.7

2019-03-13

Added

  • Detected CPU is now saved to CMake cache
  • Linux/AArch64 tests have been added to CI

Changed

  • mask<> is now a specialization of vec<>. This allows using many vec functions for masks
  • short_fir performance has been increased by around 50%-60%

Fixed

  • Fixed the bug with infinitely loading in Intellisense

3.0.6

2019-03-07

Added

  • Android arm & arm64 tests have been added to CI

Fixed

3.0.5

2019-02-21

Added

  • DFT speeds have been improved by up to 15% on most modern cpus
  • Support for MSVC 2017
  • Support for GCC 7.3
  • Support for GCC 8.2
  • Support for resampling complex vectors (Thanks to https://github.com/ermito)
  • Tests for various math functions no longer depend on MPFR

Changed

  • Testo now allocates much less memory during long tests (x3 less than previously)

Fixed

3.0.4

2019-01-08

Added

Changed

  • KFR_READCYCLECOUNTER may be redefined to point to any function returning (pseudo-)random value
  • Ability to disable random number initialization functions

Fixed

3.0.3

2018-12-27

Added

  • Partial compatibility for Visual Studio 2017
  • Support for KFR_USE_STD_ALLOCATION
  • univector support for abstract_reader/abstract_writer

Changed

Fixed

  • Paths in CMakeLists.txt

3.0.2

2018-12-19

Added

  • More documentation
  • dspplot: freqticks parameter
  • dspplot: freq_lim parameter
  • dspplot: freq_dB_lim parameter
  • dspplot: phasearg parameter
  • More tests for Sample Rate Converter

Changed

  • Sample Rate Converter: now computes the transition width of the filter. This makes cutoff frequency more precise
  • Sample Rate Converter: now uses Kaiser window with different β parameter for different quality. This leads to a better balance between transition width and sidelobes attenuation.
  • Sample Rate Converter: quality parameter is now passed as runtime parameter rather than compile time parameter
  • fir.cpp example has been extended to include examples of applying FIR filters

Fixed

  • amp_to_dB function
  • 24-bit audio reading

3.0.1

2018-11-28

Added

  • WAV file reading/writing
  • FLAC file reading
  • Audio sample conversion
  • Interleaving/deinterleaving
  • sample_rate_converter example
  • Sample Rate Converter: process() function

Changed

  • Assignment to an empty vector resizes it
  • New documentation
  • KFR IO is now built separately (only needed for audio file support)

Fixed

  • Resampler bug: sequential calls to resampler::operator() may fail

3.0.0

Added

  • Optimized non-power of two DFT implementation
  • Full AVX-512 support
  • EBU R128
  • Ability to include KFR as a subdirectory in cmake project
  • Number of automatic tests has been increased
  • C API for DFT
  • Partial GCC 8.x support
  • Ability to make sized linspace
  • fraction type

Changed

  • GPL version changed from 3 to 2+
  • Refactoring of DFT code
  • KFR DFT is now built separately
  • FIR filter now supports different tap and sample types (thanks to @fbbdev)

Fixed

  • Various fixes for KFR functions
  • FFT with size=128 on architectures with SSE only
  • Small kfr::complex type fixes