¿Por qué el vectorizador automático de Visual C++ no está vectorizando este ciclo simple?

¿Por qué el vectorizador automático de Visual C++ no está vectorizando este ciclo simple?


No entiendo por qué Visual C++ no puede vectorizar automáticamente este bucle... ¿alguna idea?


obtengo:


testvec.cpp:12: info C5002: loop not vectorized due to reason '1200'

donde el código de motivo 1200 es:



¿Pero por qué?


#include <stdlib.h>
int main(int argc, char *argv[])
{
int const n = argc;
double
*const p1 = (double *)malloc(n * n * sizeof(*p1)),
*const p2 = (double *)malloc(n * n * sizeof(*p2));
for (int j = 0; j < n; ++j)
{
double const sj = p1[n * j];
for (int i = 0; i < n; ++i)
{
double const sum = p1[i] + sj, old = p1[i + n * j];
p2[i + n * j] = sum < old ? sum : old;
}
}
}

Respuestas:


Finalmente encontré cómo solucionarlo... parece la multiplicación en n * j es el culpable

Levantarlo afuera como int nj = n * j; y usando nj en el bucle interno soluciona el problema.


Todavía no sé por qué aunque esto sucede.


Si alguien lo sabe, ¡por favor publíquelo!