Найти в Дзене
Mizhgunit

Что такое многопоточность, или почему 2 ядра/4 потока хуже 4/4

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

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

Немного истории

Если совсем кратко, то процессор состоит из ядер и еще множества компонентов, которыми мы пренебрежем в рамках статьи (вроде кэша, например). Раньше все было просто - 1 ядро процессора обрабатывает 1 "поток информации", но требования-то растут. Тут кто-то разумно предположил, что два ядра, работающих параллельно, покажут гораздо бОльшую производительность, однако прежде этого, компания intel в процессорах pentium 4 ввела технологию HyperThreading. Она позволяла "подводить" к одному физическому ядру процессора два потока информации, таким образом в случае ошибки кэша, процессор не прекращал обрабатывать информацию, а продолжал обрабатывать ее по "второму каналу". Таким образом, производительность в некоторых задачах могла возрасти. Отнюдь - не существенно. Зачастую прирост составлял 5-10%, а в случае с отдельными процессорами - отключение многопотока поднимало производительность на ~30% (если что - я про первые поколения i7. Тогда не было большого количества программ, способных эффективно загрузить больше 4-х потоков. Из-за огрех в оптимизации, вместо 4 полноценных ядер нагружались всего 2. Благо, проблема неактуальна на сегодняшний день).

Если что - сейчас был крайне упрощенный принцип работы этой фичи.

Так как же это работает?

Из оперативной памяти в кэш процессора выгружается информация. Затем, эта информация попадает на вычислительные блоки (ядра процессора)

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

Думаю, так более наглядно. Синие круги - физические ядра процессора, тогда как Thread'ы - потоки команд. Данная картинка подходит для процессоров с технологией мультипоточности, в то же время процессоры без нее - лишаются потока B, как следствие - ошибка (которая на картинке на потоке A выделена как прерывание потока) не будет обработана во время простоя процессора. Как следствие - часть вычислительной мощности мы потеряли.
Думаю, так более наглядно. Синие круги - физические ядра процессора, тогда как Thread'ы - потоки команд. Данная картинка подходит для процессоров с технологией мультипоточности, в то же время процессоры без нее - лишаются потока B, как следствие - ошибка (которая на картинке на потоке A выделена как прерывание потока) не будет обработана во время простоя процессора. Как следствие - часть вычислительной мощности мы потеряли.

Существует мнение, товарищи...

Очень часто слышу (а особенно от хейтеров AMD), что разницы между 2/4 и 4/4 нет. То есть не просто нет, а тот же "гиперпень" в многопоточном режиме работы даст фору 3-му райзену. Тут, конечно, не без каламбура: некоторые не приводят в качестве аргументов тестов, аргументируя свою позицию тем, что "блин, ну этож интол)0)". Обратимся к тестам.

-2
-3

"ряженка" не первой свежести обходит "народные" процессоры inlel (за 8 тысяч, народные, ага). И это сейчас не безосновательный хейт в сторону интел, а доказательства для теоремы (2/4 хуже, нежели 4/4). Таким образом, ряженка давит количеством. А толку от мегапроизводительных ядер в процессорах intel, если их 2? Конечно, мультипоточность, все дела, но как вы уже могли понять: гипертрейдинг - вовсе не панацея от всех бед.

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