[C++] programmazione multithreads

di il
1 risposte

[C++] programmazione multithreads

Ciao a tutti..il problema che deve risolvere è il seguente:
Devo implementare qst funzione:



int * expr(int * X,int * Y,int * Z,int * W,int N);



Qst funzione prende in input i puntatori a 4 vettori X,Y,Z,W di dimensione N e deve ritornare ed allocare un puntatore al vettore R ottenuto calcolando l'espressione vettoriale :



R=X*X+Y*Y+Z*Z+W*W



La funzione deve essere ottimizzata in termini di prestazioni,tenendo conto di avere a disposizione 8 processori. Implementazioni sequenziali non vengono prese in considerazione.
Ora io ho provato a risolverla cosi':

#include<JTC/JTC.h> 
#include<iostream.h> 

int * sum(int * X,int * Y,int N) 
{ 
   int * result=new int[N]; 

   for(int i=0;i<N;i++){ 

      result[i]=X[i]+Y[i]; 

   } 

   return result; 
} 


int * prod(int * X,int N) 
{ 
   int * result=new int[N]; 

   for(int i=0;i<N;i++) 
   { 
      result[i]=X[i]*X[i]; 
   } 

   return result; 

} 


class CalcolaEspressione:public JTCMonitor 
{ 
   int nThreads; 
   int ThreadsFiniti; 

public: 

   int * X; 
   int * Y; 
   int N; 
    

   int * R; 

   CalcolaEspressione(int nt) 
   { 
      nThreads=nt; 

      ThreadsFiniti=0; 
   }; 

   void setDone() 
   { 
      JTCSynchronized sync(*this); 

      ThreadsFiniti++; 

      if(ThreadsFiniti==nThreads) 
         notify(); 

   } 

   void waitForCompletion() 
   { 
      JTCSynchronized sync(*this); 

      if(ThreadsFiniti<nThreads) 
         wait(); 
   } 

}; 

class Espressione:public JTCThread 
{ 
   CalcolaEspressione * c; 

   bool sp; 

public: 

   Espressione(CalcolaEspressione * c,bool sp) 
   { 
      this->c=c; 

      this->sp=sp; 

   } 

   virtual void run() 
   { 
      c->R=(sp?sum(c->X,c->Y,c->N):prod(c->X,c->N)); 

      c->setDone(); 

   } 

}; 


int * expr(int * X,int * Y,int * Z,int * W,int N) 
{ 
   CalcolaEspressione * cal=new CalcolaEspressione(8); 

   Espressione * e[8]; 

    

   for(int i=0;i<8;i++) 
   { 
      e[i]=new Espressione(cal,false); 
      e[i]->start(); 

   } 


   e[N-1]=new Espressione(cal,true); 

   e[N-1]->start(); 

   cal->waitForCompletion(); 

   return cal->R; 

} 















int X[] = {1, 2, -1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0}; 
int Y[] = {1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}; 
int Z[] = {1, 2, -1, 0, 3, 0, 0,0, 0, 1, 0, 0, 0, 0}; 
int K[] = {1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}; 


int main() 

{ 
   JTCInitialize init; 
   int* R = expr(X,Y,Z,K,13); 
   for(int i = 0; i < 13; i++) 
   { 
      cout << R[i] << " "; 
   } 
   cout<<endl; 
   return 0; 
} 

Il problema è che qnd la faccio partire mi dice:
unknown exception

Non capisco dove sbaglio...qualcuno puoi aiutarmi a capirlo?
Vi ringrazio

1 Risposte

  • Re: [C++] programmazione multithreads

    Scusa il ritardo ma non venivo in questo forum da molto tempo. Se hai ancora bisogno di risolvere il problema posso aiutarti.
Devi accedere o registrarti per scrivere nel forum
1 risposte