34 std::vector<unsigned int>
decompose_stages(
unsigned int N,
const std::set<unsigned int> &supported_factors)
36 std::vector<unsigned int> stages;
40 if(supported_factors.empty())
46 auto rfactor_it = supported_factors.rbegin();
51 const unsigned int factor = *rfactor_it;
52 if(0 == (res % factor) && res >= factor)
54 stages.push_back(factor);
60 if(rfactor_it == supported_factors.rend())
81 std::vector<unsigned int> idx_digit_reverse;
84 const float stages_prod =
std::accumulate(std::begin(fft_stages),
std::end(fft_stages), 1, std::multiplies<unsigned int>());
87 return idx_digit_reverse;
91 idx_digit_reverse.resize(N);
94 unsigned int n_stages = fft_stages.size();
97 for(
unsigned int n = 0; n <
N; ++n)
100 unsigned int Nx = fft_stages[0];
103 for(
unsigned int s = 1; s < n_stages; ++s)
106 unsigned int Ny = fft_stages[s];
107 unsigned int Ni = Ny * Nx;
110 k = (k * Ny) % Ni + (k / Nx) % Ny + Ni * (k / Ni);
117 idx_digit_reverse[n] = k;
120 return idx_digit_reverse;
std::vector< unsigned int > decompose_stages(unsigned int N, const std::set< unsigned int > &supported_factors)
Decompose a given 1D input size using the provided supported factors.
std::vector< unsigned int > digit_reverse_indices(unsigned int N, const std::vector< unsigned int > &fft_stages)
Calculate digit reverse index vector given fft size and the decomposed stages.
Copyright (c) 2017-2021 Arm Limited.
void end(TokenStream &in, bool &valid)
__kernel void accumulate(__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_offset_first_element_in_bytes, __global uchar *accu_ptr, uint accu_stride_x, uint accu_step_x, uint accu_stride_y, uint accu_step_y, uint accu_offset_first_element_in_bytes)
This function accumulates an input image into output image.