Skip to content
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 Type 3? #3

Open
dfm opened this issue Nov 8, 2021 · 4 comments
Open

Support Type 3? #3

dfm opened this issue Nov 8, 2021 · 4 comments

Comments

@dfm
Copy link
Collaborator

dfm commented Nov 8, 2021

There aren't currently any plans to support the Type 3 transform for a few reasons:

  • I'm not totally sure of the use cases,
  • The logic will probably be somewhat more complicated than the existing implementations, and
  • cuFINUFFT doesn't seem to support Type 3.

Do we want to work around these issues?

@tyler-a-cox
Copy link

tyler-a-cox commented Feb 14, 2024

Hi folks,

I wanted to bump this to see if there was any interest in having this feature added? I've found the Type 3 transform in finufft extremely useful and would love to have autodiff capabilities of that function.

Thanks!

@dfm
Copy link
Collaborator Author

dfm commented Feb 21, 2024

Thanks @tyler-a-cox! It's great to know that you have a use case. One question, how important is GPU support? AFAIK, there still isn't any GPU support for Type 3 transforms (@lgarrison, @ahbarnett - is that right?).

I'm happy to chat through what a CPU implementation would take, but I'm probably currently too over-committed to dedicate much coding time myself right now!

@ahbarnett
Copy link

It's true that GPU type 3 is some way off (maybe this summer?). I also would like to know use-cases for that (eg MRI uses t1 and t2) to understand how to prioritize that.

However, wrapping t3 CPU would be not too hard a generalization of t1, since the source derivatives are similar, but you need to add target derivs too (as in a t2). Much easier project than understanding how the t3 works :)

PS Leslie & I recently realized
flatironinstitute/finufft#415
you could (at least for t1, t2) push the derivatives through to the kernel, so that a combo of value plus derivs could be done with one FFT. Maybe not a game-changer for 1d1 (at most 2x speedup) but, for 3d3 it would turn 7 FFTs into 1.
For now, just a plain vectorized stack of 7 3d3 calls is the way to evaluate all derivs for 3d3.

@tyler-a-cox
Copy link

Thanks for the responses, @dfm and @ahbarnett! I'm personally interested in using the type 3 transform for simulating radio interferometric measurements. The sources and measurements are often not gridded, requiring us to use the type 3 transform. On CPU alone, we've found that our implementation with the type 3 is an order of magnitude or two faster than our existing simulator, under certain circumstances. We would definitely be interested in a GPU implementation in the future, but for now the CPU implementation would be very useful!

I will take a look at what was done for the type 1 and 2 transforms and see if I can get a CPU implementation running. Thanks again for the help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants