Quando provo il seguente codiceprogramma OpenMP è più lenta di quella sequenziale
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);
tempo di esecuzione è circa 168 secondi, mentre la versione sequenziale spende solo 20 secondi.
Sono ancora un principiante nella programmazione parallela. Come posso ottenere una versione parallela più veloce di quella sequenziale?
Si noti inoltre che poiché 'double x = rand()' non modifica lo stato esterno, il compilatore potrebbe essere tentato di ottimizzare il loop out nella versione sequenziale. In generale, dovresti testare con codice che non può essere ottimizzato. – Vanwaril
@Vanwaril, 'rand()' non è un elemento intrinseco. Il compilatore non sa se è una funzione pura o no (è _not_) e quindi non dovrebbe ottimizzare la chiamata. –
Grazie mille. Ora la versione parallela trascorre 5 secondi mentre quella sequenziale impiega 9 secondi. –