- Switched from packed_simd to
std::simd
. Warning: I no longer have a CPU which supports AVX512, so this option is untested and likely broken.
- Updated dependencies, thanks to Alex Touchet for his help!
- Increased minimum Rust version to 1.67 as this is required by the latest versions of our dependencies
- Fixed panic in complex to real vector operations, #51
- Fixed compilation error on ARM Neon which includes Apples M1 (#49), thanks to Andy Bailey for reporting this issue and for doing tests!
- Update to Rust edition 2021
- Increased minimum Rust version to 1.65 as this is required by the latest versions of our dependencies
- Updated
time
dependency
- Fixed compilation error with
no_std
option
- Updated
rustfft
dependency
- Updated
rustfft
dependency - Memory usage: With
rustfft
version 5 FFTs might require more memory.FixedLenBuffer
s will need to be resized. The defaultSingleBuffer
will adjust itself dynamically. Refer to ejmahler/RustFFT#45 for a more detailed disucssion. - Buffers now resize correctly if the underlying data type allows for it
- Fixed "panic safety issue in
impl TransformContent<S, D> for [S; (2|3|4)]
" (#47). Thanks to Youngsuk Kim.
- Updated
rustfft
andnum-complex
dependencies - Switched from
packed_simd
topacked_simd_2
to avoid build failures for now - Fixed warnings in
interop
crate - Implemented
From
andInto
for the conversion of aDspVec
into astd::Vec
to address #46 - Increased minimum Rust version to 1.43 as the deeper integration with standard types requires https://rust-lang.github.io/rfcs/2451-re-rebalancing-coherence.html
- Fix: in
zero_pad
andzero_pad_b
used a different definiton forPaddingOption::Center
if a complex vector with even points is padded to a resulting vector with odd points
- Updated
rustfft
andnum-complex
dependencies - Switched from
packed_simd
topacked_simd_2
to avoid build failures for now - Fixed warnings in
interop
crate
- Disabled AVX512 as it right now requires an unstable Rust feature
- Updated
time
andlinreg
dependencies - Fixed "UB due to misuse of mem::uninitialized (will soon lead to panic) #44"
- Updated
lazy_static
andarrayvec
dependencies.
This release aims to improve the conversions from Rust standard library types to/from DSP vectors.
- Renamed
complex(..)
function on vectors tocdata(..)
- Redefined index functions for better usability. If the old functionality is required then replace calls to indexers
with call to
.data(..)
and.data_mut(..)
, e.g. (&vec[5..10]
becomesvec.data(5..10)
and&mut vec[5..10]
becomesvec.data_mut(5..10)
) - Changed
FromVector
trait. Callgetf
instead ofget
if the old functionality is required.
- Fixed #40 . Thanks to Carlos Tuñón.
- Replaced
simd
withpacked_simd
- Removed
simd
from default compilation options due to rust-lang/rust#57940 . Compile with--features use_sse2,use_avx2
to get the previous behavior.
- Update to Rust 2018
- Updated dependencies, e.g.
rustfft
- Removed
combined_ops
module as it at best showed performance improvements of 10% which didn't justify the complexity within it. to_real
function ofComplexTimeLinearTableLookup
andComplexFrequencyLinearTableLookup
now takes&self
instead ofself
- Renamed feature
use_sse
touse_sse2
and featureuse_avx
touse_avx2
to avoid confusion with SIMD naming.use_sse2
anduse_avx2
are now active on default. Compile with--no-default-features --features std
to revert to the compile options before this update. ComplexData
is now inmeta::Complex
.RealData
,RealOrComplexData
,TimeData
,FrequencyData
andTimeOrFrequencyData
have been moved similarly. If you used those types then consider to implement against the vector type definitions or traits instead.MultiCoreSettings
now allow more fine grained control over the threading behavior.
Behaviour changes:
The default MultiCoreSettings
now have a core_limit
of 1. That's because enabling multi threading should be a conscious decision,
e.g. due to the overhead of multi threading. The conversion functions with the _par
suffix (e.g. to_real_time_vec_par
)
can be used to get the old behaviour.
Changes:
- Fixed performance issue for small vectors
- If
core_limit > 1
then at first call to a vector function which utilizes multi threading a small internal performance test will be executed to determine reasonable values for how work will be spread among the available threads. Running this benchmark will of course slow down this call (around 200 to 500ms). The assumption is that this is okay as it only happens once. - Only features
use_sse
oruse_avx
: Fixed index out of bounds exceptions in if the input vector is smaller than the SIMD register length. - Fixed calculation error in
dot_product
anddot_product_prec
for vector in real number space. - AVX fixes (only feature
use_avx
): Fixed various calculations for the AVX optimizations. The AVX feature now passes the same tests as SSE and without optimizations. There is only one error in the doc tests left which seems to be related to rust-lang/stdarch#253 although that should be closed.
It's now decided at runtime which SIMD optimization should be used.
Also updated clFFT
dependency.
- Went back from
stdsimd
tosimd
crate.
- Switched from
simd
tostdsimd
crate. - Updated
crossbeam
,ocl
andclFFT
dependencies.
Updated to crossbeam
, arrayvec
, ocl
and clFFT
dependencies.
Updated to rustfft
version 2.0.0
.
API cleanup and fixes. Most API changes should be transparent to users. A few tips for the version update:
- Deprecated functions have been removed. The traits have replacements available, so the documentation should provide an idea what's the intended replacement.
- In some cases in was possible to pass references of references (e.g.
&&vec
) as argument for binary ops (e.g.div
) and that's no longer legal. - Some traits have been redefined. It's assumed that most users won't use the traits directly except for calling functions on vectors. And so most users shouldn't be affected by this change. If this doesn't hold true for your project then feedback in form of a bug or enhancement request is welcomed.
Changes:
zero_pad_b
now returns a result, which may contain an error if the passed argument is smaller than the actual vector length- Renamed
interpolate_vector
tointerpolate_signal
- Removed deprecated functions
swap_halves_b
,statistics_splitted
- Removed
MapInplaceNoArgsOps
for combined ops since they seem to not fit in their independent on how this module progresses. - Restructured statistics traits.
- Mapping operations now only borrow a function. That also allows them to work internally without any reference counting.
- Binary operations are now more flexible regarding what kind of argument they accept.
- Restructured buffers to avoid two classes of errors.
Minor additions.
- Updated
simd
dependency to version0.2
. - New feature: Added
ApproximatedOps
trait. - New feature: New
interpolate
method which offers the same features asinterpolatef
, but the performance should be closer tointerpolatei
. - Fix:
multiply_complex_exponential
didn't consistently tookdelta
into account.
Bugfix release.
- Fix: Not all implementations of
to_complex_time_vec
andto_complex_freq_vec
set the vector length to 0 if a storage of odd length is passed. - Fix: Offset in
zero_pad
ifSurround
orCenter
was chosen and the original vector length is odd. As a result the convolution theorem didn't hold true, that means a multiplication in frequency domain didn't give the same results as a convolution. - Fix:
zero_pad_b
failed to copy the vector completely ifCenter
was the selected option. - Fix: Convolution for vectors produced random results if the allocated size of a vector was different than it's actual size.
- Fix: Buffer
convolve_vector
for matrices now returns all buffers back to the pool. - Performance: Convolution and interpolation now rely on the overlap and add algorithm or spawn worker threads for larger data sizes.
- Fix:
use_sse
anduse_avx
failed to pick the faster implementations. However with the current status of thesimd
crate it's not recommended to use those feature flags. The Rust lib team is right now discussing about the future of thesimd
crate. - Fix: Out or range panic in
add
,sub
,mul
anddiv
for large vectors. - New feature: Added a
TypeMetaData
struct which allows to create a new vector with the same meta data as an existing vector.
Minor additions and improvements.
- Added a method to convolve a matrix with a matrix of impulse responses.
- Added traits with more precise versions of sum, statistics and dot products.
- Performance improvement for
swap_halves
andswap_halves_b
,swap_halves_b
at the same time has been marked as deprecated since it offers no advantage toswap_halves
Added support for matrix operations. In order to allow matrices and vectors to implement the same traits the existing traits had to be renamed and restructured.
- Breaking change: Reorganized existing interfaces so that they can be reused for the matrix types. For that traits have been renamed and sometimes traits have been split in several smaller traits.
- Breaking change: Interop facade is now only compiled with
--features interop
- Breaking change: Removed
complex_data
,data
andoverride_data
(which also had a spelling mistake) in favor for implementations of several Indexer traits. - Crate now compiles with Rust stable
Bugfix release:
- Bugfix: Potential SEGVAULT in add, sub, mul, div, add_smaller, sub_smaller, mul_smaller and div_smaller methods
- Bugfix: SEGVAULT in get_magnitude and complex_dot_product
Bugfix release with a minor enhancement:
- New feature: Added
sum
andsum_sq
operations. - Bugfix: SEGVAULT in complex magnitude op with recent versions of Rust nightly
Added prepared operations/multi operations, see combined_ops
- Breaking change: Renamed a lot of operations so that their names match (more closely) with the
num
crate. Also renamed traits so that all traits which mainly implement operations have similiar names. - Breaking change: RededicateVector trait now defines exactly one conversion. Vectors implement the trait several times so the same functionality is still available.
- Breaking change: perform_operations and related types appear on the API differently now.
Added Apache-2.0 as license option.
Bugfix release: Fixed implementation of AVX operations.
First release: Vectors with a couple of operations are available.