je plussote cette façon de faire.
D'autant qu'elle est très simple, et implique aussi qu'il n'y aura que peu de changement de contexte :
en pseudo code ca devrais un truc comme ça
int nb_thread=n;//on va créer n thread)
int size_tab=x;//la taille du tableau
int size_seg=x/n;//ne pas oublier les vérifs n>x, et si x n'est pas divisible par n. Bref gérer les effets de bords.
/* on lance les traitements*/
while (nb_thread>0)
{
create_thread(mon_thread_a_moi,nb_thread,(size_seg*nb_thread),size_seg*(nb_thread+1));//on créé un "thread a moi", en lui disant d'utiliser les indiques de départ (size_seg*nb_thread), et de fin size_seg*(nb_thread+1)
nb_thread--;
}
nb_thread=n;
/* on attend qu'ils soient terminées*/
while (nb_thread>0)
{
join(pid_thread(nb_thread));
}
[^] # Re: -funroll-loops
Posté par briaeros007 . En réponse au message Parallelisation d'une boucle (théoriquement) trivialement parallélisable. Évalué à 3.
D'autant qu'elle est très simple, et implique aussi qu'il n'y aura que peu de changement de contexte :
en pseudo code ca devrais un truc comme ça
int nb_thread=n;//on va créer n thread)
int size_tab=x;//la taille du tableau
int size_seg=x/n;//ne pas oublier les vérifs n>x, et si x n'est pas divisible par n. Bref gérer les effets de bords.
/* on lance les traitements*/
while (nb_thread>0)
{
create_thread(mon_thread_a_moi,nb_thread,(size_seg*nb_thread),size_seg*(nb_thread+1));//on créé un "thread a moi", en lui disant d'utiliser les indiques de départ (size_seg*nb_thread), et de fin size_seg*(nb_thread+1)
nb_thread--;
}
nb_thread=n;
/* on attend qu'ils soient terminées*/
while (nb_thread>0)
{
join(pid_thread(nb_thread));
}
void mon_thread_a_moi (int nb,int deb,int end)
{
while (end>=deb)
{
yvar1[end] = yvar1[end] + yvar2[end] + yvar3[end];
yvar2[end] = yvar2[end] + 2.0 * yvar3[end];
end--;
}
}