MCPcopy Create free account
hub / github.com/Cambricon/mlu-ops / MLUOP_WIN_API fftTwoStepFactor

Function MLUOP_WIN_API fftTwoStepFactor

kernels/fft/fft.cpp:855–1116  ·  view source on GitHub ↗

Factors for large radices network. Head info: facbuf[0] = stage_num; facbuf[1] = _n; Stages info: facbuf[5 * stage_num + 0] = r; facbuf[5 * stage_num + 1] = section_num; facbuf[5 * stage_num + 2] = out_stride; facbuf[5 * stage_num + 3] = in_stride; facbuf[5 * stage_num + 4] = small_factors_offset;

Source from the content-addressed store, hash-verified

853// facbuf[5 * stage_num + 3] = in_stride;
854// facbuf[5 * stage_num + 4] = small_factors_offset;
855mluOpStatus_t MLUOP_WIN_API fftTwoStepFactor(mluOpHandle_t handle,
856 mluOpFFTPlan_t fft_plan,
857 const int _n, int *facbuf,
858 const int is_row_major,
859 const int factor_type) {
860 mluOpStatus_t status = MLUOP_STATUS_SUCCESS;
861 int n = _n;
862 int r, in_stride, section_num, stage_num = 0, out_stride = 1;
863
864 int large_radix = 1;
865 int large_count = 1;
866 int small_factors_offset = 22 * 5;
867 int max_nram_size = handle->nram_size + REM_FOR_STACK - 32 * 1024;
868 while (n > 1) {
869 if (is_row_major) {
870 if (max_nram_size >= NRAM_SIZE_370) {
871 switch (_n) {
872 case (200):
873 r = 200;
874 break;
875
876 case (600):
877 r = 600;
878 break;
879
880 case (256):
881 r = 256;
882 break;
883
884 case 1024:
885 if (n % 32 == 0) {
886 r = 32;
887 }
888 break;
889
890 case 2048:
891 if (n % 64 == 0) {
892 r = 64;
893 } else if ((n % 32) == 0) {
894 r = 32;
895 }
896 break;
897
898 case 6000:
899 if (n % 300 == 0) {
900 r = 300;
901 } else if ((n % 20) == 0) {
902 r = 20;
903 }
904 break;
905
906 case 7000:
907 if (n % 280 == 0) {
908 r = 280;
909 } else if ((n % 25) == 0) {
910 r = 25;
911 }
912 break;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected