Таненбаум Э.- Архитектура компьютера. стр.434

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

Промежуточная схема реализуется в рамках порогового разделения ресурсов (threshold resource sharing). Согласно этой схеме любой программный поток может динамически получать определенный (ограниченный) объем ресурсов. Применительно к реплицированным ресурсам этот подход обеспечивает гибкость без угрозы простоя одного из программных потоков из-за невозможности получения ресурсов. Если, к примеру, запретить каждому из потоков занимать больше 3/4 очереди команд, повышенное потребление ресурсов медленным потоком не помешает исполнению быстрого.

Модель гиперпоточности Pentium 4 объединяет разные стратегии разделения ресурсов. Таким образом, предпринимается попытка решить все проблемы, связанные с каждой стратегией. Дублирование реализуется в отношении ресурсов, доступ к которым постоянно требуется обоим программным потокам (в частности, в отношении счетчика команд, таблицы отображения регистров и контроллера прерываний). Дублирование этих ресурсов увеличивает площадь микросхемы всего лишь на 5 % — согласитесь, вполне разумная плата за многопоточность. Ресурсы, доступные в таком объеме, что практически исключается вероятность их захвата одним потоком (например, строки кэша), распределяются динамически. Доступ к ресурсам, контролирующим работу конвейера (в частности, его многочисленные очереди), разделяется — каждому программному потоку отдается половина слотов. Главный конвейер архитектуры Netburst, реализованной в Pentium 4, изображен на рис. 8.7; белые и серые области на этой иллюстрации обозначают механизм распределения ресурсов между белым и серым программными потоками.

Таненбаум Э.- Архитектура компьютера.

Рис. 8.7. Разделение ресурсов между программными потоками в микроархитектуре NetBurst, реализованной в Pentium 4

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

Впрочем, с многопоточностью не все так просто. Даже у такой прогрессивной методики есть недостатки. Жесткое разделение ресурсов не связано с серьезными издержками, а вот динамическое разделение, в особенности с учетом пороговых величин, требует отслеживать потребление ресурсов на этапе исполнения. Кроме того, в некоторых случаях программы значительно лучше работают без многопоточности, чем с ней. Предположим, к примеру, что при наличии двух программных потоков для нормального функционирования каждому из них требуется 3/4 кэша. Если бы они выполнялись поочередно, каждый показал бы достаточную эффективность при небольшом количестве кэш-промахов (как известно, связанных с дополнительными издержками). В случае параллельного исполнения кэш-промахов у каждого было бы значительно больше, и конечный результат оказался бы хуже, чем без многопоточности.


⇐ Предыдущая страница| |Следующая страница ⇒