Файл: Мультипроцессоры (Основы мультитредовой архитектуры).pdf
Добавлен: 30.03.2023
Просмотров: 272
Скачиваний: 3
СОДЕРЖАНИЕ
ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ МУЛЬТИПРОЦЕССОРОВ
1.1 Сущность мультипроцессоров
1.2 Мультипроцессорные компьютеры
1.3 Основы мультитредовой архитектуры
ГЛАВА 2. ВИДЫ МУЛЬТИПРОЦЕССОРНЫХ СИСТЕМ
2.1 Мультипроцессорные системы общего назначения
В зависимости от того, в какой системе (большой, сложной, большой) происходит управления, различают системы автоматического управления и автоматизированные системы управления. Автоматическое управление осуществляется, как правило, в простых системах, в которых заранее известны описание объекта управления и алгоритм управления им.
По принципу управления системы автоматического управления могут быть разомкнутыми и замкнутыми.
Мультикомпьютеры — это совокупность объединенных сетью отдельных вычислительных модулей, каждый из которых управляется собственной операционной системой. Узлы мульти компьютера не имеют общих структур кроме сети, обладают высокой степенью автономности и могут состоять из отдельных компьютеров или представлять собой различные комбинации кластеров. Для распределенной операционной системы мульти компьютер выглядит как виртуальный однопроцессорный ресурс; взаимодействие процессов реализуется с помощью явно заданных операций связи между отдельными вычислителями. Обычно в мульти компьютере реализуется согласованный сетевой протокол, и нет единой очереди выполняющихся процессов.
Кластер — это набор компьютеров, рассматриваемый операционной системой, системным программным обеспечение, программными приложениями и пользователями как единая система. Кластеры получили широкое распространение благодаря высокому уровню готовности при относительно низких затратах. Высокая готовность объясняется отсутствием совместно используемой оперативной памяти и наличием в каждом узле копий ОС. Специальной ПО производит контроль работоспособности узлов. Если какой-либо узел кластера считается вышедшим из строя, то его ресурсы и программы переназначаются на другие узлы.
Два типичных способа организации кластеров – это архитектура с разделяемыми дисками и архитектура без разделяемых дисков.
Симметричные мультипроцессоры. SMP системы состоят из нескольких десятков процессоров, разделяющих общую основную (оперативную) память и объединенных общей коммуникационной системой.
Каждый процессор имеет доступ ко всей основной памяти, может прерывать другие процессоры и выполнять операции ввода/вывода. Пропускная способность коммуникационной системы достаточна для поддержания быстрого доступа к памяти. У отдельных процессоров имеется один или несколько уровней собственной кэш памяти. При этом возникает проблема сохранения когерентности данных, то есть согласованных изменений содержимого КЭШей и общей памяти.
Когда предотвращается использование копий данных в КЭШе какого-либо процессора, если они подверглись модификации в другом процессоре. Следовательно, если модифицируется одна из копий данных, остальные копии должны либо также модифицироваться, либо объявляться недостоверными.
Достаточный объем КЭШа и сравнительно небольшое количество процессоров в SMP системах позволяет удовлетворить обращение к основной памяти, поступающих от нескольких процессоров. Так, что время доступа к общей памяти примерно одинаково для всех процессоров. Это объясняет еще одно название таких архитектур UMA (Uniform Memory Access). Передача данных в таких системах между КЭШами разных процессоров выполняется значительно быстрее, чем обмен данными между узлами кластера или мультикомпьютера.
Поэтому SMP архитектуры хорошо масштабируются с целью увеличения производительности и обработки большого числа коротких транзакций, свойственных банковским приложениям.
Сохранение когерентности требует специальных аппаратных средств быстрой модификации копий данных. Если при этом следовать модели строгой согласованности, когда каждая операция возвращает последнее записанное значение, то снижение производительности системы неизбежно. Невысокая степень готовности SMP систем объясняется сильной связанностью процессоров и наличием одной операционной системы, разделяемой всеми процессорами.
1.3 Основы мультитредовой архитектуры
При всем различии подходов к созданию мультитредовых микропроцессоров, общим для них является введение множества устройств выборки команд, каждое из которых организует окно исполнения для одного треда. В рамках одного треда выполняется предсказание переходов, переименование регистров, динамическая подготовка команд к исполнению. Тем самым, общее число команд, находящихся в обработке, значительно превышает размер окна исполнения однотредового процессора, с одной стороны, и тактовая частота не лимитируется размером окна исполнения, с другой стороны.
Выявление тредов может выполняться компилятором при анализе исходного кода на языке высокого уровня или исполняемого кода программы. Однако компиляторы не всегда могут разрешить проблемы зависимостей при использовании регистров и ячеек памяти между тредами, что требуется уже в ходе исполнения тредов. Для этого в микропроцессор вводится специальная аппаратура условного исполнения тредов, предусматривающая возврат с отбрасыванием наработанных результатов при обнаружении нарушения зависимостей между тредами. Нарушением зависимости, например, может служить запись по вычисляемому адресу в одном треде в ту же ячейку памяти, из которой выполняется чтение, которое должно следовать за этой записью, в другом треде. В случае, если адреса записи и чтения не совпадают, нарушение отсутствует. При совпадении адресов фиксируется нарушение, которое должно вернуть исполнение треда к команде чтения правильного значения.
Интерфейс между аппаратурой мультитредового процессора, поддерживающей протекание каждого отдельного треда и аппаратурой, общей для исполнения всех тредов, может быть установлен как сразу после устройств выборки команд тредов, так и на уровне доступа к разделяемой памяти. В первом случае все треды используют один регистровый файл и один набор функциональных устройств. Тесная связь по ресурсам позволяет эффективно исполнять последовательные программы с сильной зависимостью между тредами. В этом случае имеет место именно реализация мультискалярного мультитредового процессора[1].
ГЛАВА 2. ВИДЫ МУЛЬТИПРОЦЕССОРНЫХ СИСТЕМ
2.1 Мультипроцессорные системы общего назначения
В мультипроцессорных системах (МПС) имеется несколько процессоров, каждый из которых может относительно независимо от остальных выполнять свою программу. В МПС существует общая для всех процессоров операционная система, которая оперативно распределяет вычислительную нагрузку между процессорами. Важным свойством МПС является отказоустойчивость, то есть способность к продолжению работы при отказах некоторых элементов, например процессоров или блоков памяти. При этом производительность, естественно, снижается, но не до нуля, как в обычных системах, в которых отсутствует избыточность[2].
Любая вычислительная система достигает своей наивысшей производительности благодаря использованию высокоскоростных процессорных элементов (ПЭ) и параллельному выполнению большого числа операций[3].
UMA состоит из n процессоров, k модулей памяти и коммуникационной сети, связывающей процессоры и память. Сеть может стать причиной значительной задержки при обращении процессора к памяти. Система, в которой такая задержка одинакова для всех операций доступа к памяти, называется мультипроцессорной системой с однородным доступом к общей памяти (Uniform Memory Access, UMA) или системой с общей памятью. Поскольку процессоры выполняют команды с огромной скоростью, слишком большие задержки на выборку из памяти команд и данных для них неприемлемы. Однако коммуникационные сети с малым временем задержки имеют очень сложную структуру и высокую стоимость.
Рис. 2. Мультипроцессорная система типа UMA
NUMA каждый процессор имеет доступ не только к собственной локальной памяти, но и к памяти других процессоров сети. Но поскольку при обращении к памяти других процессоров запросы проходят через сеть, они выполняются дольше, чем обращения к локальной памяти. Системы этого типа называются мультипроцессорными системами с неоднородным доступом к памяти (Non-Uniform Memory Access, NUMA).
Рис. 3. Мультипроцессорная система типа NUMA
Ни один из процессоров не может обратиться к удаленной памяти без взаимодействия с удаленным процессором, которому она принадлежит
Взаимодействие между этими двумя процессорами осуществляется в форме обмена сообщениями. Системы такого типа называются системами с распределенной памятью и высокоскоростным протоколом передачи сообщений.
CC-NUMA (cache coherent NUMA) - система с кэш-когерентным доступом к неоднородной памяти. В отличие от классической архитектуры NUMA, при использовании кэш-когерентного доступа к неоднородной памяти все процессоры объединены в один узел, причем первый уровень иерархии памяти образует кэш-память процессоров. Архитектура ccNUMA поддерживает когерентность кэш памяти внутри узла аппаратно. Аппаратная когерентность кэш-памяти означает, что не требуется никакого программного обеспечения для поддержки актуальности множества копий данных.
В системе сс-NUMA физически распределенная память объединяется, как в любой другой SMP-архитектуре, в единый массив. Не происходит никакого копирования страниц или данных между ячейками памяти. Нет никакой программно-реализованной передачи сообщений. Существует просто одна карта памяти, с частями, физически связанными медным кабелем, и очень умные (в большей степени, чем объединительная плата) аппаратные средства. Аппаратно-реализованная кэш-когерентность означает, что не требуется какого-либо программного обеспечения для сохранения множества копий обновленных данных или для передачи их между множеством экземпляров операционной системы и приложений. Со всем этим справляется аппаратный уровень точно так же, как в любом SMP-узле, с одной копией операционной системы и несколькими процессорами.
При использовании большого числа кэшей возникает та же проблема что и в архитектуре UMA: необходимо поддерживать актуальность кэшированных данных. Практически это означает, что изменение любой ячейки памяти, копия которой находится в некотором кэше, должно быть повторено для всех её копий. Учитывая, что число копий может быть велико, это становится сложной технической задачей[4].
2.2 Практическое применение многопроцессорных систем
С появлением доступных многопроцессорных систем возник у пользователей: как использовать мощность компьютерной техники. При использовании обыкновенного программного обеспечения количество процессоров системы в основном простаивает.
Практическим примером может служить, например преобразование музыкальных файлов flac → ogg. Можно, например использовать консольный запрос:
for i in *.flac ; do oggenc --quality=10 "$i" ; done
Но при большом количестве файлов простаивающие процессоры слегка вызывают раздражение. Для того, чтобы оценить мощность производительной техники нужно параллельное программное обеспечение.
Предлагается использовать хорошую программу на языке Lisp2D, которая запускает параллельно конвертацию файлов, заключённых в директориях. Количество одновременно запущенных задач будет всегда равно количеству процессоров.
(('freemans defclass) defvar
n signal lock nwaitsignal)
('freemans defmethod freemans ()
(nil setq
n (nil nprocs)
signal ('signal newobject)
lock ('lock newobject)
nwaitsignal (0 copy)))
('freemans defmethod enter ()
(lock progn
(nil when (n = 0)
(nwaitsignal += 1)
(signal wait lock))
(n -= 1)))
('freemans defmethod exit ()
(lock progn
(n += 1)
(nil when (nwaitsignal > 0)
(nwaitsignal -= 1)
(signal send))))
('string defmethod flactoogg (q freemans)
(nil let (s (d ('dir newobject this)))
(nil while ('s set (d read))
(nil let ((fullname (this + "/" s)))
(nil cond
((s = "."))
((s = ".."))
((fullname regp) ; is a file
(nil let ((ss (s size)))
(nil if (ss > 5)
(nil when (((s part (ss - 5)) lower) = ".flac")
(freemans enter)
(nil fork
(nil if (0 = ("oggenc" system ("--quality=" + q) fullname))
(fullname unlink)
(cerr writeln "crash oggenc for " fullname))
(freemans exit))))))
((fullname dirp) ; is dir
(fullname flactoogg q freemans)))))
(d close)))
("." flactoogg (arg first) ('freemans newobject))
Результатом использования параллельно запущенных процессов станет полноценная загрузка процессоров полезной работой. И огромная экономия личного времени.