Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Архитектура компьютера. Э. Таненбаум..doc
Скачиваний:
109
Добавлен:
20.06.2014
Размер:
7.54 Mб
Скачать

00 Процессор 2

13 15

Процессор 3

в

Рис. 8.34. Виртуальное адресное пространство, состоящее из 16 страниц, которые распределены между четырьмя узлами в мультикомпьютере: исходное положение (а); положение после обращения процессора 0 к странице 10 (б); положение после обращения процессора 0 к странице 10 (в); в данном случае эта страница предназначенатолько для чтения

Проблему ложного совместного использования можно разрешить по-разному. Например, можно отказаться от согласованности по последовательности в пользу свободной согласованности [6]. Потенциально записываемые страницы могут при­сутствовать в нескольких узлах одновременно, но перед записью процесс должен совершить операцию acquire, чтобы сообщить о своем намерении. В этот момент все копии, кроме последней, объявляются недействительными. Нельзя делать никаких копий до тех пор, пока не будет совершена операция rel ease и после этого страница снова станет общей.

Второй способ оптимизации — изначально преобразовывать каждую записы­ваемую страницу в режим «только для чтения». Когда в страницу запись произво­дится впервые, система создает копию страницы, называемую двойником. Затем страница преобразуется в формат «для чтения и записи», и последующие записи могут производиться на полной скорости. Если позже произойдет ошибка из-за отсутствия страницы и страницу придется туда доставлять, между текущей стра­ницей и двойником производится пословное сравнение. Пересылаются только те

слова, которые были изменены, что сокращает размер сообщений.

Если возникает ошибка из-за отсутствия страницы, нужно определить, где на­ходится отсутствующая страница. Возможны разные способы, в том числе катало­ги, которые используются в машинах NUMA и СОМА. Многие средства, которые используются в DSM, применимы к машинам NUMA и СОМА, поскольку DSM — это программная реализация машины NUMA или СОМА, в которой каждая стра­ница трактуется как строка кэш-памяти.

DSM — это обширная область для исследования. Большой интерес представ­ляют системы CASHMERE [76, 141], CRL [68], Shata [124] и Treadmarks [6, 87].

Linda

Системы DSM со страничной организацией памяти (например, IVY и Treadmarks) используют аппаратный блок управления памятью, чтобы закрывать доступ к от­сутствующим страницам. Хотя пересылка только отдельных слов вместо всей стра­ницы и влияет на производительность, страницы неудобны для совместного ис­пользования, поэтому применяются и другие подходы.

Один из таких подходов — система Linda, в которой процессы на нескольких машинах снабжены структурированной распределенной памятью совместного ис­пользования [21, 22]. Доступ к такой памяти осуществляется с помощью неболь­шого набора примитивных операций, которые можно добавить к существующим языкам (например, С или FORTRAN), в результате чего получатся параллельные языки, в данном случае C-Linda и FORTRAN-Linda.

В основе системы Linda лежит понятие абстрактного пространства кортежей, которое глобально по отношению ко всей системе и доступно всем процессам этой

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

с плавающей точкой, а также массивы (в том числе цепочки) и структуры (но не

другие кортежи). В листинге 8.4. приведено 3 примера кортежей.

Над кортежами можно совершать 4 операции. Первая из них, out, помещает кортеж в пространство кортежей. Например, операция

outC'abc", 2, 5);

помещает кортеж («abc», 2,5) в пространство кортежей. Поля операции out обычно содержат константы, переменные и выражения, например out("matnx-l". i. j, 3.14);

Это выражение помещает в пространство кортеж с четырьмя полями, причем второе и третье поля определяются по текущим значениям переменных i и j.

Вторая операция, in, извлекает кортеж из пространства. Обращение к корте­жам ирогаъодатся. wo содержанию, л we wo жлтан vura адресу. Х\оля операнда V/ шэтут содержать выражения или формальные параметры. Рассмотрим операцию mCabc". 2, ? i);

Эта операция отыскивает кортеж, состоящий из цепочки «abc», целого числа 2 и третьего поля, которое может содержать любое целое число (предполагается, что i — это целое число). Найденный кортеж удаляется из пространства кортежей, а переменной i приписывается значение третьего поля. Когда два процесса выпол­няют одну и ту же операцию in одновременно, успешно выполнит эту операцию

только один из них, если нет двух и более подходящих кортежей. Пространство

кортежей может содержать много копий одного кортежа.

Листинг 8.4. Три кортежа системы Linda

("abc".2.5)

Cmatrix-1". 1.6.3.14)

("family", "is sister". Carolyn, Elinor)

Алгоритм соответствия, который используется в операции in, довольно прост. Поля шаблона операции in сравниваются с соответствующими полями каждого кортежа в пространстве кортежей. Совпадение происходит, если удовлетворены следующие три условия:

  1. Шаблон и кортеж имеют одинаковое количество полей.

  2. Типы соответствующих полей совпадают.

  3. Каждая константа или переменная в шаблоне совпадает с полем кортежа.

Формальные параметры, указываемые знаком вопроса, за которым следует имя переменной или типа, не участвуют в сравнении (за исключением проверки типа), хотя тем параметрам, которые содержат имя переменной, присваиваются значе­ния после совпадения.

Если соответствующий кортеж отсутствует, процесс приостанавливается, пока другой процесс не вставит нужный кортеж, и в этот момент вызывающий процесс

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

Третья операция, read, сходна с in, только она не удаляет кортеж из простран­ства. Четвертая операция, eval, параллельно оценивает свои параметры, а полу­ченный в результате кортеж копируется в пространство кортежей. Этот механизм можно использовать для выполнения любых вычислений. Именно так создаются параллельные процессы в системе Linda.

Основной принцип программирования в системе Linda — это модель replicated worker. В основе этой модели лежит понятие пакета задач (task bag), которые нуж­но выполнить. Основной процесс начинается с выполнения цикла, содержащего операцию

out("task-bag",job):

При каждом прохождении цикла одна из задач выдается в пространство корте­жей. Каждый рабочий процесс начинает работу с получения кортежа с описанием задачи, используя операцию

in("Task-bag". ?job):

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

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

Огса

Несколько другой подход к совместно используемой памяти на прикладном уровне в мультикомпьютере — в качестве общей совместно используемой единицы использо­вать полные объекты, а не просто кортежи. Объекты состоят из внутреннего (скрыто­го) состояния и процедур для оперирования этим состоянием. Поскольку програм­мист не имеет прямого доступа к состоянию, появляется возможность совместного использования ресурсов машинами, которые не имеют общей физической памяти.

Одна из таких систем называется Огса [11, 13, 14]. Огса — это традиционный язык программирования (основанный на Modula 2), к которому добавлены две

особенности — объекты и возможность создавать новые процессы. Объект Огса —

это стандартный тип данных, аналогичный объекту в языке Java или пакету в язы­ке Ada. Объект заключает в себе внутренние структуры данных и написанные пользователем процедуры, которые называются операциями. Объекты пассивны, то есть они не содержат потоков, которым можно посылать сообщения. Процессы получают доступ к внутренним данным объекта путем вызова его процедур.

Каждая процедура в Огса состоит из списка пар (предохранитель (guard), блок операторов). Предохранитель — это логическое выражение, которое может при­нимать значение «истина» (true) или «ложь (false). Когда вызывается операция, все ее предохранители оцениваются в произвольном порядке. Если все они ложны (false), вызывающий процесс приостанавливается до тех пор, пока один из них не примет значение true. При нахождении предохранителя со значением true вы­полняется следующий за ним блок выражений. В листинге 8.5 показан объект stack с двумя операциями push и pop.

Листинг 8.5. Упрощенный объект stack в системе Огса с внутренними данными

и двумя операциями

Object implementation stack;

top:integer;

stack:array[integer O..N-l]of integer;

1хранилище для стека

operation pushOtem:integer); begin

stack[top]:=item;

top:=top+l:

end:

1функция. которая ничего не 1возвращает

1помещаем элемент в стек 1увеличения указателя стека

operation popO integer. begin

guard top>0 do

#функция, которая возвращает #целое число

Приостанавливает работу, если стек пуст

top =top-l. return stack[top]:

#уменьшает указатель стека # возвращает вершину стека

od.

end

begin

top =0,

Инициализация

end

Как только определен объект stack, нужно объявить переменные этого типа: s, t stack.

Такая запись создает два стековых объекта и устанавливает переменную top в каждом объекте на 0. Целочисленную переменную к можно поместить в стек s с помощью выражения

s$push(k)

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

Осга содержит оператор ветвления (fork statement) для создания нового про­цесса в процессоре, определяемом пользователем. Новый процесс запускает про­цедуру, названную в команде ветвления. Параметры, в том числе объект, могут передаваться новому процессу. Именно так объекты распределяются среди машин.

Например, выражение

for I in I n do fork foobar(s) on I; od; порождает новый процесс на каждой из машин с 1 по п, запуская программу/OoZar

в каждой из них. Поскольку эти п новых процессов (а также исходный процесс)

работают параллельно, они все могут помещать элементы в общий стек s и вытал­кивать элементы из общего стека s, как будто все они работают на мультипроцес­соре с памятью совместного использования.

Операции в объектах совместного использования атомарны и согласованы по последовательности. Если несколько процессов выполняют операции над одним общим объектом практически одновременно, система выбирает определенный по­рядок выполнения, и все процессы «видят» этот же порядок.

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

Второй вид синхронизации — условная синхронизация, при которой процесс блокируется и ждет выполнения определенного условия. В системе Огса условная синхронизация осуществляется при помощи предохранителей. В примере, приве­денном в листинге 8.5, процесс, который пытается вытолкнуть элемент из пустого стека, блокируется до появления в стеке элементов.

В системе Огса допускается копирование объектов, миграция и вызов опера­ций. Каждый объект может находиться в одном из двух состояний: он может быть единственным, а может быть продублирован. В первом случае объект существует только на одной машине, поэтому все запросы отправляются туда. Продублиро­ванный объект присутствует на всех машинах, которые содержат процесс, исполь­зующий этот объект. Это упрощает операцию чтения (поскольку ее можно произ­водить локально), но усложняет процесс обновления. При выполнении операции, которая изменяет продублированный объект, сначала нужно получить от централь­ного процесса порядковый номер. Затем в каждую машину, содержащую копию объекта, отправляется сообщение о необходимости выполнить эту операцию. По­скольку все такие обновления обладают порядковыми номерами, все машины про­сто выполняют операции в порядке номеров, что гарантирует согласованность по последовательности.

Globe

Большинство систем DSM, Linda и Огса работают в пределах одного здания или

предприятия. Однако можно построить систему с совместно используемой памя­тью на прикладном уровне, которая может распространяться на весь мир. В систе­ме Globe объект может находиться в адресном пространстве нескольких процес­сов одновременно, возможно, даже на разных континентах [72,154]. Чтобы получить доступ к данным общего объекта, пользовательские процессы должны пройти че­рез его процедуры, поэтому для разных объектов возможны разные способы реа­лизации. Например, можно иметь один экземпляр данных, который запрашивает­ся по мере необходимости (это удобно для данных, часто обновляемых одним

владельцем). Другой вариант — когда все данные находятся в каждой копии объек­та, а сигналы об обновлении посылаются каждой копии в соответствии с надеж­ным протоколом широковещания.

Цель системы Globe — работать на миллиард пользователей и содержать трил­лион объектов — делает эту систему амбициозной. Ключевыми моментами явля­ются размещение объектов, управление ими, а также расширение системы. Систе­ма Globe содержит общую сеть, в которой каждый объект может иметь собственную стратегию дублирования, стратегию защиты и т. д.

Среди других ттшрокомасштабных систем можно назвать Globus [40,41 ] и Legion [50,51], но они, в отличие от Globe, не создают иллюзию совместного использова­ния памяти.

Краткое содержание главы

Компьютеры параллельной обработки можно разделить на две основные катего­рии: SIMD и MIMD. Машины SIMD выполняют одну команду одновременно над несколькими наборами данных. Это массивно-параллельные процессоры и век­торные компьютеры. Машины MIMD выполняют разные программы на разных машинах. Машины MIMD можно подразделить на мультипроцессоры, которые

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

Для всех мультипроцессоров ключевым вопросом является модель согласо­ванности памяти. Из наиболее распространенных моделей можно назвать согла­сованность по последовательности, процессорную согласованность, слабую со­гласованность и свободную согласованность. Мультипроцессоры можно строить с использованием отслеживающей шины, например, в соответствии с протоколом MESI. Кроме того, возможны различные сети, а также машины на основе каталога NUMAHCOMA.

Мультипроцессоры можно разделить на системы МРР и COW, хотя граница между ними произвольна. К системам МРР относятся Cray ТЗЕ и Intel/Sandia Option Red. В них используются запатентованные высокоскоростные сети межсо­единений. Системы COW, напротив, строятся из таких стандартных деталей, как Ethernet, ATM и Myrinet.

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

Альтернативный подход — использование памяти совместного использования на прикладном уровне (например, система DSM со страничной организацией, про­странство кортежей в системе Linda, объекты в системах Огса и Globe). Система DSM моделирует совместно используемую память на уровне страниц, и в этом она сходна с машиной NUMA. Системы Linda, Orca и Globe создают иллюзию совмест­но используемой памяти с помощью кортежей, локальных объектов и глобальных объектов соответственно.

Вопросы и задания

  1. Утром пчелиная матка созывает рабочих пчел и сообщает им, что сегодня им нужно собрать нектар ноготков. Рабочие пчелы вылетают из улья и ле­тят в разных направлениях в поисках ноготков. Что это за система — SIMD или MIMD?

  1. Вычислите диаметр сети для каждой топологии, изображенной на рис. 8.4.

  1. Для каждой топологии, изображенной на рис. 8.4, определите степень отказо­устойчивости. Отказоустойчивость — максимальное число каналов связи,

после утраты которых сеть не будет разделена на две части.

4. Рассмотрим топологию двойной тор (см. рис. 8.4, е), расширенную до раз- мера kxk. Каков диаметр такой сети? Подсказка: четное и нечетное к нужно рассматривать отдельно.

5. Представим сеть в форме куба 8x8x8. Каждый канал связи имеет дуплекс- ную пропускную способность 1 Гбайт/с. Какова бисекционная пропускная

способность этой сети?

6. Рассмотрим сеть в форме прямоугольной решетки размером 4 коммутатора в ширину и 3 коммутатора в высоту. В ней пакеты, исходящие из левого верхнего угла и направляющиеся в правый нижний угол, могут следовать

по любому из нескольких возможных путей. Пронумеруйте верхний ряд

коммутаторов с 1 по 4, следующий ряд — с 5 по 8, а нижний — с 9 по 12. Выпишете все пути, по которым пакеты перемещаются только вправо или вниз, начиная с коммутатора 1 и заканчивая коммутатором 12.

  1. Закон Амдала ограничивает потенциальный коэффициент ускорения, до­стижимый в компьютере параллельного действия. Вычислите как функцию от f максимально возможный коэффициент ускорения, если число процес­соров стремится к бесконечности. Каково значение этого предела для f=0,l?

  2. На рисунке 8.10 показано, что расширение невозможно с шиной, но возможно с решеткой. Каждая шина или канал связи имеет пропускную способность Ь.

Вычислите среднюю пропускную способность на каждый процессор для

каждого из четырех случаев. Затем расширьте каждую систему до 64 про­цессоров и выполните те же вычисления. Чему равен предел, если число процессоров стремится к бесконечности?

9. Компьютерная компания выпускает системы, состоящие из п компьютеров с совместно используемой памятью, организованных в квадратную решет- ку. Однажды вице-президенту компании приходит в голову идея выпустить новый продукт: трехмерную решетку, в которой п компьютеров организова- ны в правильный куб (это возможно, например, для п=4096).

  1. Как это изменение повлияет на максимальное время ожидания?

  2. Как это изменение повлияет на общую пропускную способность?

10. Когда мы говорили о согласованности памяти, мы сказали, что модель со- гласованности — это вид контракта между программным обеспечением и

памятью. Зачем нужен такой контракт?

  1. Векторный процессор (например, Cray-1) содержит арифметические устрой­ства с конвейерами из четырех стадий. Прохождение каждой стадии зани­мает 1 не. Сколько времени понадобится для сложения двух векторов из 1024 элементов?

  2. Рассмотрим мультипроцессор с общей шиной. Что произойдет, если два

процессора попытаются получить доступ к глобальной памяти в один и тот

же момент?

13. Предположим, что по техническим причинам отслеживающий кэш может

отслеживать только адресные линии и не может отслеживать информаци­онные. Повлияет ли это изменение на протокол сквозной записи?

14. Рассмотрим простую модель мультипроцессорной системы с шиной без

кэш-памяти. Предположим, что одна из каждых четырех команд обращает­ся к памяти и что при каждом обращении к памяти шина занимается на все

время выполнения команды. Если шина занята, то запрашивающий про­цессор становится в очередь «первым вошел — первым вышел». Насколько быстрее будет работать система с 64 процессорами по сравнению с однопро­цессорной системой?

  1. Протокол MESI содержит 4 состояния. Каким из 4 состояний можно по­жертвовать и каковы будут последствия каждого из четырех вариантов? Если бы вам пришлось выбрать только три состояния, какие бы вы выбрали?

  2. Бывают ли в протоколе MESI такие ситуации, когда строка кэш-памяти при­сутствует в локальной кэш-памяти, но при этом все равно требуется тран­закция шины? Если да, то опишите такую ситуацию.

  3. Предположим, что к общей шине подсоединено п процессоров. Вероятность, что любой процессор пытается использовать шину в данном цикле, равна р. Какова вероятность, что:

  1. Шина свободна (0 запросов).

  2. Совершается ровно один запрос.

  3. Совершается более одного запроса.

  1. Процессоры Sun Enterprise 10000 работают с частотой 333 МГц, а отслежи­вающие шины — с частотой 83,3 МГц. Если имеется 64 процессора, ясно, что шины не справятся с такой нагрузкой. Тем не менее машина работает. Объяс­ните, почему.

  2. В этой книге мы вычислили, что производительности координатного ком­мутатора было достаточно для обработки 167 млн отслеживаний/с, когда к нему подсоединено 16 плат, причем мы даже принимаем во внимание тот факт, что из-за конфликтных ситуаций на практике пропускная способность составляет 60% от теоретической. Небольшая машина Enterprise 10000 может содержать всего 4 платы (16 процессоров). Будет ли такая машина работать

с полной скоростью?

  1. Предположим, что провод между коммутатором 2А и коммутатором ЗВ в сети Omega поврежден. Какие именно элементы будут отрезаны друг от друга?

  2. Области памяти, к которым часто происходят обращения, представляют большую проблему в многоступенчатых сетях. А являются ли они пробле­мой в системах с шинной организацией?

  3. Сеть Omega соединяет 4096 процессоров RISC, время цикла каждого из ко­торых составляет 60 не, с 4096 бесконечно быстрыми модулями памяти. Каж­дый переключательный элемент дает задержку 5 не. Сколько пустых цик­лов требуется для команды IOAD?

  4. Рассмотрим машину с сетью Omega (см. рис. 8.22). Предположим, что про­грамма и стек i хранятся в модуле памяти i. Какое незначительное измене­ние топологии может сильно повлиять на производительность? (IBM RP3 и BBN Butterfly используют эту измененную топологию.) Какой недостаток имеет новая топология по сравнению со старой?

  1. В мультипроцессоре NUMA обращение к локальной памяти занимает 20 не, а к памяти другого процессора — 120 не. Программа во время выполнения совершает N обращений к памяти, 1 % из которых — обращения к странице Р. Изначально эта страница находится в удаленной памяти, а на копирование ее из локальной памяти требуется С не. При каких обстоятельствах эту страни­цу следует копировать локально, если ее не используют другие процессоры?

  2. Система DASH содержит b байтов памяти, которые распределены между п кластерами. В каждом кластере содержится р процессоров. Размер строки

кэш-памяти составляет с байтов. Напишите формулу для общего количе­ства памяти, предоставленного каталогам (исключая два бита состояния на

каждый элемент каталога).

26. Рассмотрим мультипроцессор CC-NUMA (см. рис. 8.24), содержащий

512 узлов по 8 Мбайт каждый. Если длина строки кэш-памяти составляет 64 байта, каков процент непроизводительных затрат для каталогов? Как повлияет увеличение числа узлов на непроизводительные затраты (они уве­личатся, уменьшатся или останутся без изменений)?

  1. На какую операцию в SCI требуется больше всего времени?

  2. Мультипроцессор на базе SCI содержит 63 узла. Длина строки кэш-памяти составляет 32 байта, а общее адресное пространство составляет 232 байтов. Размер кэш-памяти в каждом узле — 1 Мбайт. Сколько байтов нужно иметь в каждом кэш-каталоге?

  3. Машина NUMA-Q 2000 содержит 63 узла. Предложите ввести 64 узла вме­сто 63. Почему компания Sequent в качестве максимума выбрала именно 63,

а не 64?

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

преимущество и какой недостаток имеет новый метод по сравнению с обыч­ной блокирующей операцией send?

31. Рассмотрим компьютер, который работает в сети с аппаратным широкове- щанием (например, Ethernet). Почему важно соотношение операций чте- ния (которые не изменяют внутреннее состояние переменных) и операций

записи (которые изменяют внутреннее состояние переменных)?

32. Многие вопросы, возникающие при разработке мультипроцессоров, возни- кают также при разработке совместно используемой памяти на прикладном уровне. Один из таких вопросов — выбор одной из двух политик: обновле- ние или объявление недействительным. Какая политика используется в си- стеме Огса?