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

Preparation for release #11

Open
25 of 31 tasks
yasahi-hpc opened this issue Dec 13, 2023 · 0 comments
Open
25 of 31 tasks

Preparation for release #11

yasahi-hpc opened this issue Dec 13, 2023 · 0 comments
Assignees
Labels
enhancement New feature or request user story project user story

Comments

@yasahi-hpc
Copy link
Collaborator

yasahi-hpc commented Dec 13, 2023

Here are the current lists from #8 (comment).

  • Add AUTHORS, who should be? Just myself for the moment (Improve docs #23)
  • Unuse double underscore identifiers like __KOKKOSFFT_NORMALIZATION_HPP__ (Cleanup #8)
  • Rename FFT_Normalization to Normalization because they are already under KokkosFFT namespace (Cleanup #8)
  • Add installation part to CMakeLists.txt. Also add installation test in GitHub actions (Adding install capability #22). Thanks a lot for your help! @cedricchevalier19
  • Support transforms over odd number. The number of points for FFT direction is limited to be even number (so that the size after transform would be n/2+1) (identity tests on odd numbers #21)
  • More static assertions. Particularly, we assume that the In and Out Views have same Layout and ranks, which should be checked. (Add more static assertions #26)
  • Introduce ExecSpace as a template argument as well as DDC. This allows the coexistence of fft helpers for both host and device (Exec space as arg #12):
// As a template parameter
KokkosFFT::fft<Kokkos::OpenMP>(a, out); // a and out are on Host or Device is CPU
KokkosFFT::fft<Kokkos::Cuda>(a, out); // a and out are on Device

// As an argument
KokkosFFT::fft(Kokkos::OpenMP(), a, out); // a and out are on Host or Device is CPU
KokkosFFT::fft(Kokkos::Cuda(), a, out); // a and out are on Device

We can also make a check for memory and exec space consistency by

static_assert(
  Kokkos::SpaceAccessibility<ExecSpace, MemorySpace>::accessible,
  "MemorySpace has to be accessible for ExecutionSpace."
);
  • Add capability to reuse plans. This is particularly important for NVIDIA GPUs, which has some overheads to create plans (Reuse plan #19)
  • Management of default arguments. As well as numpy, I would like to allow the function calls with minimum overloading (Reuse plan #19)
KokkosFFT::fft(execution_space(), a, out);
KokkosFFT::fft(execution_space(), a, out, /*axis=*/-1);
KokkosFFT::fft(execution_space(), a, out, /*n=*/n0);
KokkosFFT::fft(execution_space(), a, out, KokkosFFT::FFT_Normalization::BACKWARD);
KokkosFFT::fft(execution_space(), a, out, KokkosFFT::FFT_Normalization::BACKWARD, /*axis=*/*-1);
KokkosFFT::fft2(execution_space(), a, out, KokkosFFT::FFT_Normalization::BACKWARD, /*axes=*/axes_type{-2, -1});
KokkosFFT::fft(execution_space(), a, out, plan, KokkosFFT::FFT_Normalization::BACKWARD, /*axis=*/-1);

Particularly, it is difficult to distinguish n and axis, where n is a size_t type and axis is an int type.

using execution_space = Kokkos::DefaultExecutionSpace;
using host_execution_space = Kokkos::DefaultHostExecutionSpace;
KokkosFFT::fft(execution_space(), a, out); // Calling FFTs on Device
KokkosFFT::fft(host_execution_space(), h_a, h_out); // Calling FFTs on Host

The remaining issues which may be important in the future

@yasahi-hpc yasahi-hpc added the enhancement New feature or request label Dec 13, 2023
@jbigot jbigot added the user story project user story label Jan 8, 2024
@yasahi-hpc yasahi-hpc mentioned this issue Jan 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request user story project user story
Projects
None yet
Development

No branches or pull requests

2 participants