Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Суперкомпьютеры и системы. Мультипроцессоры. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
рез которые проходит сигнал от входа до выхода, т. е. числу каскадов. Однако объем оборудования составного коммутатора меньше, чем простого с тем же количеством входов и выходов.
Чаще всего каскадные коммутаторы строятся из простых прямо­угольных коммутаторов 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 Cache­coherent 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