La implementación de mi (simd) toma una cantidad de tiempo variada, aunque se ejecuta para una entrada fija. El tiempo de ejecución varía entre, por ejemplo, 100 millones de ciclos de reloj a 120 millones de ciclos de reloj. El programa llama a una función alrededor de 600 veces, y la parte más costosa de la función es en la que se accede a la memoria ~ 2000 veces. Por lo tanto, la participación general de la memoria en bastante alto en mi programa.Tiempo de ejecución variable de un programa en C
¿La variación en el tiempo de ejecución se debe a los patrones de acceso a la memoria/contenido de la memoria inicial?
Utilicé valgrind para analizar el perfil de mi programa. Muestra que cada acceso a la memoria requiere aproximadamente 8 instrucciones. ¿Esto es normal?
La siguiente es la pieza de código (función) que se llama 600 veces. Mulprev [32] [20] es la matriz a la que se accede la mayor cantidad de veces.
j = 15;
u3v = _mm_set_epi64x (0xF, 0xF);
while (j + 1)
{
l = j << 2;
for (i = 0; i < 20; i++)
{
val1v = _mm_load_si128 ((__m128i *) &elm1v[i]);
uv = _mm_and_si128 (_mm_srli_epi64 (val1v, l), u3v);
u1 = _mm_extract_epi16 (uv, 0);
u2 = _mm_extract_epi16 (uv, 4) + 16;
for (ival = i, ival1 = i + 1, k = 0; k < 20; k += 2, ival += 2, ival1 += 2)
{
temp11v = _mm_load_si128 ((__m128i *) &mulprev[u1][k]);
temp12v = _mm_load_si128 ((__m128i *) &mulprev[u2][k]);
val1v = _mm_load_si128 ((__m128i *) &res[ival]);
val2v = _mm_load_si128 ((__m128i *) &res[ival1]);
bv = _mm_xor_si128 (val1v, _mm_unpacklo_epi64 (temp11v, temp12v));
av = _mm_xor_si128 (val2v, _mm_unpackhi_epi64 (temp11v, temp12v));
_mm_store_si128 ((__m128i *) &res[ival], bv);
_mm_store_si128 ((__m128i *) &res[ival1], av);
}
}
if (j == 0)
break;
val0v = _mm_setzero_si128();
for (i = 0; i < 40; i++)
{
testv = _mm_load_si128 ((__m128i *) &res[i]);
val1v = _mm_srli_epi64 (testv, 60);
val2v = _mm_xor_si128 (val0v, _mm_slli_epi64 (testv, 4));
_mm_store_si128 (&res[i], val2v);
val0v = val1v;
}
j--;
}
Quiero reducir el tiempo de cálculo de mi programa. ¿Alguna sugerencia?
Necesita publicar el código real si quiere ayuda para optimizarlo –
Consulte la pregunta editada ... – anup