Все пишут многопоточные программы.На сервере с многоядерным процессором сколько потоков уместно?Вы знаете?
Здесь мы должны сначала уточнить понятия количества процессоров, количества ядер и количества процессоров.
Например, при использовании top для просмотра нагрузки нажмите 1, чтобы увидеть CPU0~CPUn, число здесь на самом деле является количеством процессоров.
CPU
В выводе, который видит cat /proc/cpuinfo, вы можете увидеть концепции ядер процессора и процессора.
В чем разница между этими понятиями?
CPU:独立的中央处理单元,体现在主板上是有多个CPU的槽位。
CPU cores:在每一个CPU上,都可能有多个核(core),每一个核中都有独立的一套ALU、FPU、Cache等组件,所以这个概念也被称作物理核。
processor:这个主要得益于超线程技术,可以让一个物理核模拟出多个逻辑核,即processor。
简单来说就是,当有多个计算任务时,可以让其中一个计算任务使用ALU的时候,另一个则去使用FPU。
这样就可以充分利用物理核中的各个部件,使得同一个物理核中,也可以并行处理多个计算任务。
После прояснения этих понятий, как мы должны выбрать количество потоков для установки программы?
Теоретически для задач с интенсивными вычислениями количество потоков должно быть таким же, как количество параллелизма, которое может обеспечить ЦП. Должен ли «параллельный номер» здесь быть количеством физических ядер или количеством процессоров?
Говорите фактами.
Для тестирования я использовал сервер с 2 процессорами, 12 физическими ядрами на каждом процессоре и 2 логическими процессорами на каждом физическом ядре. Используйте 6, 10, 12, 30, 48, 96 для количества потоков.
Видно, что если количество потоков превышает количество процессоров (48) или меньше количества физических ядер (24), это сильно влияет на пропускную способность. Таким образом, для задач, требующих больших вычислительных ресурсов, число потоков должно быть установлено в пределах от 24 до 48.
В частности, пропускная способность и загрузка ЦП находятся в диапазоне от 24 (количество физических ядер) до 48 (количество процессоров), и существенных изменений нет. Однако задержка 99 имеет медленный рост (10%), а средняя задержка немного уменьшается (4%).
Также можно увидеть более конкретную статистику по задержке, глюк кривой задержки будет уменьшаться по мере уменьшения количества потоков.
Так почему же технология «гиперпоточности» здесь не увеличивает степень параллелизма, как в теории, улучшая тем самым пропускную способность?
Я думаю, что это может быть связано с тем, что в моей программе (да и в большинстве программ) использование различных вычислительных компонентов (FPU\ALU) неравномерно, как правило, на использование ALU приходится большинство, а на использование FPU приходится лишь небольшая часть. небольшая часть, поэтому технология Hyper-threading не приносит значительного улучшения параллелизма; это небольшое улучшение также компенсируется потреблением переключения потоков.
Таким образом, для задач с интенсивными вычислениями обычно рекомендуется устанавливать количество потоков равным количеству физических ядер. В частности, также необходимо выполнить соответствующие стресс-тесты для различных программ, чтобы получить соответствующие параметры выбора.
Рекомендуемое чтение:
Использовать двойной буфер без блокировки
Наступая на яму: будьте осторожны в критической зоне
Должна ли производительность блокировок чтения-записи быть лучше?
Пожалуйста, укажите источник:blog.Mandarin.com/2018/08/18/…
Добро пожаловать в WeChat для сканирования приведенного ниже QR-кода. Подпишитесь на мою общедоступную учетную запись WeChat TechTalking, Technology·Life·Thinking:
Бэкенд-технологии «черный дом»