Почему следующий вложенный l oop не векторизован? - PullRequest
0 голосов
/ 02 мая 2020
__attribute__((vector, nothrow)) int diffusion(const int n_particles, const int n_steps, const float x_threshold,
              const float alpha, VSLStreamStatePtr rnStream)
{
        int n_escaped=0;
        float x[n_steps];
        float rn[n_particles];
        //Intel MKL function to generate random numbers
        vsRngUniform(VSL_RNG_METHOD_UNIFORM_STD, rnStream, 1, rn, -1.0, 1.0);   

        for (int i = 0; i < n_steps; i++)
        {
                for (int j = 0; j < n_particles; j++) {
                        x[i] += dist_func(alpha, rn[j]);
                }
        }
        for (int i = 0; i < n_steps; i++) {
                if (x[i] > x_threshold) n_escaped++;
        }
        return n_escaped;
}

ОБ ОТЧЕТЕ О ГЕНЕРАЦИИ:

Report from: Loop nest, Vector & Auto-parallelization optimizations [loop, vec, par]

L OOP НАЧИНАЕТСЯ с распространения. cc (15,3) замечание # 25460: Нет l oop сообщается об оптимизации

L OOP НАЧИНАЕТСЯ с диффузии. cc (16,4) замечание # 25460: Нет l oop сообщается об оптимизации L OOP END L OOP КОНЕЦ

L OOP НАЧИНАЕТСЯ с распространения. cc (20,3) замечание # 25439: развернуто с остатком на 2
L OOP КОНЕЦ

L OOP НАЧИНАЕТСЯ с диффузии. cc (20,3) L OOP END

Report from: Code generation optimizations [cg]
...