Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Гиперпотоковая технология организации вычислений






 

Идея гиперпотоковой технологии (Hyper-Threading) организации вычислений тес­но связана с архитектурой NetBurst процессора Pentium 4 и являет­ся ее логическим продолжением. Архитектура Intel NetBurst позволяет получить макси­мальный выигрыш в производительно­сти при выполнении одиночного потока инструкций, то есть при выполнении од­ной задачи. Однако даже в случае спе­циальной оптимизации программы не все исполнительные модули (операционные устройства) процессо­ра оказываются задействованными на протяжении каждого тактового цикла. В среднем при выполнении кода, типично­го для набора команд IA-32, реально используется только 35% исполнитель­ных ресурсов процессора, а 65% испол­нительных ресурсов процессора проста­ивают, что означает неэффективное использование возможностей процессо­ра. Было бы вполне логично организовать работу процессора таким образом, чтобы в каждом тактовом цикле макси­мально использовать его вычислительные возможности. Именно эту идею и реализует техноло­гия Hyper-Threading, подключая неза­действованные ресурсы процессора к выполнению параллельной задачи.

Поясним все вышесказанное следующим при­мером /21/. Представим себе некоторый гипотетический процессор, в котором имеются че­тыре исполнительных блока: два бло­ка для работы с целыми числами (арифметико-логическое устройство, АЛУ), блок для работы с числами с пла­вающей точкой (FPU) и блок для запи­си и чтения данных из памяти (Store/Load, S/L). Пусть, кроме того, каждая операция осуществляется за один такт процессора. Далее предположим, что выполняется программа, состоящая из трех инструкций: первые две – ариф­метические действия с целыми числа­ми, а последняя – сохранение резуль­тата. В этом случае вся программа будет выполнена за два такта процессо­ра: в первом такте задействуются два блока АЛУ про

 
 

цессора (черный квад­рат на рис.5.3), во втором – блок запи­си и чтения данных из памяти S/L.

В современных приложениях в лю­бой момент времени, как правило, выполняется не одна, а несколько задач или несколько потоков (threads) одной задачи, называемых также нитями. Рассмотрим на примере на рис.5.4, как будет вести себя гипотетический процессор при выполнении двух разных потоков задач.

На рис.5.4 черные квадраты соот­ветствуют использованию исполнительных блоков процессора одного по­тока, а серые квадраты – другого. Если бы оба потока исполнялись изо­лированно, то для выполнения перво­го и второго потоков потребовалось бы по пять тактов процессора.

При одновременном исполнении обоих потоков процессор будет постоянно переключаться между двумя потоками, следо­вательно, за один такт процессора вы­полняются только инструкции какого-­либо одного из потоков. Для исполне­ния двух потоков потребуется в об­щей сложности десять процессорных тактов (рис.5.4-а).


Рассмотрим, как можно повысить скорость выполнения задачи в рассмотренном примере. Как видно из рис.5.4-а, на каждом такте процес­сора используются далеко не все испол­нительные блоки процессора, поэтому имеется возможность частично совмес­тить выполнение инструкций отдельных потоков на каждом такте процессора. В нашем примере выполнение двух ариф­метических операций с целыми числами первого потока можно совместить с за­грузкой данных из памяти второго пото­ка и выполнить все три операции за один такт процессора. Аналогично на втором такте процессора можно совместить опе­рацию сохранения результатов первого потока с двумя операциями второго по­тока и т.д. (рис.5.4-б). Собственно, в таком парал­лельном выполнении двух потоков и за­ключается основная идея гиперпотоковой технологии Hyper-Threading.

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

Рассмотрим еще один типичный при­мер работы нашего гипотетического процессора. Пусть имеется два потока команд, каждый из которых по отдель­ности выполняется за пять тактов про­цессора. Без использования технологии Hyper-Threading для выполнения обоих потоков потребовалось бы десять так­тов процессора. А теперь выясним, что произойдет при использовании техноло­гии Hyper-Threading (рис.5.5). На первом такте процессора каждый из потоков задействует различные блоки процессо­ра, поэтому выполнение инструкций лег­ко совместить. Аналогичное положение вещей наличествует и на втором такте, а вот на третьем такте инструкции обо­их потоков пытаются задействовать один и тот же исполнительный блок про­цессора, а именно блок S/L. В резуль­тате возникает конфликтная ситуация, и один из потоков должен ждать осво­бождения требуемого ресурса процес­сора. То же самое происходит и на пя­том такте. В итоге оба потока выполняются не за пять тактов (как в идеале), а за семь.

В конструктивном плане процессор с поддержкой технологии Hyper-Threading состоит из двух логических процессоров, каждый из которых имеет свои регистры и контроллер прерываний (Architecture State, AS), а значит, две параллельно исполняемые задачи работают со свои­ми собственными независимыми регис­трами и прерываниями, но при этом ис­пользуют одни и те же ресурсы процес­сора для выполнения своих задач. Послеактивации каждый из логических про­цессоров
может самостоятельно и неза­висимо от другого процессора выполнять свою задачу, обрабатывать прерывания либо блокироваться.

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

Использование двух логических процессоров позволяет уси­лить процесс параллелизма на уровне потока, реализованный в современных операционных системах и высокоэффек­тивных приложениях. Команды от обоих исполняемых параллельно потоков одно­временно посылаются ядру процессора для обработки. Используя технологию out-of-order (исполнение командных инст­рукций не в порядке их поступления), ядро процессора тоже способно парал­лельно обрабатывать оба потока за счет использования нескольких исполнитель­ных модулей.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.