Problema nella parallelizzazione di un programma

di il
3 risposte

Problema nella parallelizzazione di un programma

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); 

3 Risposte

  • Re: Problema nella parallelizzazione di un programma

    Ciao ^^ ,

    Piccola parentesi: stai fondendo C e C++
    
      printf("Ora inserisci due numeri \n"); cin >> a; cin >> b;  
    
    A parte il fatto che come è indentato non si capisce molto o.o , penso che lo switch faccia perdere il tempo , lo devi vedere come una serie di if , else if ecc.. . Mentre :
    
                              c = a+b;
                              d = a*b;
                              g = c+d;
    
    sono istruzioni sequenziali già conosciute al tempo di compilazione, e il tempo è minore anche perchè occuperà minor spazio rispetto ad una sequenza di else if. Però non te lo assicuro, meglio che aspetti la parola di uno più esperto di me ^^
  • Re: Problema nella parallelizzazione di un programma

    Premetto che non sono esperto, ma il tuo bench mi sembra un po' scarno. Sicuramente aggiungendo qualche doppia iterazione noterai i risultati delle fork.
  • Re: Problema nella parallelizzazione di un programma

    ixamit ha scritto:


    Premetto che non sono esperto, ma il tuo bench mi sembra un po' scarno. Sicuramente aggiungendo qualche doppia iterazione noterai i risultati delle fork.
    Il problema è che non so che cosa aggiungere e dove...

    @Alessandro5 il programma è indentato in questo modo proprio per far capire meglio i vari blocchi. O almeno, io lo capisco meglio cosi
    Inoltre la sequenza di operazioni la riscrivo perchè voglio fare vedere che la stessa cosa fatta normale e in parallelo viene eseguita in tempi diversi.
Devi accedere o registrarti per scrivere nel forum
3 risposte