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

2744
rishimaharaj

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

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

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

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

4 ответа на вопрос

7
Ansis Māliņš

It depends heavily on what you do.

For regular ol' Word and Excel and Minesweeper and whatever else your mom uses, one core is still enough and more than two is an overkill. These kinds of applications spend most of the time idling, waiting for user input.

For gaming you'll benefit from at least two. After that it depends on the game. Theoretically you could run each AI opponent on a separate thread, but the central game logic cannot be easily parallelized - you need one place where all the results are put together to form a coherent game state. So there is usually one "main" thread that everyone waits on.

For multimedia, real number crunching, and science every core counts. These are tasks that are either inherently multithreaded or can be easily made so, and the developers have strong incentive to take advantage of all available processing power.

Power users like to multitask. Torrent, VirtualBox, screen capture, video, minecraft, and web browsing all running at the same time. So you're going to benefit from each CPU-hungry app having its own core. Nowadays it's popular to livestream your game. So that's two cores for the game, at least one more for the encoder thread, and at least one more for the rest of the system. That's at least 4 cores.

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

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

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

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

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

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

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

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


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

2
rishimaharaj

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

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

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

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

Of course, it depends on what you're doing, but yes, there are diminishing returns.

Simple, everyday applications such as word processing or Web browsing benefit little from having more than two processor cores. Scientific computing and gaming applications tend to make better use of four (or more) cores and/or hyperthreading capability as they tend to be designed to make the most of modern hardware, but the benefit of more than four cores is limited.

In addition, not everything is compute-bound. Adding processor cores won't help if your workload is I/O bound. If you've ever installed an SSD to replace a mechanical hard drive, you'll probably know that everyday computing performance is limited more often than not by your computer's storage. In busy server environments where a large number of cores is used to enable the system to handle large numbers of users and requests simultaneously, specialized disk arrays, SSD, and other storage systems are used to ensure maximum performance under load.

Похожие вопросы