MCPcopy Create free account
hub / github.com/clMathLibraries/clFFT / genTransposePrototype

Function genTransposePrototype

src/library/generator.transpose.cpp:162–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

160}
161
162clfftStatus genTransposePrototype(const FFTGeneratedTransposeSquareAction::Signature & params, const size_t& lwSize, const std::string& dtPlanar, const std::string& dtComplex,
163 const std::string &funcName, std::stringstream& transKernel, std::string& dtInput, std::string& dtOutput)
164{
165
166 // Declare and define the function
167 clKernWrite(transKernel, 0) << "__attribute__(( reqd_work_group_size( " << lwSize << ", 1, 1 ) ))" << std::endl;
168 clKernWrite(transKernel, 0) << "kernel void" << std::endl;
169
170 clKernWrite(transKernel, 0) << funcName << "( ";
171
172 switch (params.fft_inputLayout)
173 {
174 case CLFFT_COMPLEX_INTERLEAVED:
175 dtInput = dtComplex;
176 dtOutput = dtComplex;
177 clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA";
178 break;
179 case CLFFT_COMPLEX_PLANAR:
180 dtInput = dtPlanar;
181 dtOutput = dtPlanar;
182 clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA_R" << ", global " << dtInput << "* restrict inputA_I";
183 break;
184 case CLFFT_HERMITIAN_INTERLEAVED:
185 case CLFFT_HERMITIAN_PLANAR:
186 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
187 case CLFFT_REAL:
188 dtInput = dtPlanar;
189 dtOutput = dtPlanar;
190
191 clKernWrite(transKernel, 0) << "global " << dtInput << "* restrict inputA";
192 break;
193 default:
194 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
195 }
196
197 if (params.fft_placeness == CLFFT_OUTOFPLACE)
198 switch (params.fft_outputLayout)
199 {
200 case CLFFT_COMPLEX_INTERLEAVED:
201 dtInput = dtComplex;
202 dtOutput = dtComplex;
203 clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA";
204 break;
205 case CLFFT_COMPLEX_PLANAR:
206 dtInput = dtPlanar;
207 dtOutput = dtPlanar;
208 clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA_R" << ", global " << dtOutput << "* restrict outputA_I";
209 break;
210 case CLFFT_HERMITIAN_INTERLEAVED:
211 case CLFFT_HERMITIAN_PLANAR:
212 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
213 case CLFFT_REAL:
214 dtInput = dtPlanar;
215 dtOutput = dtPlanar;
216 clKernWrite(transKernel, 0) << ", global " << dtOutput << "* restrict outputA";
217 break;
218 default:
219 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected