ЭВМиС_Лек_15 (ПараллельныеВС)

advertisement
1
Организация ЭВМ и С Лекция №15. Параллельные ВС. Когерентность данных.
Ведение1
1. Еще в прошлом десятилетии массово параллельные вычислительные системы
создавались гак уникальные экземпляры в исследовательских центрах, а вся
компьютерная индустрия стремительно развивала однопроцессорные или системы из
нескольких процессоров. В настоящее время многопроцессорные системы — основа
продукции преуспевающих компьютерных фирм. Эта эволюция в первую очередь
обусловлена прогрессом микроэлектроники, превратившей в массово доступные
интеллектуальные элементы — микропроцессоры, микросхемы памяти и адаптеры
внешних устройств со стандартными интерфейсами.
Следует отметить, что в отличие от середины 80-х годов, когда фирмыпроизводители суперкомпьютеров, выполняй государственные заказы, проектировали
уникальные архитектуры, к 1990 году бюджетное финансирование резко сократилось и
этим фирмам пришлось отказаться от дорогостоящих многокомпонентных
специализированных векторно-конвейерных процессоров в пользу серийно выпускаемых
микропроцессоров: Pentium II фирмы Intel, Alpha фирмы DEC, Ulfa Spare фирмы Sun, PARISC фирмы Hewlett-Packard (HP), Power PC фирмы IBM, MIPS фирмы SGI.
Окончательно линия на создание высокопараллельных высокопроизводительных систем
возобладала на рынке суперкомпьютеров после неудачи в разработке компанией Cray
Computer (создана в 1989 году компанией Cray Research) векторно-конвейерного процессора Сгау-4 на основе арсенида галлия - материала с более высокими скоростными
характеристиками по сравнению с кремнием.
Однако на рынке присутствуют до сих пор суперкомпьютеры традиционной
векторно-конвейерной архитектуры Cray J90 фирмы» SGI/Cray Research, SX-4 и SX-5
японской фирмы NEC, S3800 фирмы Hitachi, a также компьютеры фирмы Fujitsu.
Суперкомпьютер SX-5, пиковая производительность векторного устройства центрального
процессора которого должна достигать 8 Гфлопс, превосходит примерно в 5 раз МП Alpha
- лидера по векторной обработке в мире RISC микропроцессоров. Производительность
скалярного устройства, близкого по структуре к R 10000 фирмы SGI, составляет 0,5
Гфлопс. Пропускная способность интерфейса "процессор-память" составляет 64 Гбайт/с.
Последняя характеристика, в совокупности с показателем векторной производительности,
объясняют сегодняшнее положение суперкомпьютеров векторно - конвейерной
архитектуры по сравнению с параллельными многопроцессорными суперкомпьютерами
на базе RISC микропроцессоров.
Программа Ускоренной стратегической компьютерной инициативы
[Accelerated Strategic Computing Initiative - ASCI), принятая в США [1, 2] в 1995 г. и
рассчитанная на 10 лет, подтверждает тенденцию к созданию
Корнеев В.В. Параллельные вычислительные системы. – М.: «Нолидж»,
1999.- 320 с., ил. (стр. 11-28)
1
2
суперкомпьютеров из имеющихся на рынке компонентов, массовый выпуск которых
освоен промышленностью (микропроцессоров, микросхем памяти, коммуникационных
сред, устройств ввода/вывода операционных систем, систем программирования и систем
управления базами данных). Это позволит концентрировать усилия на разработке новых
суперкомпьютерных архитектур, создавать системы из самих совершенных на день
творения компонентов, значительно сократить сроки и стоимость разработки
суперкомпьютера.
Таким образом, развитие суперкомпьютеров в рамках ASCI формирует профиль
промышленных стандартов, по которым развиваются машины других классов в
различных научно-технических областях и в широком спектре коммерческих применений.
Этот подход соответствует современным концепциям построения многоуровневых
открытых и расширяемых систем, стандартизованных интерфейсов, переносимого
программного обеспечения.
2. Развитие микроэлектронной базы достигло такого уровня, когда в больших
интегральных схемах (БИС) массового применения реализуются микропроцессоры с
быстродействием порядка 0,3-1 млрд. оп./с.
Доминирующим направлением в построении компьютеров стало объединение в
одной системе десятков и сотен микропроцессорных модулей.
Осознание того факта, что из больших интегральных схем, в силу их специфики,
можно делать только параллельные вычислительные системы привело к обостренному
вниманию к стандартизации интерфейсов на всех уровнях.
В области межпроцессорных коммуникаций уже существуют, например, стандарты:
- ANSI/IEEE Standard for Scalable Coherent Interface (SCI), ANSI IEEE Std 1596-1992;
- ANSI/VITA 5-1994 Raceway Interlink standard (стандарт на межлинковые потоки);
- IEЕЕ Standard for Scalable Interconnect Architecture IEEE P1355;
- CCITT Recommendation 1.610 -maintenance principles of an АTМ и соответствующие
этим стандартам подстандарты по конструктивам, разъемам, логическим интерфейсам.
Первый из упомянутых стандартов разработан самоорганизовавшейся группой, ученых,
образовавших ассоциацию SCIzzL, второй - разработан и поддерживается VITA (VMEbus and
Futurebus International Trade Association — международной ассоциацией по торговле изделиями с
шинами VМЕ и Futurebus), третий возник в Европе на основе транспьютерных линков Т-8хх и Т9000. Четвертый появился в результате развития сетей связи с интеграцией услуг, являющихся по
существу вычисли тельными системами.
Работы в области постулирования интерфейсов для параллельных систем ведутся во
многих компаниях. Пример - MPS 1.1 (Multi-Proces sor Specification 1.1) фирмы Интел.
В настоящее время стандартами "де-факто" интерфейсов прикладных параллельных
программ стали MPI (Message Passing Interface) и PVM(Parallel Virtual Machine) для систем с
распределенной памятью. Для систем с разделяемой памятью предложен проект стандарта
Open МР.
Эти работы обязательно приведут, как уже было с шинным структурами, к
созданию одного или нескольких общезначимых межпроцессорных интерфейсов с
гигабайтными скоростями обмена.
В настоящее время несколько фирм объявили о разработке ими интерфейсно коммутационных кристаллов с гигабайтными скоростями обмена. К их числу относятся
европейская Dolphin и американские Vitesse, Cypress и другие.
3. Традиционно параллельные вычислительные системы делятся на два больших
класса:
• SIMD (single instruction - multiple data) — "один поток команд -много потоков
данных" - команды вдаются одним управляющим процессором, а выполняются
одновременно на всех обрабатывающих процессорах над локальными данными этих
процессоров;
,
3
• MIMD (multiple instruction - nultiple data) - "много потоков команд - много потоков
данных" - совокупность компьютеров, работающих по своим программам и со своими
исходными данными
Развитие параллельных вычислений прошло этапы Конвейерно-векторных
супервычислений, параллельных вычислений на множестве процессоров, связанных
коммуникационной средой передачи сообщений и в настоящее время осваиваются
супервычисления на системах из микропроцессоров с кэш-памятями и разделяемой
(логически - общей) физически распределенной основной памятью.
Существующие параллельные вычислительные средства класса MIMD образуют
три подкласса: симметричные мультипроцессоры (SMP), кластеры и массово
параллельные системы (МPP). В основе этой классификации лежит структурнофункциональный подход.
Симметричные мультипроцессоры состоят из совокупности процессоров,
обладающих одинаковыми возможностями доступа к памяти и внешним устройствам и
функционирующих под управлением одной операционной системы (ОС). Частным
случаем SMP служат однопроцессорные компьютеры. Все процессоры SMP имеют
разделяемую общую память с единым адресным пространством.
Использование SMP обеспечивает следующие возможности:
• масштабирование приложений при низких начальных затратах, путем
применения без преобразования приложений на новых более производительных
аппаратных средствах;
• создание приложений в привычных программных средах;
• программирование на базе разделяемой памяти;
• одинаковое время доступа ко всей памяти;
• возможность пересылки сообщений с большой пропускной способностью;
• поддержку когерентности совокупности кэшей и блоков основной памяти,
неделимые операции синхронизации и блокировки.
Однако степень масштабируемости SMP систем ограничена в пределах
технической реализуемости одинакового для всех процессоров доступа в память со
скоростью, характерной для однопроцессорный компьютеров. Как правило, количество
процессоров в SMP не превышает 32.
Для построения систем с большим числом процессоров применяются кластерный
или МРР подходы. Оба эти направления используют SMP гак системообразующий
вычислительный модуль (ВМ).
Кластерная система образуется из модулей, объединенных системой связи или
разделяемыми устройствами внешней памяти, например дисковыми массивами. В
настоящее время для образования кластерных систем используются либо
специализированные фирменные средства (например, MEMORY CHANNEL фирмы DEC,
AWS фирмы NCR), либо универсальные локальные и глобальные сети такие, как Ethernet,
FDDI (Fiber Distributed DaU Interface), и другие сети, например, с протоколами TCP/IP
(Transmision Control Protoсol / Internet Protocol), либо дисковые массивы с
высокоскоростными широкими двойными (Wide/Fast) и квадро PCI SCSI контроллерами.
Размер кластера варьируется от нескольких модулей до нескольких десятков
модулей
Признаками, характерными для кластеров, являются: - компоновка из компонентов
высокой степени готовности (off-the-shelf) стандартных SMP конфигураций и сетевых средств;
• построение на основе стандартных программно-аппаратных парадигм; Open Software
Foundation Disitnbuted Computing Environment (OSF DCE) и Open Network Computing (ONC),
поддерживающих общие имена и возможности доступа;
• согласованность наборов прикладных программ, форматов данных;
4
• общая для всех ВМ кластера организация информационной безопасности, общий
алгоритм обнаружения неисправностей и реконфигурации для обеспечения функционирования
при наличии отказов;
• ограниченная масштабируемость по числу ВМ.
Массово параллельные системы, в отличие от кластеров, имеют более скоростные, как
правило специализированные, каналы связи между ВМ, а также широкие возможности по
масштабированию. Кроме того, в МРР фиксируется некоторый достаточно высокий уровень
интерфейса прикладных программ (API), поддерживаемый распределенной ОС. Однако
поддержка работоспособности и оптимизация загрузки процессоров в МРР менее развита по
сравнению с кластерами в силу разнообразности исполняемых программ и отсутствия
функциональных связей между программами.
Характерные требования к системе связи МРР:
• высокая пропускная способность
• маленькая задержка;
• возможность совмещения передач с вычислениями в модулях;
• базирование на стандартах;
• надежные протоколы с управлением потоком;
• поддержка различных топологий;
• масштабируемость;
• конфигурируемость.
4. Ниже будут рассмотрены:
• архитектуры параллельных систем;
• современные коммуникационные технологии для создания кластеров и МРР
систем;
• способы построения коммутаторов ВС;
• средства синхронизации и коммуникации систем совместно протекающих
взаимодействующих асинхронных процессов;
• стандарты представления параллельных программ для ВС с распределенной и
разделяемой (общей) памятью;
• примеры параллельных систем разных производителей;
• организация отказоустойчивых и высокопроизводительных параллельных
вычислений;
• представления о массово параллельных ВС 2000 года.
Глава 1.
Организация когерентности многоуровневой
иерархической памяти
1.1. Архитектура вычислительных систем
Многопроцессорную ВС можно рассматривать как совокупность процессоров,
подсоединенных к многоуровневой иерархической памяти. При таком представлении
коммуникационная среда, объединяющая процессоры и блоки памяти, составляет неотъемлемую
часть иерархической памяти. Структурно-технические параметры коммуникационной среды
определяют характеристики многоуровневой памяти.
В многопроцессорной ВС для каждого элемента данных должна быть обеспечена
когерентность (согласованность, одинаковость) его копий, обрабатываемых разными
процессорами и размещенных в разных блоках иерархической памяти. Механизмы реализации
когерентности могут быть как явными, так и неявными для прикладного программиста.
При таком рассмотрении архитектуры ВС можно классифицировать по способу
размещения данных в иерархической памяти и способу доступа к этим данным.
Явное размещение данных; явное указание доступа к данным. Программист явно задаёт
действия по поддержке когерентности памяти посредством передачи данных,
программируемой с использованием специальных команд "послать" (send) и "принять"
5
(receive). Каждый процессор имеет свое собственное адресное пространство (память ВС
распределена), а согласованность элементов данных выполняется путем установления
соответствия между областью памяти, предназначенной для передачи командой send, и
областью памяти, предназначенной для приема данных командой receive, в другом блоке
памяти. Архитектура ВС с распределенной памятью основана на учете временных
соотношений между обращениями к разным блокам памяти и требует от программиста
явного указания на необходимые пересылки данных. Распределение данных по блокам и
уровням иерархической памяти также реализуется программистом.
Неявное размещение данных; неявное указание доступа к данным. В ВС с
разделяемой памятью механизм реализации когерентности прозрачен для прикладного
программиста, и в программах отсутствуют какие-либо другие команды обращения к
памяти, кроме команд "чтение" (load) и "запись" (store). Используется единое физическое
или виртуальное адресное пространство Архитектура ВС с разделяемой памятью имеет
много привлекательных черт.
• однородность адресного пространства памяти, позволяющая при создании
приложений не учитывать временные соотношения между обращениями к разным блокам
иерархической памяти;
• создание приложений в привычных программных средах,
• легкое масштабирование приложений для исполнения на разном числе
процессоров и разных ресурсах памяти.
Неявное размещение данных как страниц памяти; явное указание доступа к
данным. В этой архитектуре используется разделяемое множество страниц памяти,
которые размещаются на внешних устройствах. При явном запросе страницы
автоматически обеспечивается когерентность путём пересылки уже запрошенных ранее
страниц не из внешней памяти, а из памяти модулей, имеющих эти страницы.
Явное размещение данных с указанием разделяемых модулями страниц неявное
указание доступа к данным посредством команд load, store.
Фирма Encore computer Corporation запатентовала технологию [13] MEMORY
CHANNEL эффективной организации кластерных систем на базе модели раздельной
памяти. Суть технологии заключается в следующем. В каждом компьютере кластера
предполагается организация памяти на основе механизма виртуальной адресации. Адрес
при этом состоит из двух частей: группы битов, служащих для определения номера
страницы, и собственно адреса внутри страницы. В каждом компьютере в ходе
инициализации выделяется предписанное, возможно разное, вплоть до полного
отсутствия, количество физических страниц памяти, разделяемых этим компьютером с
другими компьютерами кластера.
После установления во всех компьютерах отображения страниц памяти, доступ к
удаленным памятям выполняется посредством обычных команд чтения (load) и записи
(store) как к обычным страницам виртуальной памяти без обращений к операционной
системе или библиотекам времени исполнения.
Межкомпьютерные
передачи происходят при выполнении команд
чтения или записи, адресующих специфичную страницу адресного пространства
шины модуля, в которой расположены таблицы отображения разделяемых страниц.
Каждый компьютер кластера имеет встраиваемую в него интерфейсную платуадаптер "шина компьютера - входной и выходной каналы (линки) некоторой среды
передачи данных". В области адресов устройств ввода/вывода шины размещаются две
таблицы управления страницами памяти, соответственно одна для выдачи обращений в
удаленные разделяемые (общие) страницы памяти других компьютеров, а другая для
приёма обращений из других компьютеров в локальные разделяемые
страницы рассматриваемого компьютера.
6
Каждый элемент таблицы, используемый при выдаче обращений, содержит: 1)
данные, необходимые для доставки сообщения в другой компьютер кластера (например,
ID - идентификатор компьютера, в памяти которого находятся разделяемая страница);
2) данные, необходимые для точного указания места в странице, к которому
должен быть осуществлен доступ по чтению или записи;
3) служебные данные, указывающие, например, нa состоятельность
рассматриваемого элемента, особенности маршрутизации и т.д. На основе этих
данных адаптер формирует сообщения (пакеты), которые передаются через выходной
линк в сеть передачи данных.
Будучи доставленным по этой сети в компьютер-адресат, сообщение
воспринимается через входной линк адаптером этого компьютера. Сообщение содержит
либо команду чтения в совокупности с адресом блока данных, который необходимо
прочитать и передать в компьютер, выполняющий команду чтение, либо сообщение
содержит команду записи в совокупности с адресом, указывающим на место записи
данных, и сами записываемые данные. Возможна также передача в сообщениях сигналов
прерываний для удаленной шины и синхронизирующих примитивов, необходимых для
взаимного исключения одновременного доступа совместно протекающих процессов к
областям разделяемой памяти. Фактически, операции чтения и записи прозрачно
переносятся с шины одного компьютера на шину другого, в котором расположены
данные, адресуемые в операции.
Сеть связи может быть организована по-разному. Например, это может быть
традиционные сети Ethernet, FDDI и другие стандартные телекоммуникационные
технологии. Это может быть специфичная шинная структура типа MEMORY CHANNELl
фирмы DEC, либо прямоугольный коммутатор 8х8, как в MEMORY CHANNEL2 фирмы
DEC [З]. Отандарт SCI [4] предусматривает либо кольцевые каналы, либо коммутаторы,
либо произвольную их комбинацию.
1.2. Механизмы неявной реализации когерентности
Современные микропроцессоры имеют один или несколько уровней
внутрикристальной
кэш-памяти.
Поэтому
интерфейс
микропроцессоров
с
необходимостью включает механизм организации когерентности внутрикристальной кэшпамяти и внекристальной памяти. Внекристалная память может также быть
многоуровневой: состоять из кэш-памяти и
основной памяти.
Реализация механизма когерентности в ВС с разделяемой памятью
требует аппаратурно-временных затрат. Причем уменьшить временную
составляющую затрат можно за счет увеличения аппаратурной составляющей и наоборот.
Уменьшение временной составляющей требует создания специализированной аппаратуры
реализации когерентности. Уменьшение аппаратурной составляющей предусматривает
некоторый минимум аппаратных средств, на которых осуществляется программная
реализация механизма когерентности. 1.2.1. Однопроцессорный подход
Идеальная память должна обеспечивать процессор командами и данными, чтобы
не вызывать простоев процессора в ожидании их. Кроме того память должна иметь
большую емкость. В современных условиях это достигается введением многоуровневой
иерархии памятёй. Время доступа зависит от объёма и типа используемой памяти.
Поэтому, введя помимо большой основной памяти небольшую более быструю буферную
память, можно пересылать данные для обработки в буферную память, там их
обрабатывать, используя память с меньшим временем доступа по сравнению с основной
памятью, а после обработки - отправлять обратно в основную.
Создание иерархической многоуровневой памяти, пересылающей „
блоки
программ и данных между уровнями памяти за время, пока предшествующие блоки
7
обрабатываются процессором, позволяет существенно сократить простои процессора в
ожидании данных При этом эффект уменьшения времени доступа в память будет тем
больше, чем больше время обработки данных в буферном памяти по сравнению с
временем пересылки
между буферной и основной памятями Это достигается при
локальности обрабатываемых данных, когда процессор многократно использует одни и те
же данные для выработки некоторого результата. Например, такая ситуация имеет место
при решении систем уравнении и инженерных расчетах, когда короткие участки
программного кода с большим количеством вложенных циклов обрабатывают поочередно, переходя от точки к точке, небольшие порции данных, помногу раз используя
каждое данное порции.
В связи с тем, что локально обрабатываемые данные могут возникать в динамике
вычислений и не быть сконцентрированными в одной области при статическом
размещении в основной памяти, буферную память организуют как ассоциативную, в
которой данные содержатся в совокупности с их адресом в основной памяти. Такая
буферная память получила название кэш-памяти. Кэш-память позволяет гибко согласовывать структуры данных, требуете в динамике вычислений, со статическими
структурами данных основной памяти.
Типовая современная иерархия памятей для однопроцессорных ВС имеет
следующую структуру:
• регистры 64 - 256 слов со временем доступа 1 такт процессора;
• кэш 1 уровня — 8к слов с временем доступа 1—2 такта;
• кэш 2уровня — 25бк слов с временем доступа 3—5 тактов;
• основная память - до 4 Гигаслов с временем доступа 12-55 тактов. Кэш имеет
совокупность строк (cache-lines), каждая из которых состоит из фиксированного
количества адресуемых единиц памяти (байтов, слов) с последовательными адресами.
Типичный размер строки:
16, 32, 64, 128, 256 байтов.
Наиболее часто используются три способа организации кэш-памяти, отличающиеся
объемом аппаратуры, требуемой для их реализации [5].
Это, так называемые, кэш-память с прямым отображением (direct-mapped cacht),
частично ассоциативная кэш-память (set-associative cache) и ассоциативная кэш-память
(fully associative cache).
При отсутствии необходимой строки в кэш-памяти одна из его строк должна быть
заменена на требуемую. Используются разнообразные алгоритмы определения
заменяемой строки, например, циклический, замена наиболее редко используемой строки,
замена строки, к которой дольше всею не было обращений, и др.
Соответствие между данными в оперативной памяти и кэш-памяти обеспечивается
внесением изменений в те области оперативной памяти, для которых данные в кэш-памяти
подверглись модификации. Эти отображения изменений данных выполняемся
параллельно с основными вычислениями. Существует несколько способов его реализации
(и, соответственно, несколько режимов работы кэш-памяти).
Один способ предполагает внесение изменений в оперативную память сразу после
их возникновения в кэше. При этом процессор простаивает в ожидании завершения
записи в основную память. В основной памяти поддерживается правильная копия данных
кэша и при замене строк не требуется никаких дополнительных действий. Кэш-память, работающая в таком режиме, называется памятью со сквозной записью (vrite- through).
Другой способ предполагает отображение изменений в основной памяти только в
момент вытеснения строки данных из кэша. Если адрес памяти, в который необходимо
произвести запись, находится в кэш-памяти, то идет запись только в кэш-память. При
8
отсутствии адреса в кэш-памяти производится запись в основную память. Такой режим
работы кэша получил название обратная запись (write-back). Кэш-память с обратной
записью создает меньшую нагрузка на шину процессора и обеспечивает большую
производительность, однако контроллер для write-back кэша значительно сложнее.
Существуют также промежуточные варианты (buffed write hough), при которых
запросы на изменение в основной памяти буферизуются и не задерживают процессор на
время производства записи в память. Эта запись выполняется по мере возможности
доступа контроллера кэш-памяти к основной памяти.
Реализация механизма когерентности чаще всего осуществляется с
использованием отслеживания (snooping) запросов на шине связывающей
процессор, память и интерфейс ввода/вывода. Контроллер кэша отслеживает адреса
памяти, выдаваемые процессором, и если адрес соответствует данным, содержащимся в
одной из строк кэша, то отмечается "попадание в кэш", и данные из кэша направляются в
процессор. Если данных в кэше не оказывается, то фиксируется "промах" и инициируются
действия по доставке в кэш из памяти требуемой строки. В ряде процессоров,
выполняющих одновременно совокупность команд, допускается несколько промахов,
прежде чем будет запущен механизм замены строк.
Возникает проблема с когерентностью данных в кэш-памяти и областях памяти,
используемых при вводе-выводе внешними устройствами. При вводе данных необходимо
отслеживать на шине обновление данных в строках основной памяти, копии которых
находятся в кэш-памяти и вести одновременно запись данных в строку кэш-памяти и
строку основной памяти.
При выводе данных на внешнее устройство также необходимо отслеживать на
шине выдачи данных с соблюдением когерентности данных основной памяти и кэшпамяти.
1.2.2. Многопроцессорный подход
В
современных
микропроцессорах,
используемых
для
построения
мультипроцессорных систем, идентичность данных в кэшах ВМ (когерентность кэшей)
поддерживается с помощью межмодульных пересылок. Существует несколько способов
реализации когерентности, применяемых в зависимости от типа используемой
коммуникационной среды и сосредоточенности или физической распределённости памяти
между процессорными модулями.
1.2.2.1. Сосредоточенная память
Рассмотрим реализацию одного из алгоритмов поддержки когерентности кэшей,
известного как MESI (Modified, Exclusive, Shared, Invalid) [б]. Алгоритм MESI
представляет собой организацию когерентности кэш-памяти с обратной записью. Этот
алгоритм предотвращает лишние передачи данных между кэш-памятью и основной
памятью. Так, если данные в кэш-памяти не изменялись, то незачем их пересылать. Кроме
того возможны еще усовершенствования, которые применены в микропроцессоре Intel
80860XP, связанные с уменьшением количества сквозных записей [7].
Зададим некоторые начальные условия и введем определения. Итак, каждый ВМ
имеет собственную локальную кэш-память, имеется общая разделяемая основная память,
все ВМ подсоединены к основной памяти посредством шины. К шине подключены также
внешние устройства. Важно понимать, что все действия с использованием транзакций
шины, производимые ВМ и внешними устройствами, с копиями строк, как в каждой кэшпамяти, так и в основной памяти, доступны для отслеживания всем ВМ. Это является
следствием того, что в каждый момент на шине передает только один, а воспринимают
все, подключенные к шине абоненты. Поэтому, если для объединения ВМ используется не
шина, а другой тип коммутационной среды, то для работоспособности алгоритма MESI
необходимо обеспечение вышеуказанного порядка выполнения транзакций.
9
Каждая строка кэш-памяти ВМ может находиться в одном из следующих
состояний: М - строка модифицирована (доступна по чтению и записи только в этом ВМ,
потому что модифицирована командой записи по сравнению со строкой основной
памяти);
Е -строка монопольно копированная (доступна по чтению и записи в этом ВМ и в
основной памяти);
S - строка множественно копированная или разделяемая (доступна по чтению и
записи в этом ВМ, в основной памяти и в кэш-памятях других ВМ, в которых содержится
ее копия);
I - строка, невозможная к использованию (строка не доступна ни почтению, ни по
записи).
Состояние строки используется, во-первых, для определения процессором ВМ
возможности локального, без выхода на шину, доступа к данным в кеш-памяти, а, вовторых, - для управления механизмом когерентности.
Для управления режимом работы механизма поддержки когерентности
используется бит WT, состояние 1 которого задает режим сквозной (write-tirough) записи,
а состояние 0 - режим обратной (write-bak) записи в кэш-память.
При исполнении команд чтения и записи состояние строки кеш-памяти к которой
выполняется доступ, определяется следующей таблицей.
Исх. состояниеСостояние
строки
после чтения
Состояние после записи.
I
Если WT=1, тогда Е иначе
Сквозная
S;
запись в ocновную
Обновление строки путем
память;
ее, I
чтения из основной памяти
S
S
В
М
Е
М
Сквозная запись в основную память; Если WT=1 тогда E,
иначе S
М
М
Промах чтения в кеш-памяти заставляют вызвать строку из основной памяти и сопоставить
ей состояние Е ми S. Кэш-память заполняется только при промахах чтения. При промахе записи
транзакция записи помещается в буфер и посылается в основную память при предоставлении
ШИНЫ.
При несостоятельной строке в состоянии I команда чтения данного из этой строки
вызывает чтение строки из основной памяти, размещение ее в кэш-памяти s изменение
состояния этой строки в кэш-памяти на Е или S. Состояние Е будет, если установлен
режим сквозной записи, при котором запись производится и в строку кэш-памяти и в
строку основной памяти. Состояние S устанавливается при режиме обратной
ЗПИСИ, что позволяет модифицировать данные строки кэш-памяти без
немедленной модификации строки основной памяти, что, в свою очередь, увеличивает
производительность До тех пор, пока к данным строки не будет доступа других ВМ или
внешних устройств, не будет обратной записи, и ВМ не будет использовать шину.
При состоянии 1 строки команда записи в эту строку изменяет только содержимое
строки основной памяти (сквозная запись), но не изменяет содержимое кэш-памяти и
сохраняет состояние строки I.
10
В состоянии S строки чтение данного из этой строки не меняет ее состояние. Если
установлен режим сквозной записи, то после завершения записи состояние строки
меняется на Е, при режиме обратной записи выполняется сквозная запись, но состояние
строки остается прежним S.
Если состояние строки Е, то чтение сохраняет это состояние, а запись переводит
строку в состояние М
Наконец, если состояние строки N, то как команды чтения, так и команды записи не
меняют этого состояния.
Для поддержки когерентности строе кэш -памяти при операциях ввода/вывода и
обращениях в основную память других процессоров на шине генерируются специальные
циклы опроса состояния кэш-памятей. Эти циклы опрашивают кэш-памяти на предмет
хранения в них строки, которой принадлежит адрес, используемой в операции,
инициировавшей циклы опроса состояния. Возможен режим принудительного перевода
строки в состояние I, который задается сигналом INV. При этом состояние определяется
следующей таблицей.
Исх. состояние
INV=0
I
S
Е
М
INV=1
I
I
S
I
S
I
S; обратная запись строки
I; обратная запись строки
1.2.2.[Физически распределенная память
Прямолинейный
подход
к
поддержанию
когерентности
кэшей
в
мулътипроцессорной системе, основная память которой распределена по ВМ, заключается
в том, что при каждом промахе в кэш в любом процессоре инициируется запрос
требуемой строки из того блока памяти, в котором эта строка размещена. В дальнейшем
этот блок памяти будет по отношению к этой строке называться резидентным. Запрос
передается через коммутатор в модуль с резидентным для строки блоком памяти, из
которого затем необходимая строка через коммутатор пересылается в модуль, в котором
произошел промах. Таким образом, в частности, обеспечивается начальное заполнение
кэшем. При этом в каждом модуле для каждой резидентной строки ведется список
модулей, в кэшах которых эта строка размещается, либо организуется распределенный по
ВМ список этих строк. Строка, размещенная в кэше более чем одного модуля дальнейшем
будет называться разделяемой.
Собственно когерентность кэшей обеспечивается следующим. При обращении к
кэш-памяти, в ходе операции записи данных, после самой
записи, процессора
приостанавливается до тех пор пока не выполнится
последовательность действий:
измененная строка кэша пересылается в резидентную память модуля, затем, если строка
была разделяемой, она пересылается из резидентной памяти во все модули, указанные в
списке разделяющих эту строку. После получения подтверждений, что все копии
изменены, резидентный модуль пересылает в процессор, пpиocтановленный после записи,
разрешение продолжать вычисления.
Изложенный алгоритм обеспечения когерентности хотя и является логически
работоспособным, однако практически редко применяется из-за больших простоев
процессоров при операциях записи в кэш строки. На практике применяют более сложные
11
алгоритмы, обеспечивающие меньшие простои процессоров, например DASH [8],
представление о котором приведено ниже.
Каждый модуль памяти имеет для каждой строки, резидентной в модуле, список
моделей, в кэшах которых, размещены копии строк.
С каждой строгой в резидентном для нее модуле связаны три ее возможных
глобальных состояния:
1) "некэшироканная", если копия строки не находится в кэше какого-либо другого
модуля, крме, возможно, резидентного для этой строки;
2) "удаленно-разделенная", если копии строки размещены в кэшах других модулей;
3) "удаленно-измененная", если строка изменена операцией записи в каком-либо
модуле.
Кроме этого, каждая строка кэша находится в одном из трех локальных состояний:
1) "невозможная к использованию";
2) "разделяемая", если есть неизмененная копия, которая, возможно, размещается
также в других кэшах;
3) "измененная", если копия изменена операцией записи. Каждый процессор может
читать яз своего кэша, если состояние читаемой строки "разделяемая" или "смененная".
Если строка отсутствует в кэше или находится в состоянии "невозможная к
использованию", то посылается запрос "промах чтения", который направляется в модуль,
резидентный для требуемой строки.
Если глобальное состояние строка в резидентном модуле "некэшированная" или
"удаленно-разделенная", то копия строки посылается в запросивший модуль и в список
модулей, содержащих копии рассматриваемой строки, вносится модуль, запросивший
копию.
Если состояние строки "удаленно-измененная", то запрос "промах чтения"
перенаправляется в модуль, содержащий изменённую строку. Этот модуль пересылает
требуемую строку в запросивший модуль и в модуль, резидентный для этой строки, и
устанавливает в резидентном модуле для этой строки состояние "удаленнораспределенная.
Если процессор выполняет операцию записи и состояние строки, в которую
производится запись "измененная", то запись выполняется и вычисления продолжаются.
Если состояние строки "невозможная к использованию" или "разделяемая", то модуль
посылает в резидентный для строки модуль запрос на захват в исключительное
использование этой строки и приостанавливает выполнение записи до получения
подтверждений, что все остальные модули, разделяющие с ним рассматриваемую строку,
перевели ее копии в состояние " невозможная к использованию".
Если глобальное состояние строки в резидентном модуле "некэширванная", то
строка отсылается запросившему модулю, и эхуг модуль продолжает приостановленные
вычисления.
Если глобальное состояние строки "удаленно-разделенная", то резидентный
модуль рассылает по списку всем модулям, имеющим копию строки, запрос на переход
этих строк в состояние "невозможная к использованию". По получении этого запроса
каждый из модуле изменяет состояние своей копии строки на "невозможная к
использованию" и посылает подтверждение исполнения в модуль, инициировавший
операцию записи. При этом в приостановленном модуле строка после исполнения записи
переходит в состояние "удаленно-измененная".
Предпринимаются попытки повысить эффективность реализации алгоритма
когерентности, в частности за счет учета специфики параллельных программ, в которых
используются асинхронно одни и те же данные на каждом временном интервале
исключительно одним процессором с последующим переходом обработки к другому
12
процессору. Такого рода ситуации случаются, например, при определении условий
окончания итераций. В этой случае возможна более эффективная схема передачи строки
из кэша одного процессора в кэш другого процессора.
1 2.3. Особенности реализации алгоритма когерентности
В системах, использующих простые (однокаскадные) коммутаторы с временным
разделением (шину) или пространственным разделением (crossbar), интерфейс с этим
коммутатором каждого модуля "отслеживает" все передачи через коммутатор, поэтому
нет необходимости вести
списки модулей, разделяющих строки. В системах с составными распределенными
коммутаторами необходимо вести списки, что требует дополнительных ресурсов памяти.
Когерентность обеспечивается хранением информации о состоянии и место нахождении
каждой строки общей разделяемой памяти. Элемент списка в каждом процессоре
содержит эту служебную информацию для одной сроки, а также указатели "вперед" и
"назад" по списку других строк.
1.3. Механизм явной реализации когерентности
При явной реализации когерентности используются отдельные наборы команд
типа load, store для работы с локальной памятью ВМ и специальные команды (вызовы
процедур) типа send, receive для управления адаптерами каналов ввода/вывода. Задача
программиста — эффективно запрограммировать передачу данных, совмещая их по
возможности с вычислениями, и минимизирует объем передаваемых данных
В связи с тем, что внутри микропроцессоров есть несколько уровней кэш-памяти,
необходимо учитывать, что вновь прибывшая строка данных делает несостоятельной
копию этой строки в кэш-памяти. Поэтому необходимо предусмотреть организацию
когерентности прибывшей строки и уже кэшированных строк. Возможны варианты:
- иметь дубликаты тэгов строк кэш-памяти в контролере прямого доступа, что
позволит делать несостоятельной только действительно необходимую строку;
- не иметь дубликатов тэгов и делать по каждому приему строки несостоятельными
все строки кэш-памяти.
Использование явной реализации когерентности обусловлено недопустимо
большими затратами аппаратуры или времени на реализацию неявного механизма
когерентности в создаваемой ВС. Это обусловлено тем, что войти внутрь механизма
когерентности иерархической памяти сложнее, чем использовать уже предусмотренный
для работы внешних устройств механизм когерентности.
1.4. Реализация коммуникационной среды
1.4.1. На структурном уровне коммуникационная среда состоит из трёх
компонентов, как показано на рис. 1.4.1:
- адаптеров, осуществляющих интерфейс между ВМ и сетью передачи пакетов;
- коммутаторов сети передачи пакетов;
- кабелей, служащих для подсоединения входных и выходных каналов (линков)
адаптеров к портам коммутатора и соединения коммутаторов с друг с другом для
оборудования необходимого числа портов и заданной конфигурации сети.
1.4.2. Адаптеры состоят из двух частей: приемопередающей части ВМ и
приемопередающей части сети, между которыми, как правило, имеется согласующий
буфер, например входная и выходная FIFO очереди, показанные на рис. 1.4.2.
Функция приемопередающей части ВМ заключается в реализации
протокола шинной структуры, к которой подключается адаптер. Этот протокол
может быть частью протокола реализации когерентности кэш-памяти и основной памяти
или частью протокола работы с внешними устройствами ввода/вывода. В первом случае
имеет место неявная реализация когерентности, во втором — явная. В любом случае
транзакции чтения, записи и управления шины преобразуются в форматы пакетов.
13
коммуникационной сети, и состояние адаптера характеризуется как "незавершенная транзакция".
Сформированные пакета поступают в приемопередающую часть, сеть адаптера и
доставляются посредством кабелей и коммутаторов в адаптер ВМ, в котором должны
быть выполнены действия, предписанные протоколом шины при реализации транзакции.
Принимающий пакеты адаптер в своей приемопередающей части преобразует их в
транзакции, воспринимаемые приемопередающей частью ВМ. По завершении
необходимых действий в этом ВМ формируются пакеты для передачи результатов,
необходимых для завершения транзакции. При получении этих пакетов, после
прохождения через приемную часть адаптера и преобразования, выполняется завершение
начатой транзакции.
1.4.3. Для маршрутизации пакетов по сети необходимо принять соглашение об
идентификации ВМ системы. Фактически, так как речь идёт о механизме реализации и
когерентности памятей, то это - соглашение об отображении адресов и элементов
распределенной иерархической многоуровневой памяти коммуникационной сети, и
состояние адаптера характеризуется как "незавершенная транзакция".
Сформированные пакета поступают в приемопередающую часть, сеть адаптера и
доставляются посредством кабелей и коммутаторов в адаптер ВМ, в котором должны
быть выполнены действия, предписанные протоколом шины при реализации транзакции.
Принимающий пакеты адаптер в своей приемопередающей части преобразует их в
транзакции, воспринимаемые приемопередающей частью ВМ. По завершении
необходимых действий в этом ВМ формируются пакеты для передачи результатов,
необходимых для завершения транзакции. При получении этих пакетов, после
прохождения через приемную часть адаптера и преобразования, выполняется завершение
начатой транзакции.
1.4.3. Для маршрутизации пакетов по сети необходимо принять соглашение об
идентификации ВМ системы. Фактически, так как речь идёт о механизме реализации и
когерентности памятей, то это - соглашение об отображении адресов и элементов
распределенной иерархической многоуровневой памяти.
Download