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