• [^] # Re: -funroll-loops

    Posté par . En réponse au message Parallelisation d'une boucle (théoriquement) trivialement parallélisable. Évalué à 3.

    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));
    }

    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--;
    }
    }