-
Notifications
You must be signed in to change notification settings - Fork 9
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
Implement AbstractNFFTs #38
Comments
(Side comment: I just read through the papers of FINUFFT and this is awesome work that you have done! This makes me wanting the wrapper for myself so that we can use it over in MRIReco.jl ) And one more direct comment to the interface: While |
Dear Tobias, Our devs on the Julia side is @ludvigak @lu1and10 and myself, and I don't know how much time people have right now, but it seems like a short self-contained project. Comments:
Best wishes, Alex |
Thanks so much for you positive feedback! In the meantime I was greedy and gave it a try:
we will see ... :-) I have the benchmarks already running but at this point they are not yet serious since my wrapper is certainly not ideal.
Actually I am very(!) interested in cuFINUFFT. So please, please make this available as a Julia package. We have a very preliminary CuNFFT but that is more a toy thing. Getting cuFINUFFT would thus be very very much appreciated.
I am not completely in a hurry but would like to streamline the interface of AbstractNFFT.jl now. Still waiting on feedback of
Totally agree. I know the origins of NFFT and various applications. I implemented the NNFFT (NuFFT type 3) in NFFT3 when I studied computer science. But actually NFFT.jl should already be completely independent of applications.
We will have "standard" parameters but it will always be possible to tweak a plan with implementation specific parts. Regarding the parameters my proposal right now is:
I agree, no MRI speech! But still, these two names make also sense when looking at the NFFT purely from the signal processing / mathematical perspective. For the term "apodization" I am not 100% sure but the term "convolution" definitely fits. How would you call them otherwise? When teaching NFFT I always give the intuitive explanation via the convolution theorem before I make the formal derivation, which is more technical.
:-) why we did this: because we can! But don't worry about this since it is certainly pretty exotic. We will simply implement this part only partially with FINUFFT. Actually NFFT3 does not provide this at all and thus is more restricted. But as my goal for the abstract interface is to be very general I came up with this solution. By the way: FINUFFT seems also not be capable of doing 4D transforms, which nobody is doing anyway. In that case we need also to raise an error but that is fine. So we will always have feature that one backend will not have.
This is probably the most important point I need to think about. Right now my idea would be to have a dedicated plan for the type 3 NUFFT (/NNFFT). So it would be
I am glad to get feedback and corrections! Just note that this is work in progress. So I am aware that the documentation is full of typos. This is the downside of developing things in the open. :-)
Isn't that Thank you very much already for all these very good points! |
Tobias and crew have wrapped FINUFFT in NFFT.jl here: I'm not sure there's anything to do right now, until AbstractNFFTs.jl becomes a separate repo, includes mathematical definitions/conventions of transforms (like AbstractFFTs.jl does, although for them that task was very easy), and has various interface changes I like the idea of eventual intergration, so I'll leave this open. |
Hi,
over at NFFT.jl I have been working on an
AbstractNFFTs.jl
interface package that allows to use different NFFT implementations. The design is similar to that ofAbstractFFTs.jl
, which also allows for different implementations of the ordinary FFT.Some more background can be found here:
JuliaMath/NFFT.jl#59
The question is if
FINUFFT.jl
would be interested in implementingAbstractNFFTs.jl
FINUFFT.jl
.Currently we have one CPU (
NFFT.jl
) and one GPU (CuNFFT.jl
) implementation. Further I have a wrapper forNFFT3.jl
(https://github.com/JuliaMath/NFFT.jl/blob/master/NFFT3/NFFT3.jl) that will hopefully be incorporated inNFFT3.jl
soon.The wrapper would not need to be your primary interface. It's just an additional interface being compatible with the common interface.
Best,
Tobias
The text was updated successfully, but these errors were encountered: