PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - Multi-Thread für Dual-Core Prozessoren



Andi_Rostock
19-04-2006, 07:00
Hallo,

ich muss mit meinem Programm ein realtiv Große Anzahl an Paramatern durchrechnen; 1000+. Dummerweise dauert ein Prog-Aufruf ca 4 Minuten. Auf einerm Single-Core Rechner dauert das dementsprechend Ewigkeiten. Ich habe aber einen Athlon X2 Rechner. Der sollte doch zwei Threads parallel bearbeiten können. Gibt es eine einfache Möglichkeit in C gleich zwei Threads zu starten?
Ich habe mir das etwas so vorgestellt:


int flag;
double Par[1000];
Par[0]=...;Par[1]=...;...
for (i=0;i<500;i++){
// Core 1
flag=runprob(Par[i]);
}
for (i=500;i<1000;i++){
// Core 2
flag=runprob(Par[i]);
}


Ist natürlich Quatsch...
Hat einer von euch Erfahrungen mit verteiltem Rechnen, MPI o.ä.? Ich könnte hier auch einen Cluster verwenden, da muss ich aber leider alles selbst parallelisieren.
Was ich nicht so ohne Weiteres kann (da ich keine Ahnung habe :( ).

Viele Grüße
Andreas

quinte17
19-04-2006, 10:06
zu den threads lies dir mal folgendes durch:
http://www.pronix.de/pronix-24.html

prinzipiell hast du so schon recht, so könnte es funktionieren.
du brauchst nur eine funktion, die genau des macht, also einen bestimmten bereich von irgendwas bearbeitet.


void aufgabe(void *data)
{
int *x;
x = (int *) data;
printf("%d",x);
//blablubs der aufgabe
}

bei *data würde ich dir empfehlen dort ein struct zu übergeben, welches du dann dementsprechend castest.

und dann brauchst du eigentlich nur noch sowas in der art machen:


pthread_t th1, th2;
int blub = 3;
int bla = 5;
pthread_create(&th1, NULL, &aufgabe, &blub);
pthread_create(&th2, NULL, &aufgabe, &bla);

pthread_join( th1, NULL );
pthread_join( th2, NULL );


greetz