• [^] # Re: creation des threads + cache

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

    Est-il possible de garder ces threads "actifs" afin d'accélérer le prochain appel ?

    Oui, il suffit de ne pas les tuer :) Par exemple, au lieu de faire:

    pthread_create( &(threads[i]), NULL, predictInPlace, (void*) (&dataThreads[i]));


    tu peux exécuter une fonction qui attend du travail :


    pthread_create( &(threads[i]), NULL, traiter_un_job, (void*) (&dataThreads[i]));

    void traiter_un_job(void* ptr) {
    while(1) {
    sem_wait(&truc_a_traiter);
    predicInPlace(ptr);
    sem_post(&traitement_terminee);
    }
    }


    Une fois tes threads lancés, tu peux lancer un traitement en parallèle en appelant sem_post(&truc_a_traiter); pour chaque thread que tu veux débloquer (attention, c'est fait à l'arrache, il y a des races conditions).

    Après, cette solution ressemble à ce que fait l'implémentation OpenMP, donc je pense qu'il vaut mieux laisser OpenMP gérer ce genre de cas. L'utilisation de pthreads n'apportera pas grand chose à moins de fixer les threads sur les cores qui vont bien, ce qu'OpenMP ne sait pas forcement faire.