Что такое AMD SMT и Intel Hyper-threading

Что такое AMD SMT и Intel Hyper-threading

Открыв диспетчер задач на своем компьютере и перейдя в раздел «Производительность», среди прочего Вы увидите надпись «Ядра: <количество>  Логических процессоров: <количество>». Так вот количество логических процессоров может оказаться в 2 раза больше, чем количество ядер, а для некоторых серверных решений даже в 4 раза (описывается win 10, на разных операционных системах может быть разный интерфейс).

А теперь что это такое:

Как мы помним из предыдущих статей (Думать о железе и Память ПК), центральный процессор не всегда может заниматься непосредственно вычислениями, т.к. для этих самых вычислений может не оказаться данных и/или команд непосредственно около АЛУ (тот элемент, который и производит вычислений). В этот момент система начинает искать информацию за пределами КЭШа, что занимает время, в это самое время как таковое АЛУ простаивает.

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

И вот в какой-то момент может оказаться так, что необходимой для текущего процесса информации нет «под рукой» вообще, соответственно АЛУ вынуждено простаивать (зачастую именно в такие моменты появляется надпись «загрузка ЦП 100%»). Но ведь КЭШ никуда не делся, и в L1, и в L2, и в L3 что-то есть, они явно не пустые.

Тут и приходят на помощь технологии из названия статьи. По своей сути это еще один конвейер задач, который способен использовать все тот же АЛУ.

Проще говоря — на один АЛУ идет два конвейера задач, задачи которых выполняются через одну (при равном приоритете, для определенных задач может выделяться на несколько тактов процессора больше, но это скорее нюансы, не меняющие картину в общем), как итог — АЛУ загружен полностью, пока один из конвейеров ждет свое очереди, он может подготовить данные для обработки. И тут каждый конвейер и выступает в роли того самого «логического процессора».

Стоит помнить, что в современных реализациях «многопотока» на такте будут выполняться задачи только с одного потока. Что это значит: в ядре есть несколько вычислительных блоков (~функциональных модулей), пусть условно будет 6 блоков для операций с целочисленными значениями и 2 для значений с плавающей запятой. Если процессор способен реализовать TMT (Temporal multithreading), то возможна ситуация, когда один поток использует 2 блока для целочисленных значений, второй поток использует 3 целочисленных, один для плавающей запятой, третий использует 1 целочисленный, четвертый один с плавающей запятой. В итоге ядро нагружено полностью (идеальная ситуация, крайне редко достижимая на практике), и это все происходит на одном такте, на следующем такте распределение ресурсов ядра может поменяться. В привычном SMT (Hyper-threading является частным случаем SMT) на отдельном такте всеми вычислительными блоками заведует только одно ядро, и соответственно пытается загрузить их полностью, но например задача может не использовать переменные с плавающей запятой, потому соответствующие блоки простаивают.

С каждым днем программисты распараллеливают задачи все лучше и лучше, и именно в них процессоры выдают наилучший результат. Но если какая-то игруха написана была давным давно и использует лишь один поток, либо сильно нагружает один или два потока, а остальные нагружены слабо, то подобная технология способна даже ухудшить результат. Вы легко можете найти результаты подобных тестов на просторах сети. Даже при сравнении Intel 8700K и Intel 8400 второй в некоторых задачах опережает первый, несмотря на почти 25% более высокие частоты первого и равное количество физических ядер.

Так что заботьтесь о конечных пользователях)

© Все права защищены.

Top