2015-12-07 9 views
1

У меня есть исполняемый файл, который мне нужно запускать несколько раз с разными входными параметрами. Это занимает около часа за прогон, и я заметил, что за весь час загрузка процессора из 1 ядра из 8 составляет 100%, остальные из них работают на холостом ходу.Принудительное использование нескольких ядер

Возможно ли создать 4-5 процессов, каждый из которых использует другое ядро ​​и работает с различными параметрами? Это обычная практика? Это первый раз, когда я беспокоюсь о нескольких ядрах, поэтому, если есть какие-то другие вещи, о которых мне нужно знать, пожалуйста, дайте мне знать.

В настоящее время я использую Python для запуска и жду завершения этого исполняемого файла.

+1

Зависит от того, являются ли ресурсы доступными или нет. Если у них есть общий внешний источник, это может быть сложно, но его трудно сказать без дополнительной информации. – Caramiriel

+1

Вы должны попробовать с помощью модуля «многопроцессорности» (** NOT ** потоки для процессов с привязкой к ЦП из-за блокировки Python Global Interpretor Lock) –

ответ

1

При выполнении параллельных процессов разделяемые ресурсы должны быть приняты во внимание, а также в зависимости от профиля нагрузки это может или не может быть быстрее, чем один процесс (например, если узким местом является не процессор)

Общие проблемы, как правило, связанные с к «условиям гонки» и взаимоблокировкам, прежний - это случай, когда два процесса работают с одними и теми же данными, которые не знают друг о друге, так что данные повреждаются из-за перезаписей, например,

Не зная больше деталей о задаче, невозможно точно ответить

2

Что вы описываете обычно выполняются при компиляции больших программ - генерируются множественные процессы компилятора, работающие с разными файлами.

Если ваша программа связана с процессором, как кажется, входные данные легко разборчивы, и различные экземпляры не будут топать ногами друг друга при написании результатов, вы можете попробовать и посмотреть, получите ли вы ожидаемое ускорение.

1

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

В качестве альтернативы вы можете разбить входной фронт и запустить несколько копий вашей программы на входах с использованием GNU-параллельных или старых старых xargs (посмотрите на опции -n и -P).

Тогда возникает проблема слияния результатов вместе, если необходимо.

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

Смежные вопросы