Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Суперкомпьютеры и системы. Мультипроцессоры. Учебное пособие
.pdf
рез которые проходит сигнал от входа до выхода, т. е. числу каскадов.
Однако объем оборудования составного коммутатора меньше, чем
простого с тем же количеством входов и выходов.
Чаще всего каскадные коммутаторы строятся из простых прямоугольных коммутаторов 2 · 2 с двумя входами и выходами. Они имеют
два состояния: прямое соединение входов с соответствующими выходами и перекрестное соединение.
Коммутатор 2 · 2 состоит из собственно блока коммутации данных
и блока управления. Блок управления в зависимости от значений поступающих на входе старших бит адреса памяти определяет, какой тип
соединения входов с выходами следует осуществить в блоке коммутации – прямой или перекрестный. При этом если оба входа нуждаются в
соединении с одним и тем же выходом, то коммутатор разрешает конфликт и связывает с данным выходом только один вход, а запрос на
соединение со стороны второго блокируется или отвергается. Из таких
простых коммутаторов строятся каскадные, называемые «Баньян»,
«Омега», «Дельта» (и другие), различающиеся схемой связей между
каскадами. Пример коммутатора 8 · 8 со структурой связей «Баньян»
показан на рис. 3.7.
П000 М000
П001
К0000
К0100
К1000
М001
П010
П011
П100
П101
П110
П111
К0001
К0010
К0011
К0101
К0110
К0111
К1001
К1010
К1011
М010
М011
М100
М101
М110
М111
Рис. 3.7. UMA-система на основе коммутатора «Баньян»
Если, например, процессору П010 требуется прочитать элемент
данных из модуля памяти М101, то старшие биты адреса этого элемента равны 101. Адрес поступает на вход коммутатора К0010, по значению старшего бита его блок управления осуществляет перекрестную
31

коммутацию, и при отсутствии конфликтов этот адрес без старшего
бита оказывается на входе коммутатора К0110. Теперь старший бит
усеченного адреса равен нулю, поэтому блок управления соединяет
свой нижний вход с верхним выходом. Вновь усеченный на один бит
адрес со старшим битом, равным единице, оказывается на верхнем
входе коммутатора К1010, который соединяется его блоком управления с нижним выходом, в результате чего устанавливается прямое соединение процессора П010 с модулем памяти М101.
Вся совокупность коммутаторов 2 · 2 более сложна в реализации,
чем совокупность коммутационных узлов, представленных на рис. 3.6,
однако их нужно всего 12, а не 64, как в перекрестном коммутаторе
(см. рис. 3.5). С их использованием строятся квадратные каскадные
коммутаторы, имеющие 2
n
входов и выходов (4, 8, 16, …).
Существуют варианты построения прямоугольных каскадных коммутаторов (так называемые коммутаторы Клоза) для m ∙ n входов и
m ∙ n выходов. Коммутатор Клоза формируется из трех каскадов:
m простых коммутаторов n ∙ n во входном каскаде, m коммутаторов
n ∙ n в выходном и n промежуточных коммутаторов m ∙ m (рис. 3.8, по-
казаны только простые коммутаторы и их связи).
Рис. 3.8. Коммутатор Клоза
Соединения внутри коммутатора устроены следующим образом:
j-й выход i-го коммутатора входного каскада соединен с i-м вхо-
дом j-го промежуточного коммутатора;
j-й вход k-го коммутатора выходного каскада соединен с k-м вы-
ходом j-го промежуточного коммутатора.
32

Коммутаторы позволили преодолеть ограничения на количество
связываемых блоков в UMA-системах, обусловленные шинной структурой, но только до некоторого не очень большого предела.
Непрерывные технологические улучшения, позволившие размещать на одном кристалле уже не десятки, а сотни блоков (процессорных ядер, модулей памяти и т. д.), потребовали реализации уже чрезмерно сложных и дорогостоящих устройств коммутации. В то же время совсем в другой области параллельно развивались и совершенствовались сети коммутации пакетов, приведшие к созданию Интернета.
В итоге оказалось, что настоящее революционное решение, которое
позволяет объединять сотни блоков на одном чипе, – это хорошо известная сеть с коммутацией пакетов, встроенная внутрь чипа, которую
в данном применении уместно назвать Network on Chip (NoC). Заметим, что переход от шины к сети NoC может считаться вполне закономерным. Именно так ранее развивались телекоммуникационные сети:
радиоэфир (типичная «шина»), затем телефонные сети (коммутация
каналов с помощью матричных коммутаторов) и, наконец, Интернет
(коммутация пакетов). В принципе, также развивалась и компьютерная
периферия – современная шина PCI-Express на самом деле вовсе не
шина, а сеть c топологией типа «звезда». Таким же образом развиваются и процессоры: сначала прямые соединения между его блоками, затем шины и матричные коммутаторы и, наконец, сети.
В архитектуре NoC каждое ядро (или блок процессора) соединено с
маршрутизатором, через который происходит его общение с другими
блоками. Сами маршрутизаторы объединены в сеть, по которой пакеты
данных путешествуют от одного блока к другому, так же как пакеты в
обычной компьютерной сети. Это значительно упрощает топологию
микросхемы и снимает ограничения по масштабированию. В отличие от
шины множество блоков способно взаимодействовать одновременно, не
мешая друг другу. Компьютерное моделирование и опытные образцы
многоядерных процессоров показывают, что при большом количестве
ядер такая архитектура превосходит традиционную по многим показателям.
Естественно, напрямую перенести логику и все протоколы работы
Интернета, начиная с физического уровня, внутрь чипа было бы неразумно и неэффективно. Здесь доминируют совсем другие технологические ограничения и задачи.
1. Предъявляются чрезвычайно жесткие требования к задержкам и
к энергопотреблению. Коммутаторы пакетов внутри чипа должны ра-
33

ботать с наносекундными задержками и быть очень экономичными.
Расходы энергии на передачу данных между блоками могут составлять
значительную часть общего потребления современных чипов и поэтому должны тщательно минимизироваться.
2. Необходимы простота и минимализм. Коммутаторы на чипе
должны занимать мало места, а значит, не должны иметь сложной логики управления и большого размера буферов для промежуточного
хранения данных.
3. Должно реализовываться параллельное, а не последовательное
соединение с обслуживаемыми блоками. На физическом уровне внутри чипа выгоднее передавать биты не последовательно и медленно по
одному проводнику, а быстро по 32 или 64 параллельным линиям.
Исследованиями NoC занимаются ведущие компании и университеты мира. В 2007 году фирма Intel разработала экспериментальный
процессор c 80 ядрами производительностью один терафлопс при
энергопотреблении всего в 62 ватта. В 2010 году был представлен
48-ядерный «Облачный компьютер на кристалле» (Single chip cloud
computer). В апреле того же года была опубликована работа группы
ученых MIT, которые создали прототип 16-ядерного процессора, в котором были применены специфические для NoC-систем оптимизации
виртуальный обход (virtual bypassing) и сигналы с малой амплитудой
(low-swing signaling). Эти технологии позволили приблизиться к теоретическим пределам пропускной способности и задержек передачи данных и заметно снизить энергопотребление. Как они работают? Обычный маршрутизатор сохраняет полученный пакет в буфер, анализирует
его заголовок и решает, куда его отправить дальше. Virtual bypassing
позволяет передать пакет практически без задержек за счет того, что
заголовок посылается заранее, и коммутатор успевает сделать нужные
переключения цепей к тому моменту, как придет тело пакета. Таким
образом, пакет идет без остановок, минуя промежуточное хранение в
буфере. Low-swing signaling – это уменьшение разницы между напряжениями уровней логических значений 0 и 1 в проводнике, за счет чего
удалось дополнительно сократить энергопотребление. В сумме эти
усовершенствования поднимают пропускную способность и экономичность более чем в полтора раза.
Кроме улучшения таких характеристик, как энергопотребление и
скорость, структура чипа с NoC дает еще одно важное преимущество.
Она легко позволяет объединять не только однородные ядра, но и вообще любые блоки на одном чипе. Как и в компьютерных сетях, физи-
34

ческий и транспортный уровни работают одинаково для любых типов
данных и протоколов. Можно без особых проблем поставить на место
одного или нескольких из универсальных вычислительных ядер любой
другой IP-блок, например графическое ядро, специализированный сигнальный процессор или контроллер какого-либо устройства. И так же,
как и в больших сетях, можно реализовать поддержку качественного
обслуживания межблочного трафика (Quality of Service) на уровне чипа.
NoC-сети для объединения ядер процессоров пока еще имеют экспериментальный статус, однако для объединения разнородных блоков
в системах на кристалле NoC разрабатываются и применяются довольно давно. Тем не менее скоро сетевая архитектура начнет вытеснять
шины из «святая святых» микроэлектроники – многоядерных центральных процессоров, и тогда число ядер на кристалле снова начнет
стремительно расти.
Примерами вычислительных систем, где реализована модель UMA,
могут служить суперЭВМ (своего времени) Cray T90, Intel SHV, Sun
E10000, IBM R60 и др. К сожалению, как уже говорилось, архитектура
UMA не очень хорошо масштабируется. Наиболее распространенные
такие системы содержат 4–8 процессоров, значительно реже 32–64 процессора. Кроме того, подобные системы нельзя отнести к отказоустойчивым, так как отказ одного процессора, коммутатора или модуля памяти влечет отказ всей ВС.
Другим вариантом SMP-систем (см. рис. 3.1) являются параллельные векторные системы (PVP – Parallel Vector Processor), тоже относящиеся к классу МКМД-систем с однородным доступом к разделяемой
памяти [13, 14]. По своей сути PVP-системы – это SMP-системы, где
роль процессорных элементов исполняют векторно-конвейерные процессоры, предназначенные для эффективной однотипной обработки
векторов независимых данных. Примеры таких систем: NEC SX-4/SX-5,
линия векторно-конвейерных компьютеров CRAY (CRAY-1, CRAY J90,
CRAY SV1, CRAY X1), серия Fujitsu VPP.
PVP-системы обычно ориентированы на приложения из таких областей промышленности, как аэрокосмическая, автомобильная, электронная, химическая, энергетическая и т. п. Разработчики PVP-систем
предлагают пользователям компиляторы с эффективными средствами
автоматической векторизации и распараллеливания программных вычислений. Получаемый объектный код позволяет наилучшим образом
использовать потенциал множества векторных процессорных элементов. Кроме того, передача данных между памятью и процессором в
35

векторном формате выполняется значительно быстрее, чем в скалярном. Как следствие, затраты времени на взаимодействие между параллельными потоками данных существенно снижаются, что ощутимо
увеличивает общую производительность системы.
3.2. NUMA-СИСТЕМЫ
Архитектура NUMA – это подход к созданию более масштабируемых по сравнению с UMA вычислительных систем с общей памятью,
при котором для сохранения приемлемой стоимости топология связей
между элементами разбивается на несколько уровней. Каждый из уровней обеспечивает быстродействующие соединения внутри групп, содержащих небольшие количества узлов. На следующем, более высоком
уровне эти группы рассматриваются как единые узлы. Соответственно у
каждого процессора обычно есть один модуль памяти, который располагается к нему «ближе», чем остальные, поэтому доступ к этому модулю
памяти выполняется гораздо быстрее, чем к другим. Все модули памяти
объединены в одно адресное пространство. Таким образом, NUMAсистемы имеют три ключевые характеристики, которые в совокупности
отличают их от всех других мультипроцессоров:
существует единое адресное пространство, доступное для всех
процессоров;
доступ к удаленной памяти выполняется медленнее, чем доступ
к локальному модулю памяти;
доступ к удаленной памяти обычно производится командами
LOAD и STORE.
Подобная организация, один из возможных вариантов которой,
называемый «бабочка» (butterfly), изображен на рис. 3.9, предоставляет
соединения внутри и между уровнями структуры системы, а также
позволяет свободно выбирать собственную топологию связей на каждом уровне независимо от других. В показанном фрагменте коммутаторы связаны друг с другом по полному графу соединений, но не раскрыто, какая топология связей реализована внутри коммутатора. Это
может быть полный граф, перекрестный / каскадный коммутатор, звезда, кольцо, решетка, тор, гиперкуб… Практически все эти топологии
были опробованы в разных системах.
Независимо от реализации коммутатора каждый процессор
П0…П15 имеет наиболее быстрый доступ к собственной памяти М.
36

Скорость доступа процессоров, входящих в группу П0…П3, к модулям
памяти других процессоров этой группы ниже, поскольку передача
данных должна осуществляться через коммутатор. Доступ к любому
модулю памяти других групп процессоров потребует уже участия двух
коммутаторов и, вероятнее всего, будет выполняться с еще меньшей
скоростью. Разница в затратах времени на доступ к памяти другого
узла по сравнению с затратами на доступ к локальной памяти в разных
системах составляет от 200 до 700 %. Именно поэтому такая архитектура параллельных вычислительных систем и получила название
NUMA – Non Uniformed Memory Access.
П0 М П1 М П2 М П3 М П4 М П5 М П6 М П7 М
Коммутатор Коммутатор
Коммутатор Коммутатор
П8 М П9 М П10 М П11 М П12 М П13 М П14 М П15 М
Рис. 3.9. Фрагмент структуры «бабочка» NUMA-системы
Тем не менее фрактальная структура системы, обычно образующаяся при таком подходе, обеспечивает небольшое число этапов соединения процессоров с модулями памяти через сеть (или передачи данных по линиям связи между узлами сети) при сравнительно малом количестве соединений.
Ключевым понятием NUMA-архитектуры является узел – совокупность из нескольких процессоров, имеющих оперативную память,
коммутатора (или иного средства межузловой связи) и системы вводавывода. Узел характеризуется тем, что на нем работает единственная
копия операционной системы. Полное адресное пространство всей вычислительной системы распределено между узлами, поэтому ее производительность будет существенно зависеть от того, где располагаются
выполняемая программа каждого процессора и обрабатываемые ею
данные. Эта архитектура ориентирована на крупноблочное распараллеливание программ, адекватно отображаемое на физическую структу-
37

ру системы. Чем меньше обращений не к своему модулю памяти выполняет процессор, тем более высокое быстродействие обеспечивает
система. Для NUMA-систем необходимы специализированные компиляторы и средства управления заданиями, учитывающие эту специфику.
Если в составе процессоров нет кэш-памяти (так называемая архитектура nc-NUMA, где nc – сокращение от non cache), то реализуется
либо строгая, либо процессорная согласованность памяти. Включение
кэш-памяти в состав каждого процессора как обычно, с одной стороны,
создает предпосылки для увеличения производительности системы, но
с другой – существенно усложняет логику управления памятью. В некоторых NUMA-системах имеется так называемый сетевой кэш, располагающийся между узлом и сетевым устройством, связывающим данный
узел с остальными. Тогда актуальное значение некоторого элемента
данных, необходимое для обработки в программе, может находиться в
любом из следующих мест:
в регистре процессора;
в локальном кэше (между процессором и его памятью);
в модуле памяти процессора;
в другом процессоре узла (его кэше или модуле памяти);
в сетевом кэше (между узлом и сетью);
в удаленном узле.
Ясно, что для таких систем необходимо тем или иным образом решать проблему согласованности состояния памяти. В зависимости от
того, как эта проблема решается, различают ncc-NUMA (Non Cachecoherent NUMA), cc-NUMA (cache-coherent NUMA) и COMA (Cache
Only Memory Access) варианты архитектур.
3.2.1. NCC-NUMA СИСТЕМЫ
С точки зрения простоты аппаратной реализации наиболее предпочтительной является архитектура ncc-NUMA, в которой не предпринимается никаких мер вообще для обеспечения согласованности состояния памяти. Эта задача полностью возлагается на программное
обеспечение – операционные системы, компиляторы или даже прикладные программы, которые должны предупреждать возникновение
нескольких различных значений любого элемента данных. Неудачное
решение этой задачи может приводить к получению неверных результатов выполнения прикладной программы. Несмотря на этот недостаток, такая архитектура значительно упрощает масштабирование систе-
38

мы, т. е. увеличение числа процессоров. Примерами реализации концепции ncc-NUMA могут служить созданные в конце 90-х годов прошлого века суперЭВМ Cray T3D (супер для своего времени, начиная с
2002 года в рейтинге Top-500 таких систем нет) и система IBM SP3
(аналогично). Последующие исследования и разработки в области
обеспечения более строгих моделей консистентности памяти позволили эффективно и не очень дорого реализовать когерентность кэшей,
т. е. перейти к cc-NUMA архитектуре. Поэтому ncc-NUMA системы
дальше развиваться не стали.
3.2.2. CC-NUMA-СИСТЕМЫ
В противоположность этому подходу архитектура cc-NUMA обеспечивает неоднородный (только по затратам времени) доступ к общей
памяти с поддержкой когерентности кэшей. Логически память NUMAсистемы представляется единым сплошным адресным пространством,
обращение к любому элементу которого осуществляется по адресу одного и того же формата, но физически она распределена между узлами.
Любые изменения, внесенные каким-либо процессором в память, становятся доступны всем остальным процессорам благодаря механизму
поддержания когерентности кэшей. Архитектура cc-NUMA предполагает кэширование как горизонтальных (процессор – локальная память)
так и вертикальных (процессор – удаленная память) связей (рис. 3.9).
Кэширование горизонтальных связей позволяет реализовывать каждый
узел как UMA-компьютер, получая при этом все преимущества UMAархитектуры при использовании небольшого количества процессоров
(обычно 2 или 4) над общей памятью и увеличивая тем самым производительность узла до четырех раз по сравнению с одиночным процессором. В то же время возможность объединения в единое целое множества узлов, построенных по UMA-технологии (вертикальные связи),
позволяет пропорционально наращивать производительность, не увеличивая количество процессоров в каждом узле до тех значений, когда
начинают сказываться недостатки UMA.
Аппаратно реализованная кэш-когерентность означает, что не требуется какого-либо программного обеспечения для сохранения множества копий обновленных данных или для передачи их между множеством экземпляров ОС и приложений. Со всем этим справляется аппаратный уровень точно так же, как в любом SMP-узле с одной копией
ОС и несколькими процессорами.
39

С другой стороны, применение горизонтальных кэшей позволяет
уменьшить среднее время доступа к удаленной памяти, так как принцип локальности, который делает использование кэширования эффективным, сохраняется для всех данных, имеющихся в системе. Таким
образом, если данные из удаленного узла уже находятся в кэше, то не
требуется использовать для их доставки сравнительно медленное сетевое соединение. Наличие горизонтально организованных кэшей позволяет, кроме того, более эффективно проводить обновления данных,
принадлежащих другим узлам, чем это было бы в случае применения
основной памяти узла для хранения таких данных.
Аппаратно когерентность кэшей реализуется одним из трех способов, выбираемых в зависимости от масштаба системы.
1. Слежение (snooping). Реализуется аналогично тому, как это делается в UMA-системах (см. раздел 3.1). Если в одном из кэшей изменяется значение в какой-либо строке, то все остальные кэши, хранящие
копию этого элемента данных, переводят соответствующие свои строки в состояние «недействительно». Этот вариант подходит только для
систем с небольшим (до 8–16) количеством процессоров / узлов. При
большем их количестве технические проблемы становятся труднопреодолимыми и слишком дорогостоящими.
2. Перехват (snarfing). Когда из какого-либо одного кэша данные
переписываются в оперативную память, контроллеры остальных получают сигнал об этом изменении («перехватывают» информацию об
изменении данных) и при наличии копии этой строки изменяют соответствующие данные в своих кэшах. Ограничения такие же, как и для
метода слежения.
3. Каталог (directory). Этот метод дает значительно большую масштабируемость, поэтому опишем его более подробно.
Часто когерентность реализуется сочетанием методов слежения
и / или перехвата внутри узлов для горизонтальных связей с методом
каталога для вертикальных связей (snooping / snarfing & directory). Такое сочетание может считаться наиболее приемлемым решением для
создания действительно больших систем (десятки и сотни узлов).
Наиболее популярный подход к построению больших cc-NUMAмультипроцессоров основан на использовании справочников или каталогов. Основная идея этого метода состоит в создании базы данных
(каталога) с информацией о том, где именно находится каждый элемент данных и каково его состояние. При обращении к памяти в каталог направляется запрос о том, где находится копия (копии) требуемо-
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
