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