Как узнать, было ли ядро уже привязано
hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, depth_CORE,MyRank%4);
hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset);
hwloc_set_cpubind(topology, cpuset, 0)
В любом случае в hwloc можно узнать, связан ли поток с этим "процессором". Причина, по которой мне нужно это знать: предположим, у меня есть четырехъядерное ядро. Но если я выпущу 8 процессоров во время выполнения. Так что случается связать 2 процесса с каждым ядром. Однако я хочу привязать процесс к ядру только тогда, когда он свободен. Так или иначе, я мог знать, что ядро уже привязано к процессу.
1 ответ
Кажется, что единственный способ сделать это - перечислить все процессы и проверить, связаны ли некоторые из них с указанным ядром. Вы можете понять, как это сделать, изучив исходный код утилиты hwloc-ps. Что он делает, это то, что он читает через /proc
там файловая система и извлекает PID процесса, затем использует hwloc_get_proc_cpubind()
получить обязательную маску. Это должно работать на Linux и Solaris, а также на системах *BSD с установленными /proc
, В Windows следует использовать системный API-интерфейс из библиотеки справки инструмента, чтобы получить список PID. OS X не поддерживает привязку процессора.