Несколько ядер = лучшая многозадачность?

Несколько ядер = лучшая многозадачность?

Конкретно я рассматриваю либо i5-3570k, либо FX-8350, но это заставило меня задуматься о более общем конкретном вопросе о том, как несколько ядер могут улучшить общую многозадачность.

Читал много обзоров, тестов и т. д., все они в основном говорят об одном и том же: более быстрый тактовый 4-ядерный I5 превосходит более медленный тактовый 8-ядерный FX в большинстве приложений, если только это приложение специально не закодировано для использования преимуществ более 4 ядер. Игры особенно лучше работают на i5.

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

Например, в любой момент дня у меня может быть открыто несколько браузеров с несколькими вкладками, может быть Photoshop или Visual Studio, несколько фоновых программ (антивирус, steam, keepass и т. д.). И это в светлый день.

Итак, мой вопрос: теоретически, хотя более быстрый 4-ядерный процессор будет быстрее запускать отдельные части программного обеспечения по отдельности, не может ли 8-ядерный процессор лучше выполнять несколько частей программного обеспечения одновременно, даже если они не обязательно оптимизированы для 8 ядер?

решение1

Загрузка ЦП Linux

Одной из полезных мер является концепция LinuxЗагрузка ЦП. По сути, представьте, что каждое ядро ​​ЦП — это 1,00 доступных единиц нагрузки, а каждая задача, работающая на 100% ядра, — это 1,00 используемых единиц нагрузки. Для сервера с интенсивной обработкой данных идеальная нагрузка, вероятно, равна количеству ядер ЦП (4,00 нагрузки для 4 ядер ЦП).

Цикл занятости (что-то вроде "while(true)") может занять 100% одного ЦП, что составляет 1,00 единиц нагрузки. Однопоточный бенчмарк также достигает пика в 1,00. Многоядерный оптимизированный бенчмарк может занять больше ядер, вплоть до 8,00, доступных на FX-8350.

Но большинство ваших приложений (Chrome + Firefox open, Photoshop, Visual Studio) не потребляют так много ресурсов ЦП, когда работают в фоновом режиме. Да, они могут работать на нескольких ядрах, но если они используют только 10% доступного времени (0,10 единиц нагрузки), эти четыре приложения в сумме дают только 0,40 нагрузки, и вы видите мало преимуществ от наличия более одного ядра ЦП. Аналогично, приложения, занятые блокировкой на диске или сетевом доступе, не будут использовать время ЦП во время ожидания.

Средняя нагрузка > 4.00

В случаях, когда загрузка вашего приложения составляет от 4,00 до 8,00, производительность FX-8350, скорее всего, будет выделяться. Нагрузка 5,00 на 4-ядерном ЦП может привести к большому количеству конфликтов за ресурсы ЦП, а переключение задач между задачами усугубляет накладные расходы.

Средняя нагрузка < 4.00

Ваш вопрос, похоже, касается моментов, когда математика не столь ясна: будут ли 8 ядер лучше при нагрузке ниже 4,00. Для довольно постоянной нагрузки серверного типа вы можете запустить несколько тестов и посмотреть, есть ли на самом деле какая-то выгода. Для постоянно меняющейся ежедневной вычислительной нагрузки явного победителя нет.

решение2

Это во многом зависит от приложения, ОС и того, как оно выполняет свою работу.

Если приложение разработано как однопоточное, никакие дополнительные ядра не помогут его производительности. Однако вы могли бы запускать дополнительные приложения, используя другие ядра, ЕСЛИ бы операционная система была достаточно умна, чтобы распределить работу таким образом. Поэтому дополнительные ядра могут обеспечить небольшое дополнительное преимущество, особенно для нескольких приложений, работающих одновременно.

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

Связанный контент