Разница в ч / б гиперпоточности и многопоточности?

Мне было интересно, если кто-то может объяснить мне разницу ч / б этих двух? Это как-то связано с аппаратной архитектурой Intel (HT)?

2 ответа

Решение

Гиперпоточность - вещь аппаратная и брендинг Intel. Большинство других людей называют это одновременным многопоточностью (SMT). Для программиста два гиперпотока выглядят как два ядра процессора. С аппаратной стороны несколько гиперпотоков разделяют одно ядро. (В случае с Intel, есть два гиперпотока на ядро).

Многопоточность (или многопоточное программирование) обычно считается концепцией использования более одного контекста потока (указатель инструкций, регистры, стек и т. Д.) В одной программе. (Обычно в том же процессе или виртуальном адресном пространстве).

Физический процессор (PP) - это аппаратная реализация одного процессора. С этой точки зрения "ядро" является основным ПП. Иногда такие термины, как многопроцессорность, многоядерность, используются для разграничения того, как процессорные блоки организованы в микросхемы и какие другие физические ресурсы распределяются между ними, например, L2, шины и т. Д. Но для этого ответа нас интересует самый простой процессор.

Когда PP поддерживает гиперпоточность (давайте пока просто используем этот термин), PP делится на два или более логических процессора (LP). Это достигается путем усиления конвейера выполнения, дублирования ресурсов PP, таких как набор регистров, ПК, механизм обработки прерываний и другие. Это позволяет PP удерживать и выполнять несколько "контекстов выполнения" в "одно и то же время". Этот контекст выполнения иногда называют аппаратными потоками (HT). Если ПП не поддерживает гиперпоточность (или он отключен), ПП совпадает с ПП.

Программный поток (ST) - это контекст выполнения, созданный программным обеспечением, например, с помощью pthread_create() или clone(). Эти объекты планируются операционной системой на процессоры. Многопоточная программа - это код, в котором программист явно создает ST. Многопоточная программа может работать в процессоре, который не поддерживает гиперпоточность. В этом случае переключение контекста между ST является дорогостоящим, поскольку требует вмешательства планировщика и использования памяти для хранения и загрузки контекстов выполнения.

Когда включена гиперпоточность, ОС планирует несколько ST на один PP. Обычно один ST на LP. ОС видит LP, как будто они настоящие PP. Таким образом, каждый ST будет работать на разных LP. После планирования ST мы можем сказать, что они становятся аппаратными потоками (HT) (грубо говоря) в том смысле, что PP получает контроль. Когда один HT останавливается, например, из-за отсутствия кэша или сброса конвейера, PP выполняет другой HT. Это "переключение контекста" почти ничего не стоит, так как контекст HT уже есть в PP. ОС не участвует в этих переключениях контекста. Что наиболее важно, так это то, что эти остановки и соответствующие переключения контекста могут происходить на многих этапах конвейера. Это отличается от переключения контекста на основе планировщика, которое происходит при событиях на основе прерываний, таких как квантовое истечение, прерывание ввода-вывода, прерывание, системные вызовы и т. Д.

Как сказал Натан в предыдущем ответе, гиперпоточность - это очень специфический термин. Более общий и независимый термин - "Одновременная многопоточность (SMT)".

Наконец, я настоятельно рекомендую прочитать: 1) Поддержка операционной системы для одновременных многопоточных процессоров. Джеймс Р. Балпин

2) Выбор микроархитектуры и компромиссы для максимизации эффективности обработки. Дебора Т. Марр (кандидатская диссертация)

Другие вопросы по тегам