-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
support split complex arrays (separate real/imag arrays) #255
Comments
The best approach is for |
Yes, this could utilize the FFTW's Although specifically supporting StructArrays.jl is something for an extension, we could help out in FFTW.jl by adding |
I have a use case for this: One of the common operations in GPS signal processing is signal correlation in frequency domain by doing fft -> multiply by complex conjugate of fft(local signal) -> ifft -> abs2 (for some operations, for example for signal acquisition) But for LoopVectorization or SIMD in general to work with complex multiplication we need to deinterleave the complex array. Then we need to reinterleave it so we can feed it to ifft. So what we have now is
I haven't see FFTW source code myself, but it might do deinterleaving and interleaving inside, so we have so many useless data movement:
If we have FFTW split complex interface implemented in
|
A higher level interface would certainly be useful |
Is the time for complex multiplication significant compared to the time for the FFT? (Note that the FFT performance may suffer for split complex arrays, IIRC.) |
MethodError: no method matching plan_fft(::StructVector{ComplexF64, NamedTuple{(:re, :im), Tuple{Vector{Float64}, Vector{Float64}}}, Int64}, ::UnitRange{Int64}; flags=0x00000000)
The text was updated successfully, but these errors were encountered: