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

Method generateKernel

src/library/action.transpose.cpp:199–336  ·  view source on GitHub ↗

OpenCL does not take unicode strings as input, so this routine returns only ASCII strings Feed this generator the FFTPlan, and it returns the generated program as a string

Source from the content-addressed store, hash-verified

197// OpenCL does not take unicode strings as input, so this routine returns only ASCII strings
198// Feed this generator the FFTPlan, and it returns the generated program as a string
199clfftStatus FFTGeneratedTransposeNonSquareAction::generateKernel(FFTRepo& fftRepo, const cl_command_queue commQueueFFT)
200{
201
202
203 std::string programCode;
204 std::string kernelFuncName;//applied to swap kernel for now
205 if (this->signature.nonSquareKernelType == NON_SQUARE_TRANS_TRANSPOSE_BATCHED_LEADING)
206 {
207 //Requested local memory size by callback must not exceed the device LDS limits after factoring the LDS size required by transpose kernel
208 if (this->signature.fft_hasPreCallback && this->signature.fft_preCallback.localMemSize > 0)
209 {
210 assert(!this->signature.fft_hasPostCallback);
211
212 bool validLDSSize = false;
213 size_t requestedCallbackLDS = 0;
214
215 requestedCallbackLDS = this->signature.fft_preCallback.localMemSize;
216
217 validLDSSize = ((2 * this->plan->ElementSize() * 16 * reShapeFactor * 16 * reShapeFactor) + requestedCallbackLDS) < this->plan->envelope.limit_LocalMemSize;
218
219 if(!validLDSSize)
220 {
221 fprintf(stderr, "Requested local memory size not available\n");
222 return CLFFT_INVALID_ARG_VALUE;
223 }
224 }
225 OPENCL_V(clfft_transpose_generator::genTransposeKernelLeadingDimensionBatched(this->signature, programCode, lwSize, reShapeFactor), _T("genTransposeKernel() failed!"));
226 }
227 else if (this->signature.nonSquareKernelType == NON_SQUARE_TRANS_TRANSPOSE_BATCHED)
228 {
229 //pre call back check
230 //Requested local memory size by callback must not exceed the device LDS limits after factoring the LDS size required by transpose kernel
231 if (this->signature.fft_hasPreCallback && this->signature.fft_preCallback.localMemSize > 0)
232 {
233 assert(!this->signature.fft_hasPostCallback);
234
235 bool validLDSSize = false;
236 size_t requestedCallbackLDS = 0;
237
238 requestedCallbackLDS = this->signature.fft_preCallback.localMemSize;
239
240 validLDSSize = ((2 * this->plan->ElementSize() * 16 * reShapeFactor * 16 * reShapeFactor) + requestedCallbackLDS) < this->plan->envelope.limit_LocalMemSize;
241
242 if (!validLDSSize)
243 {
244 fprintf(stderr, "Requested local memory size not available\n");
245 return CLFFT_INVALID_ARG_VALUE;
246 }
247 }
248 OPENCL_V(clfft_transpose_generator::genTransposeKernelBatched(this->signature, programCode, lwSize, reShapeFactor), _T("genTransposeKernel() failed!"));
249 }
250 else
251 {
252 //pre-callback is possible in swap kernel now
253 if (this->signature.fft_hasPreCallback && this->signature.fft_preCallback.localMemSize > 0)
254 {
255 assert(!this->signature.fft_hasPostCallback);
256

Calls 8

getSignatureDataMethod · 0.95
getSignatureDataMethod · 0.95
genSwapKernelGeneralFunction · 0.85
ElementSizeMethod · 0.80
setProgramCodeMethod · 0.80
setProgramEntryPointsMethod · 0.80

Tested by

no test coverage detected