1

Когда дело доходит до виртуализации, я размышляю о взаимосвязи между физическими ядрами и виртуальными ядрами, особенно в том, как он воздействует на приложения, использующие параллелизм. Например, в сценарии виртуальной машины, если есть меньше физических ядер, чем есть виртуальные ядра, если это возможно, каков эффект или ограничения на параллельную обработку приложения? Я спрашиваю, потому что в моей среде не раскрывается, что такое физическая архитектура. Есть ли еще много преимуществ для распараллеливания, если приложение живет на двухъядерной виртуальной машине, размещенной на одной физической физической машине?Физические ядра против виртуальных ядер в параллелизме

ответ

6

Есть ли еще много преимуществ для распараллеливания, если приложение работает на двухъядерной виртуальной машине, размещенной на одноядерной физической машине?

Всегда.

Параллельная обработка уровня ОС (то есть, конвейеры Linux) значительно улучшит производительность, независимо от того, сколько ядер - реальных или виртуальных - у вас есть.

Действительно, вам нужно создавать довольно надуманные проблемы или действительно немые решения для , а не, чтобы улучшить производительность, просто разбив большую проблему на множество мелких проблем вдоль конвейера.

Как только у вас есть конвейерное решение, и оно связывает 100% ваших виртуальных ресурсов, у вас есть что-то, что вы можете сделать мер.

Начать попытки различных вариантов логических и физических ресурсов.

Но только после у вас есть конвейер уровня ОС, который использует каждый доступный ресурс. До тех пор у вас есть фундаментальная работа, чтобы просто создать решение для конвейера.

+3

На самом деле существуют некоторые алгоритмы, которые по сути являются однопоточными и не могут ускоряться, разбивая их на более мелкие куски. Фактически, в этих случаях вы часто увидите замедление. Знание того, когда пытаться распараллелить свой код, а не ключ. – jer

+0

@jer: хотя это правда, практическое приложение часто включает в себя объединение основного алгоритма с вводом, выводом, обработкой и другими материалами, которые могут быть хорошо конвейерными. Хотя алгоритм * * * не может распараллеливаться, приложение почти всегда хорошо конструируется с некоторым измеримым ускорением. –

+0

Уверен, все, что я пытался сказать, бросает все в конвейер, не обязательно мудрая идея. Нет смысла замедлять некоторые части вашей программы только потому, что все это усложняется. Но я знаю, что вы говорите, и вы действительно в основном правы. – jer

1

Поскольку вы включили тег F #, и вас интересует параллельная производительность, я предполагаю, что вы используете асинхронный IO F #, поэтому потоки никогда не блокируются, они просто меняются между задачами, связанными с ЦП.

В этом случае идеально подходит для того же числа потоков, что и количество виртуальных ядер (по крайней мере, на основе моих экспериментов с F # в Ubuntu под Virtualbox, размещенных в Windows 7). Имея больше потоков, чем это немного снижает производительность, с меньшим уменьшением производительности.

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

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