Ciao ragazzi,
sto programmando in parallelo usando OpenMP e sto provando a scrivere un programmino semplice semplice che evidenzi la differenza fra programmazione in modo seriale e in parallelo.
Il programmino consiste nel fare un'operazione di somma, una di moltiplicazione e infine si sommano queste due. Lo eseguo prima in serie e poi in parallelo mettendo un contatore che mi indichi quanto tempo impiega a fare gli stessi calcoli nei due casi.
Per contare uso la funzione omp_get_wtime()
Il problema che trovo è che paradossalmente la parte in parallelo impiega più tempo rispetto a quella seriale (circa il doppio) e non riesco a capire il perchè... Forse perchè nell'entrare nello switch entrambi i thread "perdono tempo" nell'eseguire le condizioni?
In ogni caso potete darmi una mano???
Questo è il codice:
double a,b,c,d,g,timer,timer2;
printf("Ora inserisci due numeri \n"); cin >> a; cin >> b;
printf("Eseguo le operzioni e poi sommo. ");
timer = omp_get_wtime();
c = a+b;
d = a*b;
g = c+d;
printf("Il risultato è: %f\n\n",g);
printf("Il calcolo è durato %f secondi\n\n",omp_get_wtime()-timer);
printf("Rieseguiamo il calcolo appena fatto in parallelo\n");
timer2 = omp_get_wtime();
#pragma omp parallel
{
switch ( omp_get_thread_num() )
{ case 1: c=a+b;
case 2: d=a*b;
}
}
g = c+d;
printf("Il calcolo di %f è durato %f secondi\n\n",g,omp_get_wtime()-timer2);
E, all'inizio del programma ho scritto:
#define NUM_THREADS 2
...
omp_set_num_threads(NUM_THREADS);