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

Function genSwapKernelGeneral

src/library/generator.transpose.cpp:920–1937  ·  view source on GitHub ↗

swap lines. a more general kernel generator. this function accepts any ratio in theory. But in practice we restrict it to 1:2, 1:3, 1:5 and 1:10 ration

Source from the content-addressed store, hash-verified

918//swap lines. a more general kernel generator.
919//this function accepts any ratio in theory. But in practice we restrict it to 1:2, 1:3, 1:5 and 1:10 ration
920clfftStatus genSwapKernelGeneral(const FFTGeneratedTransposeNonSquareAction::Signature & params, std::string& strKernel, std::string& KernelFuncName, const size_t& lwSize, const size_t reShapeFactor)
921{
922 if (params.fft_placeness == CLFFT_OUTOFPLACE)
923 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
924
925 size_t smaller_dim = (params.fft_N[0] < params.fft_N[1]) ? params.fft_N[0] : params.fft_N[1];
926 size_t bigger_dim = (params.fft_N[0] >= params.fft_N[1]) ? params.fft_N[0] : params.fft_N[1];
927 size_t dim_ratio = bigger_dim / smaller_dim;
928 /*
929 if ( (params.fft_N[0] != 2 * params.fft_N[1]) && (params.fft_N[1] != 2 * params.fft_N[0]) &&
930 (params.fft_N[0] != 3 * params.fft_N[1]) && (params.fft_N[1] != 3 * params.fft_N[0]) &&
931 (params.fft_N[0] != 5 * params.fft_N[1]) && (params.fft_N[1] != 5 * params.fft_N[0]) &&
932 (params.fft_N[0] != 10 * params.fft_N[1]) && (params.fft_N[1] != 10 * params.fft_N[0]) )
933 */
934 if(dim_ratio % 2 != 0 && dim_ratio % 3 != 0 && dim_ratio % 5 != 0 && dim_ratio % 10 != 0)
935 {
936 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
937 }
938
939 strKernel.reserve(4096);
940 std::stringstream transKernel(std::stringstream::out);
941
942 // These strings represent the various data types we read or write in the kernel, depending on how the plan
943 // is configured
944 std::string dtInput; // The type read as input into kernel
945 std::string dtOutput; // The type written as output from kernel
946 std::string dtPlanar; // Fundamental type for planar arrays
947 std::string tmpBuffType;
948 std::string dtComplex; // Fundamental type for complex arrays
949
950 // NOTE: Enable only for debug
951 // clKernWrite( transKernel, 0 ) << "#pragma OPENCL EXTENSION cl_amd_printf : enable\n" << std::endl;
952
953 //if (params.fft_inputLayout != params.fft_outputLayout)
954 // return CLFFT_TRANSPOSED_NOTIMPLEMENTED;
955
956 switch (params.fft_precision)
957 {
958 case CLFFT_SINGLE:
959 case CLFFT_SINGLE_FAST:
960 dtPlanar = "float";
961 dtComplex = "float2";
962 break;
963 case CLFFT_DOUBLE:
964 case CLFFT_DOUBLE_FAST:
965 dtPlanar = "double";
966 dtComplex = "double2";
967
968 // Emit code that enables double precision in the kernel
969 clKernWrite(transKernel, 0) << "#ifdef cl_khr_fp64" << std::endl;
970 clKernWrite(transKernel, 3) << "#pragma OPENCL EXTENSION cl_khr_fp64 : enable" << std::endl;
971 clKernWrite(transKernel, 0) << "#else" << std::endl;
972 clKernWrite(transKernel, 3) << "#pragma OPENCL EXTENSION cl_amd_fp64 : enable" << std::endl;
973 clKernWrite(transKernel, 0) << "#endif\n" << std::endl;
974
975 break;
976 default:
977 return CLFFT_TRANSPOSED_NOTIMPLEMENTED;

Callers 1

generateKernelMethod · 0.85

Calls 3

permutation_calculationFunction · 0.85
sizeMethod · 0.80

Tested by

no test coverage detected