Я много занимаюсь статистическим анализом с помощью R и активно использую большие многоядерные экземпляры на AWS. В основном для поиска гиперпараметров, перекрестной проверки и бутстрапинга.
Допустим, у меня есть экземпляр с c
ядрами и задание с r >= c
репликами, которые отдаются c
ядрам за раз. Теперь из-за системного процесса (например, запущенного моего клиента ssh htop
) есть задания, помимо c
запущенных моих реплик.
Это означает, насколько я понимаю работу операционной системы, что есть некий процесс, который отключает мои задания, чтобы htop
(и что угодно еще) могло получить доступ к процессорам. После того, как я дал этим различным процессам некоторое время на солнце, мои задания возобновляются.
Когда я смотрю на htop
, я вижу много красного, смешанного с зеленым. Правильно ли будет сказать, что зеленый — это моя работа, а красный — фон, сделанный для того, чтобы обеспечить мою работу?
Интуитивно кажется, что такого рода перетасовка будет неоптимальной. Так вот мой прямой вопрос: если у меня есть доступ к c
ядрам, должен ли я распределять свои задания по репликации по всем c
из них, или, может быть, c-1
или что-то в этом роде?
Я также предполагаю, что есть много деталей о том, как вычислительные ресурсы назначаются заданиям, которые я не понимаю и умалчиваю. Что будет, если все мои задания будут идти в c-1
ядра, а все системные процессы — в ядро cth
? Это сделает весь мой htop зеленым, за исключением одной полоски? И будет ли это иметь какой-либо смысл?
Я полагаю, что я мог бы провести эксперименты по бенчмаркингу, но это было бы сложно с огромными экземплярами и наборами данных, и я не уверен, что я бы узнал, учитывая, как много вещей будет специфично для приложения. Поэтому я хочу лучше понять, как все работает.
решение1
Трудно узнать точный эффект на конкретное приложение без экспериментов, НО общее правило заключается в том, что небольшое превышение числа ядер полезно (например, большинство руководств по компиляции предлагают вызывать make с числом ядер/потоков + 1), но большое превышение, скорее всего, контрпродуктивно из-за дополнительных накладных расходов. Причина этого в том, что если одна (или несколько) задач спят, ожидая ввода-вывода или таймеров или чего-то еще, то другие потоки все еще могут продолжать работу.
Перестановка работы (планирование ОС) происходит во всех современных операционных системах, и это то, с чем мы должны работать, а не бороться с этим. Если кажется, что есть что-то не связанное с конкуренцией, вы можете снизить уровень nice вашего процесса, но на выделенном экземпляре AWS... Трудно представить, что это необходимо.