| 3198 | }; |
| 3199 | |
| 3200 | void GenerateKernel(std::string &str, cl_device_id Dev_ID) |
| 3201 | { |
| 3202 | std::string twType = RegBaseType<PR>(2); |
| 3203 | std::string rType = RegBaseType<PR>(1); |
| 3204 | std::string r2Type = RegBaseType<PR>(2); |
| 3205 | |
| 3206 | bool inInterleaved; // Input is interleaved format |
| 3207 | bool outInterleaved; // Output is interleaved format |
| 3208 | inInterleaved = ( (params.fft_inputLayout == CLFFT_COMPLEX_INTERLEAVED) || |
| 3209 | (params.fft_inputLayout == CLFFT_HERMITIAN_INTERLEAVED) ) ? true : false; |
| 3210 | outInterleaved = ( (params.fft_outputLayout == CLFFT_COMPLEX_INTERLEAVED) || |
| 3211 | (params.fft_outputLayout == CLFFT_HERMITIAN_INTERLEAVED) ) ? true : false; |
| 3212 | |
| 3213 | // use interleaved LDS when halfLds constraint absent |
| 3214 | bool ldsInterleaved = inInterleaved || outInterleaved; |
| 3215 | ldsInterleaved = halfLds ? false : ldsInterleaved; |
| 3216 | ldsInterleaved = blockCompute ? true : ldsInterleaved; |
| 3217 | |
| 3218 | bool inReal; // Input is real format |
| 3219 | bool outReal; // Output is real format |
| 3220 | inReal = (params.fft_inputLayout == CLFFT_REAL) ? true : false; |
| 3221 | outReal = (params.fft_outputLayout == CLFFT_REAL) ? true : false; |
| 3222 | |
| 3223 | size_t large1D = 0; |
| 3224 | if(params.fft_realSpecial) |
| 3225 | large1D = params.fft_N[0] * params.fft_realSpecial_Nr; |
| 3226 | else |
| 3227 | large1D = params.fft_N[0] * params.fft_N[1]; |
| 3228 | |
| 3229 | // Pragma |
| 3230 | str += ClPragma<PR>(); |
| 3231 | |
| 3232 | // Twiddle table |
| 3233 | if(length > 1) |
| 3234 | { |
| 3235 | TwiddleTable twTable(length); |
| 3236 | |
| 3237 | str += "\n__constant "; |
| 3238 | str += twType; str += " "; |
| 3239 | str += TwTableName(); |
| 3240 | str += "["; str += SztToStr(length-1); str += "] = {\n"; |
| 3241 | twTable.GenerateTwiddleTable<PR>(radices, str); |
| 3242 | str += "};\n\n"; |
| 3243 | } |
| 3244 | str += "\n"; |
| 3245 | |
| 3246 | // twiddle factors for 1d-large 3-step algorithm |
| 3247 | if(params.fft_3StepTwiddle) |
| 3248 | { |
| 3249 | TwiddleTableLarge twLarge(large1D); |
| 3250 | twLarge.GenerateTwiddleTable<PR>(str); |
| 3251 | } |
| 3252 | |
| 3253 | std::string sfx = FloatSuffix<PR>(); |
| 3254 | |
| 3255 | // Base type |
| 3256 | str += "#define fptype "; str += RegBaseType<PR>(1); str += "\n\n"; |
| 3257 |
no test coverage detected