Ingegneria Informatica Polimi (P-Z)

Programmazione multiprocessore

« Older   Newer »
  Share  
*peppe
view post Posted on 15/6/2008, 20:15




Qualcuno di voi ha mai provato a programmare per macchine multiprocessore?
E' da qualche giorno che provo a cercare un guida o un libro in italiano, ma non trovo nulla. :wacko:
Credevo fosse una stupidata, invece è più difficile del previsto :(
 
Top
KAi[M]ANo
view post Posted on 13/7/2008, 19:25




intuitivamente direi ke basta utilizzare il più possibile il multithreading..
 
Top
*peppe
view post Posted on 15/7/2008, 21:00




Ma con il multithreading come fai ad imporre ad ogni singolo processore il lavoro che deve svolgere?
 
Top
_inventore_
view post Posted on 7/8/2008, 21:20




Ho cercato un po', e sembra che non basti usare molto il mutithreading.
Anche perchè il numero di thread da fare dovrebbe essere uguale al numero di core, e questo è un numero che probabilmente aumenterà in futuro. Non conviene riscrivere un algoritmo in due thread e ottimizzarlo, se poi escono i quad core e bisogna rifare il lavoro daccapo.
Inoltre il numero di thread dipende anche da altr fattori, come il carico di lavoro della cpu. Se è in esecuzione solo il nostro programma (probabilmente) il sistema operativo ripartirà i due thread sui due core, ma se il carico di cpu è intenso magari utilizzerà un solo core alternativamente per i due thread, quindi l'overhead del context switch tra i due thread farà in modo che in queste condizioni l'algoritmo diventi meno efficiente di uno single thread...

Invece occorrono delle librerie apposite. Ho trovato questa che sembra la migliore: OpenMP
La libreria esiste solo per C, C++ e Fortran, tre dei linguaggi a più alte prestazioni esistenti.
Quando ho tempo ci darò un'occhiata.

Questo esempio tratto da wikipedia mi sembra molto esplicativo della potenza della libreria:
#define N 100000
int main(int argc, char *argv[])
{
int i, a[N];
#pragma omp parallel for
for (i=0;i<N;i++)
a[i]= 2*i;
return 0;
}

Questo inizializza un vettore di 100000 interi. Notare che la separazione dell'algoritmo in thread viene fatto dal compilatore, e non c'è un numero di thread prefissato. Quindi si otterrà il massimo delle performance sia su un single core, sia su un dual core o un quad core, indipendentemente dal carico di cpu.
 
Top
3 replies since 15/6/2008, 20:15   137 views
  Share