J'ai une bibliothèque de classes C++ qui utilise omp pour la parallélisation. J'ai remarqué mon problème quand il a toujours utilisé tous les cœurs sur mon processeur et pas ce que omp_set_num_threads (threadCount) avait comme entrée.omp_set_num_threads renvoie toujours 0 et je n'arrive pas à obtenir le thread num avec omp_get_thread_num()
Alors, quand investegating je réalise que la seule façon d'obtenir num_threads au travail était de ne pas utiliser la méthode omp_set_num_threads(), mais mis num_threads sur la directive parallèle comme ceci:
#pragma omp parallel num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}
Dans le cas ci-dessus la sortie est:
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Si je place ce qui suit:
omp_set_num_threads(4);
#pragma omp parallel //num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}
La sortie est
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Cependant, j'ai créé un nouveau projet de type Application console Win32 les works de omp_set_num_threads et je reçois la sortie:
Bonjour de fil 0 Bonjour de fil 2 Bonjour du fil 1 Bonjour à partir du fil 3
Je dois penser que cela a à voir avec le type de projet ou un paramètre sur le projet. Est-ce que quelqu'un sait ce que cela pourrait être?
Meilleures salutations Richard
Je dois ajouter aussi que je le drapeau/OpenMP fixé – Richard