diff --git a/Cargo.toml b/Cargo.toml index 21df1cc..eee2d1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ keywords = ["fft", "dft", "discrete", "fourier", "no_std"] categories = ["algorithms", "science"] [dependencies] -monarch-derive = "=0.4.0" +monarch-derive = { path = "crates/monarch-derive" } num-complex = "0.4" num-traits = { version = "0.2", default-features = false } diff --git a/assets/linear_comparison.png b/assets/linear_comparison.png index 4073289..a9b1bee 100644 Binary files a/assets/linear_comparison.png and b/assets/linear_comparison.png differ diff --git a/assets/log_comparison.png b/assets/log_comparison.png index aa75915..ed4f630 100644 Binary files a/assets/log_comparison.png and b/assets/log_comparison.png differ diff --git a/crates/benches/generate_benchmark_plot.py b/crates/benches/generate_benchmark_plot.py index a2ba893..41369fa 100644 --- a/crates/benches/generate_benchmark_plot.py +++ b/crates/benches/generate_benchmark_plot.py @@ -38,4 +38,6 @@ plt.xlabel('FFT Size') # plt.yscale('log') plt.legend(loc='upper left') +plt.gcf().set_size_inches(10, 5) +# plt.savefig('../../linear_comparison.png') plt.show() diff --git a/crates/monarch-derive/src/lib.rs b/crates/monarch-derive/src/lib.rs index e47c802..4c8627f 100644 --- a/crates/monarch-derive/src/lib.rs +++ b/crates/monarch-derive/src/lib.rs @@ -114,7 +114,7 @@ pub fn generate_switch(_input: TokenStream) -> TokenStream { /// let input: Vec<_> = (0..8).map(|i| Complex::new(i as f32, 0.0)).collect(); /// let output = fft::<8, _, _>(input); /// ``` - #[inline] + #[inline(always)] pub fn fft]>>(input: A) -> [Complex; N] { let x_in = input.as_ref(); assert_eq!(x_in.len(), N); @@ -135,7 +135,7 @@ pub fn generate_switch(_input: TokenStream) -> TokenStream { /// let input: Vec<_> = (0..8).map(|i| Complex::new(i as f32, 0.0)).collect(); /// let output = ifft::<8, _, _>(input); /// ``` - #[inline] + #[inline(always)] pub fn ifft]>>(input: A) -> [Complex; N] { let x_in = input.as_ref(); assert_eq!(x_in.len(), N); @@ -187,7 +187,7 @@ pub fn generate_powers_of_two(_input: TokenStream) -> TokenStream { quote! { #[doc = concat!("Inner FFT")] - #[inline] + #[inline(always)] pub fn #func]>>(input: A) -> [Complex; #s] { let n = #s; let x = input.as_ref(); @@ -214,7 +214,7 @@ pub fn generate_powers_of_two(_input: TokenStream) -> TokenStream { let expanded = quote! { - #[inline] + #[inline(always)] pub fn fft1]>>(input: A) -> [Complex; 1] { let n = 1; let x = input.as_ref(); @@ -281,7 +281,7 @@ pub fn generate_coprimes(_input: TokenStream) -> TokenStream { quote! { #[doc = concat!("Inner FFT")] - #[inline] + #[inline(always)] pub fn #func]>>(input: A) -> [Complex; #s] { let n = #s; let x = input.as_ref(); @@ -366,7 +366,7 @@ pub fn generate_mixed_radix(_input: TokenStream) -> TokenStream { quote! { #[doc = concat!("Inner FFT")] - #[inline] + #[inline(always)] pub fn #func]>>(input: A) -> [Complex; #s] { let n = #s; let x = input.as_ref(); @@ -548,7 +548,7 @@ pub fn generate_primes(_input: TokenStream) -> TokenStream { quote! { #[doc = concat!("Inner FFT")] - #[inline] + #[inline(always)] pub fn #func]>>(input: A) -> [Complex; #s] { let n = #s; let x = input.as_ref(); @@ -603,7 +603,7 @@ pub fn generate_iffts(_input: TokenStream) -> TokenStream { quote! { #[doc = concat!("Inner iFFT")] - #[inline] + #[inline(always)] pub fn #func]>>(input: A) -> [Complex; #n] { let x = input.as_ref(); assert_eq!(x.len(), #n); @@ -621,7 +621,7 @@ pub fn generate_iffts(_input: TokenStream) -> TokenStream { let expanded = quote! { #[doc = concat!("Inner iFFT")] - #[inline] + #[inline(always)] pub fn ifft1]>>(input: A) -> [Complex; 1] { let n = 1; let x = input.as_ref(); diff --git a/src/lib.rs b/src/lib.rs index 5af4997..466cafb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -73,7 +73,7 @@ fn _compute_twiddle(index: usize, fft_len: usize) -> Comp } #[doc = concat!("Inner FFT")] -#[inline] +#[inline(always)] pub fn fft3]>>(input: A) -> [Complex; 3] { let n = 3; let x = input.as_ref(); @@ -99,7 +99,7 @@ pub fn fft3]>>(input: A) -> [Complex } #[doc = concat!("Inner FFT")] -#[inline] +#[inline(always)] pub fn fft9]>>(input: A) -> [Complex; 9] { let n = 9; let x = input.as_ref(); @@ -132,7 +132,7 @@ pub fn fft9]>>(input: A) -> [Complex } #[doc = concat!("Inner FFT")] -#[inline] +#[inline(always)] pub fn fft18]>>(input: A) -> [Complex; 18] { let n = 18; let x = input.as_ref(); @@ -202,7 +202,7 @@ pub fn fft18]>>(input: A) -> [Comple } #[doc = concat!("Inner FFT")] -#[inline] +#[inline(always)] pub fn fft27]>>(input: A) -> [Complex; 27] { let n = 27; let x = input.as_ref(); @@ -279,7 +279,7 @@ pub fn fft27]>>(input: A) -> [Comple } #[doc = concat!("Inner FFT")] -#[inline] +#[inline(always)] pub fn fft125]>>(input: A) -> [Complex; 125] { let n = 125; let x = input.as_ref();