J'ai écrit un programme OpenMP, l'exécutant sur une machine à deux cœurs.Affinité de thread OpenMP: Définir 2 threads dans le programme, combien de cœurs sont en cours d'exécution?
Lorsque j'ai changé le numéro de fil de 1 à 2 et de 2 à 4, je n'ai pas réussi à accélérer le 2x.
2 fils à 4 fils, ce sont les hyperthreads. Hyperthreads ne peuvent généralement pas accélérer 2x en raison de la limitation des ressources. Toutefois, 1 threads à 2 threads, ne peut toujours pas accélérer le 2x, je me sens confus à ce sujet.J'ai cherché et trouvé le concept d'affinité du processeur, mais je ne peux pas comprendre comment fonctionne OpenMP.
Lorsque j'utilise 2 threads, est-ce que le planning statique d'OpenMP organise 2 threads en 1 core ou 2 core? Fonction
omp_get_thread_num() ne peut me dire la réponse puisque la valeur de retour est 0 ou 1, mais je ne sais pas qu'ils sont en cours d'exécution sur 1 noyau ou 2.
Merci pour l'aide.
Sans code c'est difficile de répondre parce que nous devinerions surtout ce qui se passe. Pour commencer: omp_get_thread_num() renvoie l'identifiant du thread. Donc Thread 1 renvoie 0 et Thread 2 - 1 et ainsi de suite. – Taron
La méthode habituelle pour attribuer 2 threads à des cœurs séparés malgré l'hyperthreading est avec omp_places = cœurs. Si votre openmp ne supporte pas cela, il se peut que vous ayez besoin de plus de threads que de cœurs afin d'utiliser pleinement tous les cœurs. – tim18
Puis-je écrire du code pour savoir quel est le noyau de Thread 1, quel est le noyau de Thread 2? –