Многопоточность процессора

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

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

Параллельная многопоточность (simultaneous multithreading, SMT) является вариантом аппаратной многопоточности, которая использует ресурсы процессора с параллельным запуском инструкций и динамической диспетчеризацией с тем, чтобы воспользоваться параллелизмом на уровне потоков и в тоже время воспользоваться параллелизмом на уровне инструкций. Основной замысел, ставший поводом для разработки SMT, заключается в том, что процессоры с параллельным запуском инструкций зачастую обладают более высокой степенью параллелизма функциональных блоков, чем та, которую может эффективно использовать один поток. Более того, используя переименование регистров и динамическую диспетчеризацию, несколько инструкций из разных потоков могут быть запущены без учета их взаимозависимости; разрешение зависимостей может быть произведено за счет возможностей динамической диспетчеризации.

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

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

В суперскаляре с крупномодульной многопоточностью длительные приостановки частично скрадываются за счет переключения на другой поток, который использует ресурсы процессора. Хотя это и сокращает количество тактовых циклов, приходящихся на полный простой, издержки запуска конвейера все же приводят к пустым циклам, а ограничения параллелизма на уровне инструкций означают, что все запущенные слоты использовать не удастся. В случае мелкомодульной многопоточности чередование потоков существенно сокращают количество полностью пустых слотов. Но, поскольку инструкции в отдельно взятом тактовом цикле запускает только один поток, ограничения в параллелизме на уровне команд все еще приводят к пустым слотам внутри некоторых тактовых циклов.

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

Давайте подведем итог. Во-первых, мы узнали, что энергетический «барьер» заставил конструкторов двигаться в сторону упрощения и увеличения количества экономичных процессоров на одном кристалле. Может так удачно сложиться, что объем недовостребованных ресурсов процессоров с изменением последовательности выполнения инструкций может быть сокращен, и будут использованы упрощенные формы многопоточности. Например, микропроцессор Sun UltraSPARC T2 (Niagara 2) является свидетельством возврата к более простой микроархитектуре и, следовательно, использования мелкомодульной многопоточности.

Во-вторых, основной проблемой производительности является допустимость латентности, возникающей из-за промахов при обращении к кэш-памяти. Компьютеры с мелкомодульной многопоточностью, подобные UltraSPARC T2, при промахе переключаются на другой поток, что, возможно, более эффективно скрадывает латентность памяти, чем попытка заполнения неиспользуемых слотов, как в SMT.

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





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: