Sur quel kernel tourne un fil donné?

Existe-t-il une fonction ou un autre moyen de savoir, par programmation, sur quel kernel de quel processeur un thread donné de mon programme (pid) est exécuté? Les solutions OpenMP ou Pthreads pourraient m’aider, si possible. Merci.

Je pense que cela va être spécifique à la plateforme. Sous Windows, vous pouvez utiliser NtGetCurrentProcessorNumber , mais cela pourrait être évité .

Je m’attends à ce que ce soit difficile à faire, car rien ne s’oppose à ce que le fil soit déplacé vers un nouveau kernel à tout moment (dans la plupart des applications, en tout cas). Dès que vous obtenez le résultat, il pourrait être obsolète.

Je pense que sur Linux, on peut essayer sched_getcpu ().

Pour les pthreads, je pense que sched_getaffinity() fait au moins partie de la solution. Vous ne savez pas exactement comment pthreads nomme le CPU: s et les cœurs, cependant.

C’est difficile à faire de manière portable, car la réponse dépend à la fois du matériel et du système d’exploitation.

La bibliothèque de localités matérielles est un nouvel outil qui vous permet d’interroger les informations relatives à la CPU, au cœur, aux threads, etc. Il supporte une liste énorme de matériel et de systèmes d’exploitation, et devrait donc append beaucoup de portabilité à ces types de requêtes. Une fois que vous avez tracé la topologie de votre système, hwloc_get_last_cpu_location retournera le CPU sur lequel le dernier thread a été exécuté, CPU pouvant alors signifier un thread principal ou matériel.