1#ifndef ISCE_CUDA_FFT_DETAIL_FFTPLANBASE_ICC
2#error "FFTPlanBase.icc is an implementation detail of FFTPlan.h"
5#include <isce3/cuda/except/Error.h>
6#include <isce3/fft/detail/FFTPlanBase.h>
8namespace isce3 {
namespace cuda {
namespace fft {
namespace detail {
10using isce3::fft::detail::product;
12template<
int Sign,
typename T>
14FFTPlanBase<Sign, T>::FFTPlanBase()
16 _plan(std::make_shared<cufftHandle>())
19template<
int Sign,
typename T>
25 FFTPlanBase(out, in, &n, &n, 1, n, &n, 1, n, batch, 1, CufftC2CType<T>::type)
28template<
int Sign,
typename T>
35 FFTPlanBase(out, in, n, n, 1, product(n), n, 1, product(n), batch, Rank, CufftC2CType<T>::type)
37 static_assert( Rank <= 3,
"" );
40template<
int Sign,
typename T>
49 FFTPlanBase(out, in, &n, &nembed, stride, dist, &nembed, stride, dist, batch, 1, CufftC2CType<T>::type)
52template<
int Sign,
typename T>
57 const int (&nembed)[Rank],
62 FFTPlanBase(out, in, n, nembed, stride, dist, nembed, stride, dist, batch, Rank, CufftC2CType<T>::type)
64 static_assert( Rank <= 3,
"" );
67template<
int Sign,
typename T>
79 FFTPlanBase(out, in, &n, &inembed, istride, idist, &onembed, ostride, odist, batch, 1, CufftC2CType<T>::type)
82template<
int Sign,
typename T>
87 const int (&inembed)[Rank],
90 const int (&onembed)[Rank],
95 FFTPlanBase(out, in, n, inembed, istride, idist, onembed, ostride, odist, batch, Rank, CufftC2CType<T>::type)
97 static_assert( Rank <= 3,
"" );
100template<
int Sign,
typename T>
101void FFTPlanBase<Sign, T>::execute()
const
103 executePlan<Sign, T>(*_plan, _in, _out, _type);
106template<
int Sign,
typename T>
107template<
typename U,
typename V>
108FFTPlanBase<Sign, T>::FFTPlanBase(U * out,
121 _out(reinterpret_cast<void *>(out)),
122 _in(reinterpret_cast<void *>(in)),
126 _plan = std::shared_ptr<cufftHandle>(
new cufftHandle,
127 [](cufftHandle * plan)
noexcept {
128 if (*plan) { cufftDestroy(*plan); }
133 checkCudaErrors( cufftPlanMany(
134 _plan.get(), rank,
const_cast<int *
>(n),
135 const_cast<int *
>(inembed), istride, idist,
136 const_cast<int *
>(onembed), ostride, odist,
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5
Definition GDALDataTypeUtil.h:10