Многоядерные процессоры все еще страдают от уменьшения отдачи в современном мире?

8

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

Используют ли большинство новых приложений многопоточность и, таким образом, используют преимущества нескольких ядер? Если нет, то помогают ли более новые 64-битные ОС использовать ядра, назначая задачи / процессы различным ядрам? Или многоядерные процессоры все еще продолжают страдать от того же (или аналогичного) убывающего дохода?

Пожалуйста, поддержите любые претензии ссылками.

rishimaharaj
источник
2
Нахождение в операционной системе x64 не будет иметь никакого значения, если у вас есть программа с несколькими потоками. Различия между компиляторами между 2008 и 2012 годами огромны. Пока не было простого способа выполнить действие в нескольких потоках, иметь центральный процессор с возможностью одновременного выполнения нескольких потоков было бессмысленно. Даже сегодня это все еще не так просто сделать.
Ramhound

Ответы:

7

Это сильно зависит от того, что вы делаете.

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

Для игр вы выиграете как минимум от двух. После этого все зависит от игры. Теоретически вы можете запустить каждого противника ИИ в отдельном потоке, но центральная игровая логика не может быть легко распараллелена - вам нужно одно место, где все результаты объединяются, чтобы сформировать согласованное игровое состояние. Так что обычно есть один «основной» поток, который все ждут.

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

Опытные пользователи любят многозадачность. Torrent, VirtualBox, захват экрана, видео, майнкрафт и просмотр веб-страниц работают одновременно. Таким образом, вы получите выгоду от каждого приложения, загруженного процессором, имеющего собственное ядро. В настоящее время популярно транслировать вашу игру. Так что это два ядра для игры, по крайней мере, еще одно для потока кодировщика, и, по крайней мере, еще одно для остальной системы. Это как минимум 4 ядра.

Ансис Малиньш
источник
1
В общем, хороший игровой ИИ гораздо сложнее, чем примирение нескольких действий. Это просто модное дополнение. Во-вторых, вы предполагаете игры, которые имеют одно центральное игровое состояние. Это тоже не обязательно правда. Даже если это и так, это не обязательно является препятствием для потоков. Например, физические расчеты обычно выполняются параллельно. И, наконец, игры также имеют большую часть рендеринга графики, что также приводит к многопоточности.
MSalters
Я сомневаюсь, что одно ядро всегда является правильным выбором (просто добавьте очень медленную формулу в Excel ...), и я думаю, что вы немного упрощаете. Как насчет, например, функции Turbo Core (AMD) / Turbo Boost (Intel) на более новых процессорах? Это позволяет моей шестиядерной AMD парковать половину своих ядер и запускать другую половину с более высокой тактовой частотой - и версия Intel, я считаю, еще более мелкозернистой - поэтому процессор может на лету повторно оптимизировать работу, требуемую для Это. Это делает их лучшим выбором? Проблема может быть точно решена только с помощью реальных измерений и тестов.
DMA57361
Я полностью согласен с @ DMA57361 Несколько лет назад мой дядя купил несколько одноядерных компьютеров AMD для своих дошкольников. Фоновые процессы (Windows Update является наиболее вопиющим нарушителем) регулярно выводили их из строя практически на несколько минут за счет максимальной загрузки ЦП.
Дэн играет с огнем
Не забывайте гиперпоточность. Более продвинутые процессоры Intel могут имитировать дополнительное процессорное ядро, предоставляя дополнительный набор регистров в каждом ядре и позволяя потокам одновременно использовать разные части каждого процессорного ядра для дальнейшего повышения производительности многозадачности.
bwDraco
3D-рендеринг - еще один пример, демонстрирующий большое преимущество. Если вы аниматор или графический дизайнер и делаете много рендеров; все программное обеспечение профессионального уровня имеет преимущество, заключающееся в использовании каждого ядра, которое может предложить ваша машина (и даже больше в случае сетевых кластеров). Производительность будет масштабироваться линейно с количеством ядер.
Джейсон С
5

Боюсь, что ответ остается, как и всегда, «это зависит от того, что вы делаете».

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

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

Стоит отметить, что есть несколько «больших» приложений, которые не являются многопоточными (просто проверьте эквивалент диспетчера задач вашей ОС, он должен быть в состоянии сказать вам, сколько принадлежит каждому процессу - мой Firefox в настоящее время использует, например, 31 ).

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

Например, в этом посте Tom's Hardware (с 2009 года) делается попытка взглянуть на производительность нескольких многоядерных процессоров в одновременных приложениях - запустить игру вместе со сканированием AVG (оба из которых, вероятно, являются многопоточными). Четырех-, трех- и двухъядерные процессоры работают одинаково только с игрой, но добавляют одновременное сканирование AVG, и производительность (измеренная по среднему FPS) падает на 22%, 40% и 59% соответственно.

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


И затем вы должны принять к сведению современные функции процессоров, такие как Intel Turbo Boost / AMD Turbo Core. Эти особенности позволяют многоядерному процессору парковать ядра (переводить их в более медленный режим с низким энергопотреблением) и использовать запасную энергию для разгона ядер, которые остаются активными - что позволяет процессору оптимизировать себя для обеспечения как можно большей вычислительной мощности насколько это возможно для количества задач, с которыми он представлен.

DMA57361
источник
2

Чтобы добавить масла в огонь, я прочитал здесь, что Android на самом деле замедляется, имея более одного ядра:

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

Чем больше ядер у устройства, тем больше энергии ему требуется - и на данный момент такое количество энергии просто слишком велико для устройств Android, чтобы сбалансировать его.

rishimaharaj
источник
Хм, не лучше ли это отредактировать в исходном вопросе?
подмастерье Компьютерщик
Я думаю, что весь этот поток будет преобразован в вики / FAQ сообщества, и подумал, что было бы лучше оставить вопрос как есть, и добавить это отдельно. @ Модераторы - этот ответ должен быть объединен с вопросом или оставлен как есть?
Ришимахарадж
0

Конечно, это зависит от того, что вы делаете, но да, отдача уменьшается.

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

Кроме того, не все связано с вычислениями. Добавление процессорных ядер не поможет, если ваша рабочая нагрузка связана с вводом / выводом. Если вы когда-либо устанавливали твердотельный накопитель для замены механического жесткого диска, вы, вероятно, будете знать, что производительность повседневных вычислений чаще всего ограничивается объемом памяти вашего компьютера. В загруженных серверных средах, где используется большое количество ядер, чтобы система могла обрабатывать большое количество пользователей и запросов одновременно, специализированные дисковые массивы, SSD и другие системы хранения используются для обеспечения максимальной производительности под нагрузкой.

bwDraco
источник