Заставьте CPLEX использовать количество реальных не логических ядер - PullRequest
0 голосов
/ 24 октября 2018

Я оптимизирую модель с помощью CPLEX.Это более крупная модель, поэтому она требует много вычислительного времени.У меня есть машина с 8 реальными ядрами, которые организованы в 16 виртуальных ядер.С помощью параметра «потоки» можно изменять количество потоков.Но мне нужно дальнейшее объяснение того, что происходит, когда я меняю количество потоков.

Будет ли CPLEX использовать только реальные 8 ядер, когда я установлю threads=8?Или он будет работать только на 8 виртуальных ядрах, чтобы не было никакой реальной выгоды?Как мне подойти к этому, чтобы сократить время расчета?

1 Ответ

0 голосов
/ 29 октября 2018

cplex будет использовать 8 виртуальных ядер, и это будет зависеть от операционной системы, чтобы планировать эти потоки на 8 виртуальных ядрах.Принимая во внимание, что все эти потоки являются опрометчивыми нагрузками, вполне вероятно, что ОС планирует их на разных физических ядрах, но это не гарантируется.Так что установка потоков на 8, скорее всего, поможет.

Чтобы гарантировать, что каждый из ваших 8 потоков будет работать на разных физических ядрах, вы можете установить параметр cpumask .Например, в Linux вы должны установить для cpumask значение 00ff, чтобы использовать 8 разных физических ядер.(В Linux, если гиперпоточность включена на машине с n физическими ядрами, виртуальные процессоры i и n + i находятся на i-м физическом ядре, поэтому маска 00ff, которая является двоичной 0000 0000 1111 1111, дает команду cplex использовать первую8 виртуальных ядер, которые будут на разных физических ядрах.) Кстати, если вы работаете в linux, вы можете использовать команду taskset для достижения почти того же результата.

О, и вам все равно нужно установить потоки.cpumask ограничивает только то, какой виртуальный процессор будет использовать cplex, но не меняет количество используемых потоков.

...