isce3 0.25.0
Loading...
Searching...
No Matches
FFTPlanBase.icc
1#ifndef ISCE_CUDA_FFT_DETAIL_FFTPLANBASE_ICC
2#error "FFTPlanBase.icc is an implementation detail of FFTPlan.h"
3#endif
4
5#include <isce3/cuda/except/Error.h>
6#include <isce3/fft/detail/FFTPlanBase.h>
7
8namespace isce3 { namespace cuda { namespace fft { namespace detail {
9
10using isce3::fft::detail::product;
11
12template<int Sign, typename T>
13inline
14FFTPlanBase<Sign, T>::FFTPlanBase()
15:
16 _plan(std::make_shared<cufftHandle>())
17{}
18
19template<int Sign, typename T>
20FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
22 int n,
23 int batch)
24:
25 FFTPlanBase(out, in, &n, &n, 1, n, &n, 1, n, batch, 1, CufftC2CType<T>::type)
26{}
27
28template<int Sign, typename T>
29template<int Rank>
30FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
32 const int (&n)[Rank],
33 int batch)
34:
35 FFTPlanBase(out, in, n, n, 1, product(n), n, 1, product(n), batch, Rank, CufftC2CType<T>::type)
36{
37 static_assert( Rank <= 3, "" );
38}
39
40template<int Sign, typename T>
41FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
43 int n,
44 int nembed,
45 int stride,
46 int dist,
47 int batch)
48:
49 FFTPlanBase(out, in, &n, &nembed, stride, dist, &nembed, stride, dist, batch, 1, CufftC2CType<T>::type)
50{}
51
52template<int Sign, typename T>
53template<int Rank>
54FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
56 const int (&n)[Rank],
57 const int (&nembed)[Rank],
58 int stride,
59 int dist,
60 int batch)
61:
62 FFTPlanBase(out, in, n, nembed, stride, dist, nembed, stride, dist, batch, Rank, CufftC2CType<T>::type)
63{
64 static_assert( Rank <= 3, "" );
65}
66
67template<int Sign, typename T>
68FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
70 int n,
71 int inembed,
72 int istride,
73 int idist,
74 int onembed,
75 int ostride,
76 int odist,
77 int batch)
78:
79 FFTPlanBase(out, in, &n, &inembed, istride, idist, &onembed, ostride, odist, batch, 1, CufftC2CType<T>::type)
80{}
81
82template<int Sign, typename T>
83template<int Rank>
84FFTPlanBase<Sign, T>::FFTPlanBase(thrust::complex<T> * out,
86 const int (&n)[Rank],
87 const int (&inembed)[Rank],
88 int istride,
89 int idist,
90 const int (&onembed)[Rank],
91 int ostride,
92 int odist,
93 int batch)
94:
95 FFTPlanBase(out, in, n, inembed, istride, idist, onembed, ostride, odist, batch, Rank, CufftC2CType<T>::type)
96{
97 static_assert( Rank <= 3, "" );
98}
99
100template<int Sign, typename T>
101void FFTPlanBase<Sign, T>::execute() const
102{
103 executePlan<Sign, T>(*_plan, _in, _out, _type);
104}
105
106template<int Sign, typename T>
107template<typename U, typename V>
108FFTPlanBase<Sign, T>::FFTPlanBase(U * out,
109 V * in,
110 const int * n,
111 const int * inembed,
112 int istride,
113 int idist,
114 const int * onembed,
115 int ostride,
116 int odist,
117 int batch,
118 int rank,
119 cufftType type)
120:
121 _out(reinterpret_cast<void *>(out)),
122 _in(reinterpret_cast<void *>(in)),
123 _type(type)
124{
125 // construct shared pointer with custom deleter to destroy the plan
126 _plan = std::shared_ptr<cufftHandle>(new cufftHandle,
127 [](cufftHandle * plan) noexcept {
128 if (*plan) { cufftDestroy(*plan); }
129 delete plan;
130 });
131
132 // create 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,
137 type, batch) );
138}
139
140}}}}
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5
Definition GDALDataTypeUtil.h:10

Generated for ISCE3.0 by doxygen 1.13.2.