MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / fft_r2c

Function fft_r2c

src/backend/opencl/fft.cpp:96–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

94
95template<typename Tc, typename Tr>
96Array<Tc> fft_r2c(const Array<Tr> &in, const int rank) {
97 dim4 odims = in.dims();
98
99 odims[0] = odims[0] / 2 + 1;
100
101 Array<Tc> out = createEmptyArray<Tc>(odims);
102
103 verifySupported(rank, in.dims());
104 size_t tdims[AF_MAX_DIMS], istrides[AF_MAX_DIMS], ostrides[AF_MAX_DIMS];
105
106 computeDims(tdims, in.dims());
107 computeDims(istrides, in.strides());
108 computeDims(ostrides, out.strides());
109
110 int batch = 1;
111 for (int i = rank; i < AF_MAX_DIMS; i++) { batch *= tdims[i]; }
112
113 SharedPlan plan = findPlan(
114 CLFFT_REAL, CLFFT_HERMITIAN_INTERLEAVED, static_cast<clfftDim>(rank),
115 tdims, istrides, istrides[rank], ostrides, ostrides[rank],
116 static_cast<clfftPrecision>(Precision<Tc>::type), batch);
117
118 cl_mem imem = (*in.get())();
119 cl_mem omem = (*out.get())();
120 cl_command_queue queue = getQueue()();
121
122 CLFFT_CHECK(clfftEnqueueTransform(*plan.get(), CLFFT_FORWARD, 1, &queue, 0,
123 NULL, NULL, &imem, &omem, NULL));
124
125 return out;
126}
127
128template<typename Tr, typename Tc>
129Array<Tr> fft_c2r(const Array<Tc> &in, const dim4 &odims, const int rank) {

Callers

nothing calls this directly

Calls 7

verifySupportedFunction · 0.85
computeDimsFunction · 0.70
findPlanFunction · 0.70
getQueueFunction · 0.50
dimsMethod · 0.45
stridesMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected