diff --git a/src/fastfft/FastFFT.cu b/src/fastfft/FastFFT.cu index c4c6fcd..9b25162 100644 --- a/src/fastfft/FastFFT.cu +++ b/src/fastfft/FastFFT.cu @@ -3380,113 +3380,43 @@ using namespace FastFFT::KernelFunction; // 2d explicit instantiations -template class FourierTransformer; - -template void FourierTransformer::CopyDeviceToDevice(float*, bool, int); -template void FourierTransformer::CopyDeviceToDevice(float2*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float2*, bool, int); -template void FourierTransformer::CopyDeviceToDevice<__half>(__half*, bool, int); -template void FourierTransformer::CopyDeviceToDevice<__half2>(__half2*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half>(__half*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half2>(__half2*, bool, int); - -template void FourierTransformer::SetExternalImagePointer(float2* output_pointer); -template void FourierTransformer::SetOutputPointer(float* output_pointer); -template void FourierTransformer::SetOutputPointer(float2* output_pointer); - -template void FourierTransformer::Generic_Fwd, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Inv, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Fwd(std::nullptr_t, std::nullptr_t); -template void FourierTransformer::Generic_Inv(std::nullptr_t, std::nullptr_t); - -template void FourierTransformer::Generic_Fwd_Image_Inv, - my_functor, - my_functor>(my_functor, - my_functor, - my_functor); - -template class FourierTransformer; - -template void FourierTransformer::CopyDeviceToDevice(float*, bool, int); -template void FourierTransformer::CopyDeviceToDevice(float2*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float2*, bool, int); -template void FourierTransformer::CopyDeviceToDevice<__half>(__half*, bool, int); -template void FourierTransformer::CopyDeviceToDevice<__half2>(__half2*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half>(__half*, bool, int); -template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half2>(__half2*, bool, int); - -template void FourierTransformer::SetExternalImagePointer<__half2>(__half2* output_pointer); -template void FourierTransformer::SetOutputPointer<__half>(__half* output_pointer); -template void FourierTransformer::SetOutputPointer<__half2>(__half2* output_pointer); - -template void FourierTransformer::Generic_Fwd, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Inv, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Fwd(std::nullptr_t, std::nullptr_t); -template void FourierTransformer::Generic_Inv(std::nullptr_t, std::nullptr_t); - -template void FourierTransformer::Generic_Fwd_Image_Inv, - my_functor, - my_functor>(my_functor, - my_functor, - my_functor); -// 3d explicit instantiations - -template class FourierTransformer; -template void FourierTransformer::SetExternalImagePointer(float2* output_pointer); - -template void FourierTransformer::SetOutputPointer(float* output_pointer); -template void FourierTransformer::SetOutputPointer(float2* output_pointer); - -template void FourierTransformer::Generic_Fwd, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Inv, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Fwd(std::nullptr_t, std::nullptr_t); -template void FourierTransformer::Generic_Inv(std::nullptr_t, std::nullptr_t); - -template void FourierTransformer::Generic_Fwd_Image_Inv, - my_functor, - my_functor>(my_functor, - my_functor, - my_functor); - -template class FourierTransformer; -template void FourierTransformer::SetExternalImagePointer<__half2>(__half2* output_pointer); -template void FourierTransformer::SetOutputPointer<__half>(__half* output_pointer); -template void FourierTransformer::SetOutputPointer<__half2>(__half2* output_pointer); - -template void FourierTransformer::Generic_Fwd, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Inv, - my_functor>(my_functor, - my_functor); - -template void FourierTransformer::Generic_Fwd(std::nullptr_t, std::nullptr_t); -template void FourierTransformer::Generic_Inv(std::nullptr_t, std::nullptr_t); - -template void FourierTransformer::Generic_Fwd_Image_Inv, - my_functor, - my_functor>(my_functor, - my_functor, - my_functor); +#define INSTANTIATE(COMPUTEBASETYPE, INPUTTYPE, OUTPUTBASETYPE, RANK) \ + template class FourierTransformer; \ + \ + template void FourierTransformer::CopyDeviceToDevice(float*, bool, int); \ + template void FourierTransformer::CopyDeviceToDevice(float2*, bool, int); \ + template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float*, bool, int); \ + template void FourierTransformer::CopyDeviceToDeviceAndSynchronize(float2*, bool, int); \ + template void FourierTransformer::CopyDeviceToDevice<__half>(__half*, bool, int); \ + template void FourierTransformer::CopyDeviceToDevice<__half2>(__half2*, bool, int); \ + template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half>(__half*, bool, int); \ + template void FourierTransformer::CopyDeviceToDeviceAndSynchronize<__half2>(__half2*, bool, int); \ + \ + template void FourierTransformer::SetExternalImagePointer(float2 * output_pointer); \ + template void FourierTransformer::SetOutputPointer(float* output_pointer); \ + template void FourierTransformer::SetOutputPointer(float2 * output_pointer); \ + \ + template void FourierTransformer::Generic_Fwd, \ + my_functor>(my_functor, \ + my_functor); \ + \ + template void FourierTransformer::Generic_Inv, \ + my_functor>(my_functor, \ + my_functor); \ + \ + template void FourierTransformer::Generic_Fwd(std::nullptr_t, std::nullptr_t); \ + template void FourierTransformer::Generic_Inv(std::nullptr_t, std::nullptr_t); \ + \ + template void FourierTransformer::Generic_Fwd_Image_Inv, \ + my_functor, \ + my_functor>(my_functor, \ + my_functor, \ + my_functor); + +INSTANTIATE(float, float, float, 2); +INSTANTIATE(float, __half, __half, 2); +INSTANTIATE(float, float, float, 3); +INSTANTIATE(float, __half, __half, 3); +#undef INSTANTIATE + } // namespace FastFFT