Я пытаюсь связать потоки OpenMP с CPU. Были опробованы два метода.Сходство потоков OpenMP с GOMP_CPU_AFFINITY и sched_setaffinity
Первый: sched_setaffinity
. Каждый раз, когда потоки разветвляются, я вызываю sched_setaffinity
для привязки потоков OpenMP к процессорам. Кажется, что привязка к каждому времени слишком дорогостоящая. Действительно ли это необходимо для привязки для каждого раза или просто привязки на один раз?
Второй - GOMP_CPU_AFFINITY
. Я установил GOMP_CPU_AFFINITY=0-7
и OMP_NUM_THREADS=4
. Для вычисления используются два узла. Каждый узел имеет 2 фишки, и каждый чип имеет 4 ядра. Я размещаю процесс в каждом узле, и каждый процесс обрабатывает 4 потока. Если GOMP_CPU_AFFINITY
не установлен, OpenMP ускоряет работу программы. Если GOMP_CPU_AFFINITY
установлено следующее возвращаются и OpenMP не работает:
OMP: Warning #123: Ignoring invalid OS proc ID 1.
OMP: Warning #123: Ignoring invalid OS proc ID 2.
OMP: Warning #123: Ignoring invalid OS proc ID 3.
OMP: Warning #123: Ignoring invalid OS proc ID 4.
OMP: Warning #123: Ignoring invalid OS proc ID 5.
OMP: Warning #123: Ignoring invalid OS proc ID 6.
OMP: Warning #123: Ignoring invalid OS proc ID 7.
Результат выглядит так, как если бы среда OpenMP увидела, что ваша система имеет только один процессор. Что такое компилятор и операционная система? –
@HristoIliev Я тоже получил это сегодня, с Intel Fortran 14 и GOMP_CPU_AFFINITY = "0-7: 2". Странно, я регулярно использую эту настройку, теперь просто сижу из дома. –
@VladimirF, это может произойти, если ваш сеанс оболочки каким-то образом ограничен внутри контейнера cgroups с очень узкой маской процессора. Я просто не могу придумать другие правдоподобные объяснения. –