Cuando intento el siguiente códigoprograma OpenMP es más lento que uno secuencial
double start = omp_get_wtime();
long i;
#pragma omp parallel for
for (i = 0; i <= 1000000000; i++) {
double x = rand();
}
double end = omp_get_wtime();
printf("%f\n", end - start);
El tiempo de ejecución es de 168 segundos, mientras que la versión secuencial pasa solamente 20 segundos.
Todavía soy un novato en programación paralela. ¿Cómo podría obtener una versión paralela que sea más rápida que la secuencia?
También se debe tener en cuenta que dado que 'double x = rand()' no modifica el estado externo, el compilador podría tener la tentación de optimizar el bucle en la versión secuencial. En general, debe probar con un código que no se puede optimizar. – Vanwaril
@Vanwaril, 'rand()' no es intrínseco. El compilador no sabe si es una función pura o no (es _not_) y, por lo tanto, no debería optimizar la llamada. –
Muchas gracias. Ahora la versión paralela gasta 5 segundos mientras que la secuencia pasa unos 9 segundos. –