Skip to content

Commit b882363

Browse files
committed
Avoid cloning twiddles
1 parent db4c3d4 commit b882363

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/lib.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ macro_rules! impl_fft_with_opts_and_plan_for {
9797
assert!(reals.len() == imags.len() && reals.len().is_power_of_two());
9898
let n: usize = reals.len().ilog2() as usize;
9999

100-
let mut twiddles_re = planner.twiddles_re.clone();
101-
let mut twiddles_im = planner.twiddles_im.clone();
100+
// Use references to avoid unnecessary clones
101+
let twiddles_re = &planner.twiddles_re;
102+
let twiddles_im = &planner.twiddles_im;
102103

103104
// We shouldn't be able to execute FFT if the # of twiddles isn't equal to the distance
104105
// between pairs
@@ -113,18 +114,21 @@ macro_rules! impl_fft_with_opts_and_plan_for {
113114
_ => (),
114115
}
115116

117+
let mut filtered_twiddles_re = twiddles_re.clone();
118+
let mut filtered_twiddles_im = twiddles_im.clone();
119+
116120
for t in (0..n).rev() {
117121
let dist = 1 << t;
118122
let chunk_size = dist << 1;
119123

120124
if chunk_size > 4 {
121125
if t < n - 1 {
122-
(twiddles_re, twiddles_im) = filter_twiddles(&twiddles_re, &twiddles_im);
126+
(filtered_twiddles_re, filtered_twiddles_im) = filter_twiddles(&filtered_twiddles_re, &filtered_twiddles_im);
123127
}
124128
if chunk_size >= $lanes * 2 {
125-
$simd_butterfly_kernel(reals, imags, &twiddles_re, &twiddles_im, dist);
129+
$simd_butterfly_kernel(reals, imags, &filtered_twiddles_re, &filtered_twiddles_im, dist);
126130
} else {
127-
fft_chunk_n(reals, imags, &twiddles_re, &twiddles_im, dist);
131+
fft_chunk_n(reals, imags, &filtered_twiddles_re, &filtered_twiddles_im, dist);
128132
}
129133
} else if chunk_size == 2 {
130134
fft_chunk_2(reals, imags);

0 commit comments

Comments
 (0)