4.1 Проблемы сортировки на вычислительных машинах

advertisement
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Владимирский государственный университет
Кафедра вычислительной техники
В.Б. Буланкин, Д.А.Козлов, К.В. Куликов, С.Г. Мосин
Математическая и алгоритмическая организация
высокопроизводительных вычислений
на суперЭВМ
Учебное пособие
Владимир 2009
УДК 004.3
ББК 32.972
Б52
Рецензенты:
Заведующий кафедрой ВПМ РГРТУ д.т.н., профессор
А.Н. Пылькин
Заведующий кафедрой КТРЭС ВлГУ д.т.н., профессор
В.Н. Крылов
Печатается по решению редакционного совета
Владимирского государственного университета
В.Б. Буланкин, Д.А. Козлов, К.В. Куликов, С.Г. Мосин Математическая и алгоритмическая организация высокопроизводительных вычислений на суперЭВМ: Учеб. пособие/Владим. гос.
ун-т, 2009. -130с.
Рассмотрены основные принципы повышения быстродействия и производительности вычислительных систем, способы их достижения, согласованные с математическим представлением задач, алгоритмами решения и архитектурой распределенных вычислительных сред. На примере отдельных задач
показаны методы параллельных вычислений и параллельные алгоритмы, формальные методы построения распределенных алгоритмов и структур вычислительных систем на их основе.
Пособие предназначено для студентов специальности 230101 – «Вычислительные машины, комплексы, системы и сети», а также может быть полезно
студентам, бакалаврам и магистрантам других специальностей и направлений,
изучающим архитектуру вычислительных систем.
Табл. 12. Ил. 8. Библиогр.: 24 назв.
УДК 004.3
ББК 32.972
2
© Владимирский государственный
университет, 2009.
ВВЕДЕНИЕ
Современные средства вычислительной техники и вычислительные технологии на их основе в своей базовой конфигурации представляют системы с распределенной структурой и распределенной организацией вычислений. Они являются массовым инструментальным средством пользователей. Поэтому знание архитектурных особенностей этих систем и способов оптимальной загрузки их компонентов значительно повысит качество решения уже известных задач и расширит область их эффективного использования.
Предлагаемое учебное пособие посвящено современным и
перспективным концепциям достижения быстродействия и производительности вычислительной системы (ВС), как функции ее
постоянной времени; архитектуры средств обработки информации; органической взаимосвязи математического, программного
и аппаратного обеспечения.
Главы 1 и 2 посвящены рассмотрению основополагающих
понятий: быстродействия, производительности; способам их
достижения; улучшения динамических характеристик на основе
многоэлементной, многостадийной и совмещенной обработки, а
также взаимосвязи структуры алгоритма и исполнителя на основе связанности процедур и организации вычислительного процесса.
В Главе 3 дано описание структурной организации высокопроизводительных ВС, их классификация по Флину, способы
реализации параллелизма в ВС.
Главы 4 – 5 посвящены методам параллельных вычислений
и параллельным алгоритмам в задачах сортировки. Показаны
формальные методы построения распределенных алгоритмов,
примеры расчета параметров ВС и решения задачи на основе
интеграла Стилтьеса.
3
1. ОСНОВНЫЕ ПОНЯТИЯ
ВЫСОКОПРОИЗВОДИТЕЛЬНЫХ ВЫЧИСЛЕНИЙ
1.1 Характеристики и требования высокоскоростной
обработки
Современный уровень развития средств вычислительной
техники обеспечивает выполнение от 2,4*109 до 4,8*1012 операций с плавающей точкой в секунду при тактовых частотах 2 -3
ГГц. Первый показатель характерен для большинства однопроцессорных ЭВМ с микропроцессорами фирм Intel, AMD, DEC;
второй – самой мощной на сегодняшний день суперЭВМ eServer
Blue Gene Solution фирмы IBM, и это не предел. Скорость выполнения операций в вычислительных системах постоянно растет и фиксируется не реже, чем каждые полгода независимыми
от производителей компаниями путем тестирования на различных проблемно-ориентированных тестах: Linpack, сотрудниками Аргоннской национальной лаборатории; ливерморские циклы, Ливерморской национальной лабораторией им. Лоуренса;
TPC, Советом по оценке производительности обработки транзакций; компании AIM Technology; SPEC, Корпорацией по
стандартизации высокопроизводительных вычислений и др. [1]
Публикуемые результаты тестирования достаточно четко
ранжируют все множество выпущенных средств вычислительной техники (ВТ) на подмножества, которые или рационально
распределены по сферам применения, либо определяют направления разработки вычислительных систем, согласно требованиям заказчиков.
С другой стороны, пользователи нашли свои подходы к высокоскоростной обработке, для лучшего удовлетворения системным требованиям решения. Эти подходы формулируются в
виде двух требований:
1) за более короткий интервал времени Тз решить отдельную задачу, где Тз – время решения задачи;
2) за один и тот же интервал времени Т решить как можно
больше задач, где Т - постоянная времени системы, ли-
4
бо интервал измерения, при полной загрузке КЭШ памяти системы.
Первое требование характеризует скорость обработки, потенциальное быстродействие системы, как в отдельно взятой
однопроцессорной вычислительной машине, так и в аппаратно
сложной мультипроцессорной или многомашинной вычислительной системе:

1 
N j
 
(1.1)




  1  Sup  j    q  i  ,
ij
Тз

 
j 
i 1
 


где  - быстродействие системы,  j - быстродействие j – ой ветви вычислительного процесса,  i - время выполнения i – ой
операции, qij - число i - ых операций в j – ой ветви, Nj - число
выполнимых операций в j – ой ветви.
Второе требование определяет суммарный объем работ
W в вычислительной системе, необходимый для решения множества задач (или фрагментов задачи, распределенных по вычислительным модулям системы) за время Т и характеризует ее
производительность Р. Понятие производительности расширяет понятие скорости обработки и по существу представляет системное быстродействие, или эффективную скорость обработки:
P  lim
T 
W .
T
(1.2)
Переменная Т является функцией размерности задачи. Поэтому
для сравнительной оценки вычислительных систем по производительности с разной архитектурой и вычислительной мощностью, в выражении (1.2) используется предел отношения, позволяющий произвести сравнение на основе задач вычислительной
системы с высшей производительностью.
Лучшее удовлетворение требованию (1.1) автоматически
обеспечивает улучшение требования (1.2). Обратное утверждение не справедливо. Например, если на одной вычислительной
машине решается одна задача, то, согласно выражению (1.2),
повысить производительность в n раз можно, взяв n таких машин. При этом быстродействие решения одной задачи, согласно
выражению (1.1), не возрастет.
5
В процессе развития вычислительной техники появилось
достаточно большое количество стандартных методик[2], которые используются для сравнительной оценки динамических характеристик вычислительных систем по быстродействию или
производительности. Они в некоторой степени позволяют разработчикам и пользователям осуществить выбор при поиске, как
подходящих технических вариантов ВС, так и наиболее рациональных способов представления и решения задач в них на основе количественных показателей. Однако, предлагаемые показатели порой бывают надуманными, не всегда сопоставимыми и
приемлемыми. Например, скорость обработки данных в некоторых тестах измеряется в Dhrystone в секунду - скоростью выполнения программы синтетического теста из 100 команд, написанных на языке Си, в других относительно времени решения на
компьютерах, которые условно приняты за эталонные. Такими
компьютерами в разное время считались VAX 11/780 компании
DEC, IBM RS/6000 фирмы IBM и т.д.
В действительности единственной и неоспоримой на протяжении всего времени существования вычислительной техники
единицей измерения динамических характеристик ВС является
время выполнения реальных программ (1.1), (1.2). Однако, и в
этом случае, время (шаг выдачи решения), как единица измерения продуктивности вычислительной системы, должно быть
задано в зависимости от системных требований решения для
каждой задачи.
Системные требования определяют характер вычисления:
 однократное или непрерывно повторяющееся решение;
 динамику самой системы: управление быстропротекающими процессами, полунатурное моделирование, расчет
некоторой статической модели и др.;
 погрешности решения, которые существенным образом
влияют на размерность и другие характеристики.
Продуктивность вычислительной системы непосредственно
связана масштабом времени, который является функцией времени выдачи решения (Твр) и постоянной времени системы (Тс).
Постоянная времени системы (Тс) – это интервал времени в
течение которого система, при наличии на входе сигнала рассо-
6
гласования (старт системы), достигнет установившегося значения (завершит работу) в пределах заданной погрешности (рисунок 1.1). Различают: реальный, ускоренный и замедленный
масштабы времени.
y

yy
yy  y
y max
y = f(t)
Т''вр
Т'вр
Твр
Тc
d
y
3
d
Рисунок 1.1 – Время выдачи решений в системе с реальным, ускоренным и замедленным масштабами времениy
1
Реальный масштаб времени:
0
Твр = Тс,
d
Тр  Твр,
(1.3)
y
время выдачи решений Твр равно постоянной времени системы
9
Тс. Новые входные данные системы поступают синхронно dс завершением процесса отработки прежних значений в пределах
y
заданной погрешности. Решение задач в реальном масштабе
4
времени, в зависимости от постоянной времени системы, требуd
ет в отдельных случаях принятия особых мер по синхронизации
y
работы. Причиной нарушения синхронизации может быть реге1
нерация оперативной памяти, специфика работы операционной
d
системы, коммуникационной среды и др. Проблема синхрониy
зации вычислительного процесса особенно остро стоит в вычислительных системах высокой производительности и продуктив8
ности на всех этапах подготовки и решения: математическом,
d
y
5
d
y
6
7
алгоритмическом, аппаратном, программном и организации вычислений.
Ускоренный масштаб времени:
Твр < Тс,
Тр  Твр,
(1.4)
время выдачи решения Твр вычислительной системой меньше
постоянной времени системы Тс. Новые входные данные поступают в систему раньше, чем она отработает прежние значения.
Ускоренный масштаб времени приводит к насыщению системы,
когда новые блоки заданий поступают в вычислительный узел
до завершения выполняемой программы, либо используется для
синхронизации процессов, когда время выдачи решения учитывает время задержки передачи сообщений коммуникационной
средой. Обеспечение ускоренного масштаба времени требует от
вычислительной системы наличия запаса по быстродействию.
Реальный и ускоренный масштабы времени имеют возможность повысить продуктивность ВС путем решения дополнительных задач за интервал времени  T = Твр – Тр.
Замедленный масштаб времени:
Твр > Тс,
Тр  Твр, где а) Тр  Тс; б) Тр  Твр.
(1.5)
время выдачи решений Твр больше постоянной времени системы Тс. Система успеет завершить отработку полученных входных значений и до поступления новых, будет находиться в состоянии отсутствия управляющих воздействий, что ведет к росту погрешностей в динамических системах. Величину динамической погрешности можно уменьшить или в некоторых случаях исключить совсем, перейдя к реальному или ускоренному
масштабам времени (1.5 а)), если Тр  Твр.
1.2 Способы повышения скорости обработки
Повышение скорости работы вычислительной системы достигается на всех уровнях организации вычислительного процесса: математического, алгоритмического, программного, языкового и аппаратного. Однако общие принципы достижения
максимальных показателей носят системный характер и могут
8
присутствовать на каждом из уровней.
Существенная роль в улучшении динамических характеристик ВС принадлежит основному средству обработки информации – процессору. Производительность одиночного процессора – его пропускная способность, постоянно возрастает за
счет архитектурных и технологических усовершенствований.
Архитектурные усовершенствования увеличивают объем работы, выполненный в командный цикл, технологические усовершенствования уменьшают время командного цикла.
Фундаментальная архитектура битово-параллельных однокристальных микропроцессоров с середины 1970-ых годов прошла существенные количественные и качественные изменения:
увеличение разрядности, совершенствование системы команд,
режимов работы, принципов адресации. Повышение степени
интеграции обеспечило возможность построения на одном кристалле мультипроцессоров, системных контроллеров памяти и
шин, многоядерных и многоузловых структур, работающих на
тактовой частоте кристалла. Нормировано время выполнения
команд в процессоре до одного – двух тактов генератора синхросигналов. Улучшение производительности процессоров
означает не только уменьшение времени командного цикла. В
них реализованы принципы загрузки компонентов процессора за
счет одновременной обработки потоков команд, целых и действительных чисел и VLIW - команд. Расширены возможности
реализации мультипроцессорных конфигураций, ориентированных на проектирование суперкомпьютеров.
Технологическое размещение компонентов процессора с
разрешающей способностью 90 – 60 нано метров уменьшило
время командного цикла до 0,25 нс.
Согласно закону Мура, производительность процессоров удваивается каждые полтора года и эта тенденция сохраняется на
протяжении нескольких десятков лет. Однако такой темп не
удовлетворяет желаемым требованиям
на фоне постоянного роста массового выпуска компьютеров с
улучшенными характеристиками.
Многоэлементная обработка. Данный способ повышения
скорости обработки еще называется узкопараллельным, или
просто параллельным.
9
Если суммарный объем работ W вычислительной системы
равномерно распределить между некоторым множеством М независимых исполнителей, и каждый исполнитель полностью
выполнит свою часть работ, то весь объем работ будет выполнен в М раз быстрее и, следовательно, производительность вычислительной системы возрастет в М раз.
Максимальная производительность i-го исполнителя Psi:
Psi 
wsi
,
Tp
(1.6)
где wsi – максимальный объем вычислений, который может выполнить i - ый исполнитель за время решения Тр.
P
W
,
TР
(1.7)
здесь Р – производительность ВС , необходимая для выполнения всего объема вычислений W за время решения Тр.
wsi 
W
,
M
(1.8)
где М – наименьшее число исполнителей с производительностью wsi , способных выполнить объем вычислений W за решения Тр.
Подставляя (1.8) в (1.6) и выражая (1.7), получим
w
1
W
 P,
Psi  si 

M
M  TР
Tp
откуда
(1.9)
P  Psi  M ,
т.е. производительность системы возрастет в М раз.
Современные компьютеры высокой производительности
показывают параллелизм на самых разных уровнях организации
обработки данных. Например, многопроцессорная обработка метод, используемый, чтобы достигнуть параллелизма на задании или уровне программы вычислительной системы, в то время
как предвыборка машинной команды - метод достижения параллелизма в микропроцессоре на уровне межмашинной команды. Последний вид параллелизма, как и многие другие подобные, невидимы для пользователя и являются следствием эволюционного совершенствования микропроцессоров. Поэтому в
10
терминологическом плане не корректно называть назвать каждый современный компьютер параллельным компьютером. В
дальнейшем при изложении материала будем придерживаться
следующего определения параллельной обработки.
Параллельная обработка - обработка информации, которая подчеркивает параллельную манипуляцию элементами команд программы или данных, принадлежащих одному или более
процессам, решая единственную проблему. Параллельный
компьютер - компьютер множеством процессоров, способный к
параллельной обработке.
Многостадийная, или конвейерная обработка.
Академик С.А. Лебедев в 1956 г. предложил повышать
производительность, используя принцип совмещения во времени
отдельных операций (стадий) рабочего цикла процессора, и реализовал этот принцип в ЭВМ М-20 в форме параллельного выполнения во времени операции в АЛУ и выборки из памяти следующей команды [3].
При конвейерной обработке весь объем работ разделен на
множество шагов, названных сегментами, или стадиями. Пусть
весь объем работ, как показано на рисунке 2, состоит из К сегментов.
1
2
i
К-1
К
Сегменты конвейера
Рисунок 1.2 – Структура конвейерной обработки
В представленной схеме каждый i – ый сегмент содержит свой
вид и объем работы, время выполнения которого Ti. Если эти
сегменты выполняются последовательно во времени, то, суммируя обозначенные на рисунке продолжительности Ti, получаем
время решения:
Тпосл = Т1 + Т2 + Т3 + … + ТК
(1.10)
и общая производительность выполнения всего объема работы
будет равна:
11
P посл 
1
K
T
i 1
(1.11)
.
i
Скорость выполнения всего объема работ может быть увеличена, если для выполнения каждого сегмента выделить отдельный аппаратурный блок и соединить эти блоки в обрабатывающую линию (конвейер вычислений) так, чтобы результат
вычислений в данном блоке некоторого сегмента передавался
для реализации очередного сегмента на следующий блок и т. д.
(см. рисунок 1.2).
Если программа управления вычислительным процессом
синхронизирует работу системы так, что для выполнения любого сегмента выделено одно и то же время Tt, то разбиение всего
объема работ на сегменты и расчет Tt производится согласно
условиям:
Tt = max {Ti},
i = 1,…, K;
(1.12)
Обрабатывающие
блоки конвейера
Ti + Ti+1 > Tt,
i = 1,…, K,
(1.13)
причем в силу цикличности вычислительного процесса в последнем неравенстве TK+1 = T1. При невыполнении второго
условия для каких-либо смежных сегментов, их следует объединить в один сегмент либо наиболее продолжительный по времени сегмент разбить на несколько сегментов. В этом случае Tt
заново рассчитывается и вновь проверяется условие (1.13).
На рисунке 1.3 показана временная диаграмма выполнения
заданий на 3-уровневом синхронном конвейере. Одинаковыми
символами помечены разные сегменты каждого задания.
I
w1
II
w2
w3
w4
w1
w2
w3
w4
w1
w2
w3
III
0
1
2
3
4
w4
5
Рисунок 1.3 – Конвейер заданий
12
Tt
После того, как все позиции конвейера окажутся заполненными, параллельно во времени обрабатывается столько заданий,
сколько в конвейере обрабатывающих блоков.
Номинальная производительность такого конвейера при
его полной загрузке:
1
(1.14)
PК .Н .  .
Tt
На основании изложенного будем полагать: конвейерный
компьютер – компьютер с множеством процессоров, способных к многостадийной совмещенной обработке.
Псевдопараллельная, согласованная во времени обработка (concurrent). Это – такой вид обработки, когда некоторое
множество программ выполняется на одном и том же устройстве и время выдачи всех решений данного множества равняется постоянной времени системы Тс (1.3). Инерционность системы, ее разрешающая способность во времени, не в состоянии
разделить одно поступившее решение от другого и все они воспринимаются системой, как выполненные одновременно в один
и тот же момент времени, то есть параллельно.
Псевдопараллельная обработка, как способ повышения
производительности вычислительной системы, широко применяется практически на всех этапах подготовки и реализации вычислительных процессов.
В однопроцессорных вычислительных системах псевдопараллельная обработка используется при организации мультипрограммных, многопользовательских режимов работы и др.
В многопроцессорных вычислительных системах псевдопараллельная обработка является инструментом распараллеливания задач, не имеющих явного параллелизма, а также средством выравнивания вычислительной сложности в гранулах,
или сегментах параллельных процессов либо оптимизации времени синхронизации вычислительной системы (1.12), (1.13) и
др.
13
2. ВЗАИМОСВЯЗЬ СТРУКТУР АЛГОРИТМОВ И
ИСПОЛНИТЕЛЕЙ
Понятие связанности алгоритма. Алгоритмы различаются связанностью выполняемых операций. Рассмотрим для
наглядности пример вычисления суммы S восьми чисел, предложенный в [4]
S=a1+ a2+ a3+a4+ a5+a6+ a7+ a8.
(2.1)
Это вычисление можно выполнить по двум алгоритмам, соответствующим следующим математически эквивалентным формулам:
S=((((((a1 + a2) + a3) + a4) + a5) + a6) + a7) + a8,
S=((a1 + a2)+(a3 + a4))+((a5 + a6)+(a7 + a8)).
(2.2)
(2.3)
В обоих случаях требуется выполнить 7 сложений. Поэтому с
точки зрения времени вычисления сумм на последовательном
компьютере существенного различия между этими алгоритмами
нет. Различие заключается в количестве обращений к оперативной памяти, определяемых приоритетом выполнения операций
сложения, согласно представленных скобочных форм записи. В
выражении (2.2) их - 8, в (2.3) – 14.
В алгоритме (2.2) никакие операции нельзя выполнять
независимо. Каждое следующее вычисление можно выполнить
только, если будут выполнены последовательно друг за другом
все предыдущие. Вначале вычисляется (a1+ a2), затем + a3 и последним действием выполняется + a8 . Такие алгоритмы называются связанными, или сильносвязанными.
В алгоритме (2.3) на первом шаге можно одновременно
выполнить 4 независимых между собой сложений: b1= (a1 + a2),
b2= (a3 + a4), b3= (a5 + a6) и b4= (a7 + a8). На втором шаге можно
выполнить 2 независимых сложения: c1=(b1 + b2) и c2=(b3 + b4).
И, наконец, на третьем шаге за 1 сложение заканчивается вычисление всей суммы S = (c1 + c2). Алгоритмы, в которых отдельные вычисления не зависят от других вычислений, называются слабосвязанными.
14
Алгоритмы, в которых все вычисления можно выполнить
независимо друг от друга называются несвязанными.
Сильносвязанным алгоритмам соответствует многостадийная, или конвейерная структура исполнителя. В конвейерной
структуре каждой операции соответствует исполнитель своего
уровня, или стадии. Выполнение алгоритма заключается в последовательном выполнении каждой операции на своей стадии с
последующей передачей результата вычисления на следующую. После загрузки исполнителей соответствующих всем стадиям конвейерной обработки, получение каждого следующего
результата вычисления сильносвязанного алгоритма будет соответствовать времени работы одного исполнителя (цикл выполнения операции).
Для несвязанных алгоритмов наилучшее быстродействие
достигается, использованием многоэлементной обработки, или
параллельной структуры исполнителя. В параллельной структуре каждому процессору соответствует своя операция несвязанного алгоритма, выполняемая на одном шаге. Следовательно,
все операции алгоритма будут выполнены за один такт процессора параллельной вычислительной системы.
Степень связанности алгоритмов порождает множество
структур исполнителей, органически согласованных с алгоритмами вычислений.
Рассмотрим две задачи: вычисление некоторой функции y
= f(x), с помощью аппроксимирующего степенного полинома
y = an*xn + an-1*xn-1 + … + a1*x + a0
(2.4)
и вычисление произведения n*n-матриц C = AB.
Если представить полином (2.4) в виде схемы Горнера
y = (…(an*x + an-1) * x + … + a1) * x + a0,
то полученное математическое выражение представляет собой
не что иное, как сильносвязанный алгоритм вычисления полинома (18) путем n последовательных повторений выполнения
однотипных операций
a*i-1 = (ai*x + ai-1).
(2.5)
Структурная схема исполнителя, реализующего конвейер этих
операций представлена на рисунке 2.1.
15
x
an
an-1
n
a*n-1
n-1
an-2
a*2
a1
2
a*1
1
y
a0
Рисунок 2.1 – Конвейер сильносвязанного алгоритма
Следовательно, время получения решений функции (2.3) после
загрузки всех n исполнителей конвейера, как следует из (1.12),
будет равно Tt, где Tt – время выполнения операции (2.4).
Во второй задаче в терминах скалярных произведений каждый элемент матрицы С вычисляется как скалярное произведение:
a11 ... a1n  b11 ... b1n  a11  b11  a12  b21  ...  a1n  bn1 a11  b1n  a12  b2 n  ...  a1n  bnn  ,
... ... ...  ... ... ...   

...
...


 

an1 ... ann  bn1 ... bnn  an1  b11  an 2  b21  ...  ann  bn1 an1  b1n  an 2  b2 n  ...  ann  bnn 
(20)
n
cij   aik  bkj .
(2.6)
k 1
Для ее решения в однопроцессорной ЭВМ необходимо выполнить n2 однотипных процедур вычисления суммы произведений
(2.6). Учитывая, что вычисление каждого элемента матрицы cij
не зависит друг от друга, можно, используя многоэлементную
(параллельную) обработку, сократить время решения задачи в n2
раз, доведя его до времени вычисления процедуры (2.6).
На рисунке 2.2 показана структурная схема ядра параллельной системы вычисления скалярного произведения матриц,
согласно выражению (2.5).
16
b11
bn1
a11
a1n
b1n
c11
bnn

a11
a1n
c1n

b11
bn1
an1
ann
cn1
b1n
bnn
an1
ann
cnn
Рисунок 2.2 - Структурная схема вычисления
скалярного произведения матриц
3 СТРУКТУРНАЯ ОРГАНИЗАЦИЯ
ВЫСОКОПРОИЗВОДИТЕЛЬНЫХ
ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
Перед разработчиками вычислительной техники постоянно
стоит задача повышения производительности и вычислительной
мощности проектируемых вычислительных систем (ВС). Решение данной задачи выполняют либо за счет совершенствования
используемой элементной базы и интегральной технологии на
уровне аппаратного обеспечения, либо за счет оптимальной организации вычислительного процесса и совершенствования
структуры ВС. Использование передовых интегральных технологий при производстве процессоров обеспечивает повышение
их производительности, но данный подход обладает рядом
ограничений, основные из которых – физические и технологические ограничения на уровне реализации топологии кристалла
процессорного элемента. Альтернативный способ основан на
концепции параллельного использования нескольких процессорных элементов в вычислительном процессе. Данное решение
обеспечивает возможность построения высокопроизводительных ВС.
17
В данной главе рассмотрен способ классификации вычислительных систем; описаны подходы параллельной обработки данных на однопроцессорных ВС; представлены структурные решения проектирования многопроцессорных ВС с различной моделью памяти
3.1 КЛАССИФИКАЦИЯ ВС ПО ФЛИНУ
В настоящее время вычислительные системы принято классифицировать с использованием метода, предложенного
М. Флинном в начале 70-х годов двадцатого века [5]. Схема,
предложенная Флинном, основана на понятии потока информации на уровне процессора. Было выделено два типа потоков,
образуемых командами и данными. Поток команд определяют
как последовательность инструкций, обрабатываемых процессором. Поток данных – совокупность обрабатываемых данных,
которыми осуществляют обмен процессорный элемент и память. В соответствии с классификацией потоки команд и данных могут быть либо одиночными, либо множественными. Таким образом, вычислительные системы в зависимости от характера потока команд и потока данных можно разделить на четыре
основные группы:
а) с одиночным потоком команд и одиночным потоком
данных (ОКОД, SISD – Single-Instruction Single-Data);
б) с одиночным потоком команд и множественным потоком
данных (ОКМД, SIMD – Single-Instruction Multiple-Data);
в) с множественным потоком команд и одиночным потоком
данных (МКОД, MISD – Multiple-Instruction Single-Data);
г) с множественным потоком команд и множественным потоком данных (МКМД, MIMD – Multiple-Instruction MultipleData).
В группу SISD-систем входят компьютеры с классической архитектурой фон-Неймана (рис. 4.1). Здесь единственный
процессор обрабатывает один поток команд над единственным
потоком данных, хранящихся в памяти.
18
Поток
команд
Устройство
I/O
Процессор
управленя
Поток
данных
Память
Рисунок 3.1. ВС с одиночным потоком команд
и одиночным потоком данных
Когда в системе присутствует только одно устройство
управления, и несколько процессоров в каждый момент выполняют одинаковые инструкции над разными (своими) наборами
данных, то такую параллельную ВС классифицируют как SIMDсистему (рисунок 3.2).
Процессор
Поток
данных 1
1
1
Процессор
n
...
управленя
Поток
команд
...
Устройство
Память
Поток
данных n
Память
n
Рисунок 3.2. ВС с одиночным потоком команд
и множественным потоком данных
SIMD-системы нашли широкое применение для параллельной обработки больших наборов структурированных данных.
Структура MISD-систем организована по принципу, что
один поток данных проходит через линейный массив процессоров, каждый из которых выполняет над ним различные операции (свои команды). В настоящее время не существует практических реализаций таких систем. Однако представители нескольких научных школ склонны причислять к данной группе
19
вычислительные конвейеры и компьютеры на систолических
массивах.
В MIMD-системах каждый процессор имеет собственное
устройство управления и может выполнять разные команды над
разными наборами данных, которые расположены в соответствующих блоках памяти (рисунок 3.3). В общем случае принято различать два класса MIMD-систем в соответствии с правилами организации памяти – общая (рисунок 3.3, а) или распределенная (рисунок 3.3, б).
Поток
Устройство
команд 1 Процессор
управления
1
1
...
Поток
Устройство
команд n Процессор
управления
n
n
Поток
данных 1
Общая
память
Поток
данных n
Поток
Поток
Устройство
Локальная
команд 1 Процессор данных 1
управления
память
1
1
1
...
...
Поток
Поток
Устройство
данных
n Локальная
команд n Процессор
управления
память
n
n
n
Сеть взаимодействия
а)
б)
Рисунок 3.3. ВС с множественным потоком команд и
множественным потоком данных: с общей памятью (а),
распределенной памятью (б)
20
В системах с общей памятью реализованы механизмы межпроцессорной координации процессов доступа к глобальной
общей памяти для всех процессоров. Такие системы принято
реализовывать по принципу серверных модулей, которые взаимодействуют по шине друг с другом и контроллером кэшпамяти. Такое решение позволяет отказаться от использования
многопортовой памяти и сложного контролера управления такой памятью. Поскольку доступ к общей памяти сбалансирован,
то такие системы принято называть симметричными многопроцессорными (SMP – Symmetric Multiprocessor system). Каждый
процессор обладает равными возможностями для чтения/записи
памяти с одинаковой скоростью.
В системах с распределенной памятью каждый вычислительный узел представлен процессором и блоком локальной памяти. Каждый процессор имеет возможность непосредственно
взаимодействовать только с собственной локальной памятью.
При необходимости процессор может обратиться к локальной
памяти другого процессора. В этом случае необходимо отправить специальный запрос к соответствующему процессору, который обратиться к своей локальной памяти и перешлет необходимую информацию по шине запрашивающему процессору.
Таким образом, здесь отсутствует понятие глобальной памяти.
Взаимодействие в такой системе происходит с помощью специальных сообщений-запросов. В связи с этим системы с распределенной памятью еще называют системами с передачей сообщений (MPS – message passing system).
3.2 ПАРАЛЛЕЛИЗМ НА УРОВНЕ КОМАНД
Центральный процессор – базовый элемент построения вычислительной системы, реализующий основные операции по
обработке данных. В общем случае все действия, реализуемые
при обработке любой машинной команды, принято называть
циклом. Цикл обработки машинной команды включает следующие шаги:
 Извлечение команды из оперативной памяти (ИК);
21
 Декодирование команды, при котором определяют количество используемых операндов, их месторасположение и
адреса в регистровой и/или оперативной памяти, а также устанавливают, какая операция должна быть выполнена (ДК).
 Извлечение данных из оперативной памяти по сформированным на предыдущем шаге исполнительным адресам (ИД);
 Обработка данных, связанная с выполнением арифметико-логических преобразований над операндами (ОД);
 Запись результатов либо в регистровой памяти процессора, либо в оперативной памяти (ЗР);
 Обработка прерываний, реализующая механизм реакции
на возникновение особых случаев в процессе обработки машинной команды (ПР).
Цикл обработки машинной команды (ЦОМК) можно реализовать в виде последовательного выполнения действий в рамках
каждого шага. В этом случае невозможно начать обработку очередной машинной команды, пока не завершено выполнение
предыдущей команды. Повысить производительность работы
процессора с последовательным принципом обработки машинных команд возможно лишь за счет повышения тактовой частоты. Однако рост частоты, на которой работает процессор, обладает ограничением, вызванным задержками распространения
сигналов при прохождении через логические элементы схемы и
внутренние линии соединений. Поэтому неограниченно повышать частоту процессора невозможно.
Альтернативным способом повышения производительности процессорного элемента является использование подхода
параллельной обработки машинных команд. В рамках этого
направления реализованы и активно применяются на практике
принципы конвейерной и суперконвейерной обработки, суперскалярная и векторная организация вычислений.
3.2.1 Конвейерная обработка. Вычислительный конвейер
обладает структурой, представленной совокупностью независимых ресурсов (блоков), каждый из которых отвечает за выполнение одного определенного шага цикла обработки машинной
команды. Таким образом, в конвейере можно активизировать
одновременное выполнение сразу нескольких машинных ко-
22
манд, но на разных стадиях цикла обработки. В общем случае
конвейер в каждый момент времени способен обрабатывать
максимум n машинных команд, где n – количество независимых
блоков реализации стадий ЦОМК. Результаты работы предыдущего блока используют в качестве исходных данных для работы
последующего блока (рисунок 3.4). Общими правилами для организации конвейерной обработки являются:
а) разбиение ЦОМК на большое количество независимых
этапов. На практике данное число не превышает 20;
б) время выполнения операций на каждом этапе должно
быть постоянным. Данный параметр принято называть тактом
конвейера.
ИК
ДК
ИД
ОД
ЗР
ОП
Рисунок 3.4. Структура конвейерного процессора
На рисунке 3.5 представлены временные диаграммы работы конвейера при реализации шести машинных команд. В данном примере конвейер реализует пять стадий ЦОМК. На первом
такте происходит обработка фазы извлечения машинной команды 1 в блоке ИК. На втором такте результаты выполнения операций в блоке ИК поступают в блок 2, где происходит декодирование извлеченной машинной команды 1. В это же время
освободившийся блок ИК участвует в извлечении команды 2.
Начиная с такта 5, конвейер загружен полностью и обеспечивает одновременное выполнение пяти машинных команд. С
этого момента на выходе конвейера на каждом такте формируется результат выполнения очередной команды.
Однако при работе конвейера возможно возникновение
конфликтов (рисков), которые нарушают регулярность выполнения машинных команд или приводят к возникновению ошибок. Различаю риски трех типов:
23
Время (такты конвейера)
Команда 1
Команда 2
Команда 3
Команда 4
Команда 5
Команда 6
1
2
3
4
5
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
6
7
8
9
10
ЗР
Рисунок 4.5. Временная диаграмма работы
конвейерного процессора
а) структурный, который происходит при попытке нескольких блоков одновременно обратиться к одному и тому же
ресурсу вычислительной системы;
б) риск по данным, возникает, когда наблюдается взаимосвязь различных команд по данным. Здесь возможно некорректное использование данных за счет не синхронизированных операций чтения и записи в разных командах;
в) риск по управлению, как результат неоднозначности при
выборке следующей команды в случае команд условного перехода.
Минимизацию издержек, вызванных возникновением рисков, обеспечивают за счет рациональной организации алгоритмов решения, возможностей компиляторов, которые отслеживают потенциальные конфликты и искусственно устраняют их, а
также аппаратных или аппаратно-программных механизмов
предсказания хода развития вычислений на основе истории
предыдущих исходов и событий.
24
Оценивать производительность конвейерной обработки
принято следующими параметрами.
Ускорение – отношение времени обработки набора команд
без конвейера и при его использовании (S). Время обработки
потока из N команд на конвейере с K позициями и тактом конвейера  вычисляют по выражению (3.1)
Tконв  K  N  1 
(3.1)
Время вычисления потока из N команд на последовательном процессоре рассчитывают по выражению (4.2)
Tпосл  NK  .
(3.2)
Таким образом, ускорение вычисления на процессоре с
конвейерной организацией равно (4.3)
S
NK 
NK
.

K  N  1  K  N  1
(3.3)
Эффективность – доля ускорения, приходящаяся на одну
позицию конвейера (Е)
E
S
NK
N
.


K K K  N  1 K  N  1
(3.4)
Пропускная способность – эффективность (4.4), деленная
на длительность такта конвейера (Р)
P
E
N
.

 K  N  1 
(3.5)
Высокую производительность работы конвейера получают
при соблюдении регулярности поступления объектов обработки
и минимизации нарушения естественного порядка следования
машинных команд.
25
3.2.2 Суперконвейерная обработка. Существует несколько способов, чтобы повысить скорость работы конвейера. Вопервых, за счет декомпозиции каждой стадии цикла обработки
машинных команд на несколько подстадий с сокращением такта
конвейера и соответствующим повышением частоты. Вовторых, путем реализации в процессоре нескольких конвейеров,
работающих с перекрытием. Первый способ принято называть
суперконвейеризацией [6], второй – суперскалярной обработкой.
При организации процессора с суперконвейерной обработкой увеличивают количество выполняемых операций в рамках
ЦОМК и выделяют для реализации каждой такой операции отдельный блок. При этом добиваются существенного снижения
сложности выполняемых действий, что приводит к сокращению
времени на их реализацию, т.е. каждый блок может функционировать с большей тактовой частотой. Во многом это становится
возможным, поскольку на многих позициях конвейера выполнение операций занимает менее половины машинного такта. Как
следствие, можно удвоить частоту тактовых импульсов конвейера, что обеспечивает выполнение сразу двух действий за один
период машинного такта.
За счет декомпозиции на каждой стадии можно выполнять
операции для нескольких команд, что повышает степень параллелизма. На рисунке 3.6 представлена временная диаграмма работы процессора с суперконвейерной организацией, предусматривающей декомпозицию каждой стадии ЦОМК на две подстадии. Используя данный подход, появляется возможность дополнительно сократить продолжительность выполнения набора
машинных команд.
Однако на практике не всегда удается достичь существенного выигрыша производительности вычислений от перехода к
суперконвейерной обработке. Во многом это связано с повышением вероятности возникновения конфликтов, а также с существенным усложнением логики устройства управления суперконвейерного процессора. Кроме того, при ошибке предсказания условного перехода необходимо произвести очистку конвейера. При большом числе ступеней и подступеней наблюдается довольно длительный простой процессора, вызванный за-
26
держкой полного заполнения конвейера. Промах предсказания
ветвления приводит к серьезным штрафам в работе суперконвейерного процессора, которые снижают общий показатель эффективности его работы.
Время (такты конвейера)
Команда 1
Команда 2
Команда 3
Команда 4
Команда 5
Команда 6
Команда 1
Команда 2
Команда 3
Команда 4
Команда 5
Команда 6
1
2
3
4
5
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
ЗР
ИК
ДК
ИД
ОД
6
7
8
9
10
ЗР
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
Рисунок 4.6. Временная диаграмма работы
суперконвейерного процессора
Однако совершенствование механизмов предотвращения
рисков обеспечивает надежную работу суперконвейера с высокой производительностью.
27
3.2.3 Суперскалярная обработка Суперскалярный процессор включает в свой состав несколько самостоятельных блоков обработки данных, отвечающих за выполнение определенных классов операций. Термин «скалярный» используют, чтобы
особо отметить принципиальное отличие данных процессоров
от вычислителей, работающих с векторными данными [3]. Такая
организация позволяет процессору одновременно выполнять
несколько команд над скалярными данными. В общем случае
суперскалярная обработка происходит параллельно на разных
конвейерах процессора (рисунок 3.7). Здесь на стадии 1 ЦОМК
необходимо производить выборку нескольких команд, каждая
из которых поступает на обработку в свой конвейер и блок выполнения команд. Для обеспечения множественной выборки
команд и данных необходима специальная организация памяти.
Блок
декодирования
Блок
выборки
операндов
Блок
выполнения
команд
Блок
возврата
команд
Блок
декодирования
Блок
выборки
операндов
Блок
выполнения
команд
Блок
возврата
Стадия 1
Стадия 2
Стадия 3
Стадия 4
Стадия 5
Блок
выборки
Рисунок 3.7. Структура многоконвейерного
суперскалярного процессора
Снизить сложность управления суперскалярным процессором удается за счет использования одного конвейера, с большим
числом блоков обработки (рисунок 3.8). Обычно операции, реализуемые на стадиях 1 – 3, требуют существенно меньше времени, чем собственно выполнение машинной команды. Таким
образом, стадии 1 – 3 обеспечивают подготовку команды для
обработки и загрузку соответствующего операционного блока.
Если исходные данные очередной команды зависят от результата выполнения предыдущей команды, то такая команда не может поступить на обработку, пока не завершится обработка
предыдущей. В общем случае суперскалярный процессор может
28
менять порядок выполнения машинных команд, заданный в исходном коде программы, не нарушая логики ее работы.
Как правило, для каждой группы машинных команд в суперскалярном процессоре реализован независимый блок обработки, а иногда и несколько. Например, АЛУ обработки чисел в
формате с плавающей точкой, АЛУ обработки чисел в формате
с фиксированной точкой, блоки загрузки и сохранения данных и
т.д.
АЛУ
АЛУ
Блок
выборки
команд
Блок
декодирования
Блок
выборки
операндов
Блок
загрузки
Блок
возврата
Блок
сохранения
Блок с
плавающей
точкой
Стадия 1
Стадия 2
Стадия 3
Стадия 4
Стадия 5
Рисунок 3.8. Суперскалярный процессор с
единственным конвейером
Эффективность работы суперскалярных процессоров соизмерима с показателями суперконвейерных вычислителей при
естественном порядке следования машинных команд. При наличии условных переходов суперскалярный процессор обеспечивает меньшие задержки, вызванные штрафом за ошибку предсказания перехода. На рисунке 3.9 приведены сравнительные
диаграммы функционирования суперконвейерного и суперска-
29
лярного процессоров при выполнении одинаковых машинных
программ.
Время (такты конвейера)
1
Команда 1
Команда 2
Команда 3
Команда 4
Команда 5
Команда 6
2
4
3
5
6
7
8
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
ИК ДК ИД ОД ЗР
1 2 1 2 1 2 1 2 1 2
а)
Команда 1
ИК
ДК
ИД
ОД
ЗР
Команда 2
ИК
ДК
ИД
ОД
ЗР
Команда 3
ИК
ДК
ИД
ОД
ЗР
Команда 4
ИК
ДК
ИД
ОД
ЗР
Команда 5
ИК
ДК
ИД
ОД
ЗР
Команда 6
ИК
ДК
ИД
ОД
ЗР
б)
Рисунок 3.9. Временная диаграмма работы процессора:
суперконвейерного (а) и суперскалярного (б)
30
Производительность суперскалярных процессоров во многом зависит от возможности параллельного выполнения команд
в каждой конкретной программе. Данную возможность связывают с понятием параллелизм на уровне команд (instruction-level
parallelism). Распараллеливание операций в процессоре связано
с рядом ограничений, основными из которых являются
 зависимость по данным,
 процедурная зависимость,
 конфликт использования ресурсов,
 зависимость по выходу,
 обратная зависимость.
Если в соседних командах программы отсутствует зависимость по данным, то их можно извлечь и одновременно обработать в двух независимых операционных блоках. В противном
случае выполнение последующей команды должно быть отложено на столько тактов, пока не будут сформированы для нее
все исходные данные.
Процедурная зависимость связана с двумя ситуациями –
наличием команд условного перехода, когда до завершения
данной команды невозможно определить адрес следующей команды, и использованием команд переменной длины, когда извлечение следующей команды невозможно до полного или частичного декодирования предыдущей команды.
Конфликт использования ресурсов возникает, когда для
выполнения разных машинных команд необходим один и тот же
функциональный узел процессора – память, шина, регистр и т.д.
Зависимость по выходу предусматривает невозможность
совместного выполнения (группирования) не соседних машинных команд в силу влияния результатов их выполнения на получение некорректных результатов при выполнении других команд. Другими словами зависимость по выходу запрещает
нарушать порядок выполнения машинных команд, как он представлен в программе.
Обратная зависимость возникает в том случае, когда последующая команда изменяет данные, используемые при выполнении предыдущей команды. В этом случае последующая
команда не может быть завершена, пока не начнется выполне-
31
ние предыдущей команды и не будут извлечены соответствующие данные.
Последние два ограничения возникают при использовании
технологии свободного порядка запуска или свободного порядка завершения команд, которая реализует опережающий просмотр команд, используемых в программе. При такой организации команда после декодирования поступает в буфер, где ожидает освобождение необходимого функционального узла. Когда
необходимый ресурс становится свободным для выполнения
команды, команда извлекается из буфера и поступает на позицию выполнения конвейера. При этом из буфера может быть
извлечена любая первая команда, для выполнения которой необходим освободившийся узел и этому не мешает какой-либо
конфликт или зависимость.
Таким образом, к аппаратным и программным ресурсам суперскалярного процессора предъявляют следующие требования
[7]:
 реализация параллельного считывания нескольких команд и прогнозирование ветвления после команд условного перехода;
 реализация механизма, изменяющего порядок выполнения команд по сравнению с последовательностью их расположения в программе без изменения логики ее работы;
 построение логики выявления зависимостей по данным
и механизма обмена этими данными для корректного выполнения команд;
 реализация механизма параллельного выполнения нескольких машинных команд с возможностью нескольких одновременных обращений к памяти;
 реализация механизма, управляющего фиксацией результатов выполнения отдельных команд в порядке, который
соответствует исходному потоку команд, описанному в программе.
3.2.4 Векторный процессор. Многие задачи, решаемые с
помощью средств вычислительной техники и требующие высокой производительности, ориентированы на выполнение однотипных операций над структурированными типами данных,
32
например массивами или векторами. Элементы массива могут
быть целочисленными или вещественными, действительными
или комплексно-сопряженными числами. Эффективную обработку таких структур данных можно организовать на основе использования процессора с векторной организацией.
Векторный компьютер обеспечивает параллельное выполнение операций над n-элементами векторов-операндов с записью полученных результатов в соответствующий n-элементный
вектор. В общем случае векторный компьютер можно построить
с использованием векторного АЛУ (рисунок 3.10, а) или с использованием нескольких однотипных конвейерных АЛУ, работающих синхронно над разными наборами данных (рисунок
3.10, б).
Векторное АЛУ оперирует с n-элементами одновременно,
выполняя над каждой парой исходных данных одинаковые действия. Результатом его работы также является вектор. Векторный процессор можно использовать также для выполнения скалярных операций. Однако в этом случае удобнее реализовать
механизм преобразования скалярного операнда в вектор, каждый элемент которого равно скалярному операнду, и использовать его на уровне векторной операции.
В векторных процессорах с несколькими конвейерными
АЛУ сочетают векторную обработку с конвейеризацией. В этом
случае все действия над структурированными данными представляют набором простых операций, которые затем реализуют
отдельной стадией конвейера. На последней стадии происходит
формирование результата вычислений. Таким образом, при обработке векторных данных после заполнения конвейер обеспечивает формирование результата на каждом такте синхросигнала.
33
Входные регистры
Память
...
...
Векторное АЛУ
...
Выходной регистр
а)
Входные регистры
...
АЛУ
Память
АЛУ
...
АЛУ
...
Выходной регистр
б)
Рисунок 3.10. Векторный процессор: с векторным АЛУ (а),
с конвейерным АЛУ (б)
34
3.3 Параллелизм на уровне процессоров
Решения, рассмотренные в предыдущем разделе, ориентированы на оптимизацию работы отдельно взятого процессора с
целью повышения его производительности. Структурная оптимизация процессора в рамках конвейерной, суперскалярной или
векторной обработки позволяет увеличивать производительность системы в разы (до 10 раз). Однако скорость роста сложности решаемых задач, а, следовательно, и скорость роста потребности в более мощных вычислительных системах существенно выше этого показателя. Соответственно перед разработчиками современных ВС возникает задача поиска и использования принципиально новых подходов для построения высокопроизводительных вычислителей. Одно из решений в этом
направлении – использование при решении вычислительно
сложных задач нескольких взаимодействующих процессорных
элементов вместо одного процессора. Такой подход принято
называть параллелизмом на уровне процессоров. В соответствии
с классификацией Флинна такие ВС принадлежат либо к SIMD-,
либо MIMD-системам.
Для повышения производительности ВС в сотни, тысячи и
большее число раз необходимо использовать соответствующее
число процессоров или процессорных ядер и обеспечить механизм их совместной работы при решении общей задачи. При
построении таких ВС определяют тип и количество используемых процессоров, а также правила взаимодействия между ними
и элементами памяти. На практике в многопроцессорных системах используют разные способы организации памяти и принципы обращения к ней со стороны любого процессорного элемента.
Организацию взаимодействия между компонентами многопроцессорной ВС и управление процессами реализуют с помощью совокупности аппаратно-программных средств, которые
называют сетями межсоединений.
3.3.1 Сети межсоединений. Классификацию сетей межсоединений компонентов многопроцессорных ВС принято проводит по следующим признакам: режим работы (синхронный или
35
асинхронный), стратегия управления (централизованная или
децентрализованная), технология коммутации (канальная или
пакетная), характер топологии (статическая или динамическая).
В соответствии с режимом работы различают синхронные
и асинхронные сети межсоединений (СМС). В синхронном режиме используют единый глобальный тактовый сигнал для всех
компонентов системы. Асинхронный режим в свою очередь не
требует наличия глобальной синхронизации. Квитирующие сигналы запросов и подтверждений используют для координации
действий всех элементов асинхронной системы. В общем случае
синхронные системы в настоящее время функционируют медленнее по сравнению с асинхронными, однако в них невозможно возникновение гонок и критических рисков, что обеспечивает надежность их функционирования.
В зависимости от используемой стратегии управления различают централизованные и децентрализованные СМС. В системах с централизованным управлением единственный центральный узел управления применяют для управления работой
всех компонентов ВС. Работоспособность и надежность функционирования единого узла управления – слабое место централизованной СМС. При децентрализованном управлении функция управления распределена среди различных компонентов
системы, что повышает ее надежность.
В зависимости от используемой технологии коммутации
различают СМС с коммутацией пакетов и коммутацией каналов.
В сети с коммутацией каналов весь путь пересылки информации
между отправителем и получателем определяют до начала этого
процесса. Выбранный путь будет сохранен на период всего сеанса передачи. При этом только два узла (отправитель и получатель) могут использовать данный канал для обмена информацией. В сети с коммутацией пакетов информацию передают от отправителя к получателю в виде коротких сообщений – пакетов,
в которых присутствует адрес получателя и порция информации. Каждый пакет проходит через коммутаторы (от одного к
другому) пока не постигнет узла получателя.
Способ расположения и соединения процессорных элементов и модулей памяти в многопроцессорных ВС определяют с
помощью топологии. Например, в полносвязной топологии все
36
процессоры и элементы памяти соединены по принципу каждый
с каждым. В топологии кольцо каждый процессор соединен
лишь с двумя соседними процессорными элементами.
В общем случае различают статические и динамические
СМС [8]. В статических сетях непосредственные фиксированные связи устанавливают для соединения компонентов системы.
На рисунке 3.11 представлены наиболее популярные типы статической топологии: дерево, линейный массив, кольцо, дерево,
решетка и гиперкуб.
а)
б)
в)
г)
д)
е)
Рисунок 3.11. Статическая топология: звезда (а), линейный
массив (б), кольцо (в), дерево (г), решетка (д), гиперкуб (е)
В динамических сетях соединение устанавливается по
мере необходимости. На рисунке 3.12 представлены примеры
динамической топологии, использующие коммутаторы. В одноступенчатой топологии (рисунок 3.12, а) каждый вход, расположенный слева от коммутатора, соединен с некоторыми, но не
всеми выходами, расположенными справа. Коммутатор обеспечивает передачу сообщения с входа к определенному выходу. В
37
каскадной схеме, реализующей многоступенчатую коммутацию,
обеспечена связь любого входа с любым выходом (рисунок
3.12, б). При этом на каждой ступени коммутации возникает дополнительная задержка распространения сигнала.
000
000
000
000
001
001
001
001
010
010
010
010
011
011
011
011
100
100
100
100
101
101
101
101
110
110
110
110
111
111
111
111
а)
б)
000
001
010
011
100
101
110
111
000 001 010 011 100 101 110 111
в)
г)
Рисунок 3.12. Динамическая топология: одноступенчатая (а),
многоступенчатая (б), матричный коммутатор (в), шина (г)
38
Связь любого входа с любым выходом можно организовать
с использованием матричного коммутатора, который обеспечивает формирование пути от любого входного порта до любого
выходного порта, заданных своими номерами (рисунок 3.12, в).
Для реализации матричного коммутатора необходимо N2 компонентов, где N – число коммутируемых пар вход/выход, в то
время как для построения многоступенчатого коммутатора потребуется N/2log(N) компонентов. Несмотря на существенно
большие затраты аппаратных ресурсов матричный коммутатор
обладает высокой скоростью работы. За один такт он обеспечивает установление соединение между входным и выходным
портами.
Взаимодействие между элементами многопроцессорных
ВС можно организовать с использованием шиной топологии
(рисунок 3.12, г). Разрешение или запрещение доступа к шине
реализует механизм арбитража. В общем случае в системе могут
присутствовать одиночные или множественные шины обмена.
И статическая, и динамическая топологии имеют ограниченное число путей между любой парой источник / приемник
информации. Данное обстоятельство приводит к ограничениям
отказоустойчивости и перегрузки сети межсоединений. Например, если единственный путь между парой узлов вышел из
строя, то между этими узлами невозможно установить связь.
Или, если две пары узлов пытаются использовать один и тот же
путь, то одна из этих пар должна будет ожидать завершения сеанса связи другой пары. Такую ситуацию называют блокировкой.
При выборе топологии СМС важно организовать надежную
передачу информации между участниками вычислительного
процесса, минимизируя вероятность возникновения блокировок,
используя для этого соответствующее коммутационное оборудование. Аппаратная избыточность коммутаторов позволяет
снизить вероятность блокирования, однако при этом повышается задержка распространения сигнала. Другой способ решения
проблемы блокировок – использование интеллектуальной
маршрутизации, когда выбор маршрута происходит, исходя из
текущего состояния сети с учетом нагрузки на каналы связи.
Выбранная топология и способ ее реализации существенно вли-
39
яет на скорость и качество взаимодействия внутренних элементов ВС, а следовательно, и на производительность такой системы.
3.3.2 Системы с общей памятью. Системы с общей памятью образуют одну из основных категорий многопроцессорных
вычислительных систем. В таких системах все процессоры совместно используют общую (глобальную) память. Связь между
задачами, выполняемыми различными процессорами, происходит за счет обмена через память на уровне операций записи и
чтения. Координацию и синхронизацию межпроцессорного взаимодействия также выполняют через глобальную память.
Структура вычислительных систем с общей памятью включает
следующие элементы: множество независимых процессоров (Pi),
множество модулей памяти (Mj) и сеть межсоединений (рисунок
3.13).
M1
M2
...
Мj
...
Mn
Сеть межсоединений
P1
P2
...
Pi
...
Pm
Рисунок 3.13. Структура многопроцессорной ВС
с общей памятью
При проектировании систем ВС с общей памятью приходится сталкиваться с двумя основными проблемами: снижением
производительности за счет возникновения конфликтов и проблемой связности. Возникновение конфликтов происходит при
попытке нескольких процессоров одновременно получить доступ к общей памяти. Типовым решением, позволяющим исключить конкуренцию за ресурс, является использование про-
40
цессорами кэш-памяти. Однако в данном случае появляется
дублирование данных за счет множества копий в кэш-памяти,
что может привести к проблеме связности. Копии данных в кэшпамяти разных процессоров считают связными, если их содержимое полностью совпадает. Если хотя бы один из процессоров
изменил содержимое копии в своей кэш-памяти, то данные в
ней становятся противоречивыми и несовместимыми с копиями
в кэш-памяти других процессоров.
Для обеспечения надежной работы ВС с общей памятью
реализуют специальные механизмы, обеспечивающие устранение обозначенных проблем.
Рассмотрим простейший случай организации ВС с общей
памятью (рисунок 3.14). Данная система состоит из двух процессоров и одного общего модуля памяти.
Запросы поступают в
память по двум портам. Арбитр
доступа к памяти передает запрос контроллеру памяти. Если
M
память свободна и поступает
единственный запрос, то арбитр передает его контроллеру,
который его обрабатывает. При
этом модуль памяти переходит
P1
P2
в состояние «занято» (busy) до
тех пор, пока запрос не будет
полностью обработан. Если поступает новый запрос, пока паРисунок 3.14. Общая
мять занята обработкой предыпамять с двумя
дущего, то контроллер памяти
портами доступа
посылает процессору сигнал
ожидания. В качестве реакции
на данный сигнал процессор
или оставляет сигнал запроса на линии до момента освобождения памяти, либо снимает его и повторяет запрос доступа к памяти через некоторое время.
Если арбитр получает два запроса, то он выбирает только
один из них и посылает его контроллеру памяти. Процессору,
запрос которого был отклонен, приходит сигнал ожидания.
41
В зависимости от особенностей используемой сети межсоединений и механизма доступа к памяти различают следующие
категории ВС с общей памятью: системы с однородным доступом к памяти, системы с неоднородным доступом к памяти, системы с доступом только к кэш-памяти. Особенности организации таких систем описаны ниже.
В ВС с однородным доступом к памяти (UMA – Uniform
Memory Access) каждый процессор может обращаться к любой
области памяти. Отличительная черта UMA-систем – одинаковое время обращения к памяти у каждого процессора. Сеть межсоединений в UMA системах может быть построена с использованием одной и нескольких шин, а также на матричном коммутаторе. Поскольку доступ к памяти в такой системе сбалансирован среди процессоров, то ее так же принято называть симметричным мультипроцессором (SMP – symmetric multiprocessor).
Типовая структура SMP-системы, построенной по шинной архитектуре, представлена на рисунке 3.15.
M1
C1
M2
...
C2
Мj
Ci
...
P1
P2
...
Mn
Cm
...
Pi
Pm
Рисунок 3.15. ВС c однородным доступом к памяти
Узким местом SMP-систем является увеличение числа
конфликтов при попытке доступа к шине или памяти с ростом
количества используемых процессорных элементов. В этой связи при проектировании SMP-систем вводят ограничение на число применяемых процессорных элементов. На практике наибо-
42
лее распространены системы с однородным доступом, использующие от 16 до 64 процессоров.
Снижение конкуренции процессоров за доступ к шине
обеспечивают с помощью локальной кэш-памяти, откуда каждый процессор извлекает команды и данные. Конкуренцию и
нагрузку на шину можно дополнительно сократить, если для
каждого процессора выделить кэш-данных и кэш-команд, и необходимые команды и данные загружать в них из глобальной
памяти. Однако в этом случае высокая нагрузка ложится на системную магистраль, которая передает сигналы управления механизмом обеспечения информационной целостности данных в
многочисленных элемента кэш-памяти.
В ВС с неоднородным доступом к памяти (NUMA –
NonUniform Memory Access) к каждому процессору подключена
некоторая часть общей памяти, которая обладает единым адресным пространством. В этом случае каждый процессор может
обращаться к любой ячейке памяти для чтения или записи, используя ее реальный адрес (рисунке 3.16). Однако время доступа к различным модулям памяти может изменяться и зависит от
их расстояния до процессора. Отличительная черта NUMAсистем – переменное время обращения к памяти у каждого процессора. А основная цель – обеспечение возможности работы с
общей памятью большого объема множеству процессорных узлов.
При построении сети межсоединений, обеспечивающих
взаимодействие процессоров и модулей памяти в NUMAсистеме, наибольшее распространение получили два вида топологии – дерево и множественные иерархические шины.
В системе с доступом только к кэш-памяти (COMA –
Cache-Only Memory Access) также как и в NUMA-системе к каждому процессору подключена некоторая часть общей памяти,
которая представлена исключительно кэш-памятью. Общая
структура такой системы представлена на рисунке 3.17.
Концепция COMA-систем предполагает, что данные поступают в процессор по его запросу. Причем отсутствует иерархия памяти и адресное пространство образовано всеми модулями кэш-памяти. При этом существует специальная таблица –
43
каталог кэш-памяти, которая помогает организовать удаленный
доступ к кэш-памяти.
...
...
Сеть межсоединений
P1
P2
M1
M2
...
Pi
...
Мi
Pm
Mm
Рисунок 3.16. ВС c неоднородным доступом к памяти
Основная проблема в данной архитектуре – сложность механизма обеспечения целостности данных при операциях отображения блоков оперативной памяти в строки кэш-памяти и
определении местоположения соответствующих строк в множестве кэш разных процессоров.
Сеть межсоединений
D
D
C1
C2
Ci
Cm
P1
P2
Pi
Pm
...
D
...
D
Рисунок 3.17. ВС c доступом только к кэш-памяти
44
Для обеспечения информационной целостности при работе
с кэш-памятью в параллельных многопроцессорных системах
предложено несколько подходов.
В системах единственной кэш-памятью связность (когерентность) между памятью и кэш обеспечивают с использованием двух стратегий: сквозным кэшированием (write-through) и
кэшированием с обратной записью (write-back). Когда процессор изменяет значение данных, расположенных в кэш-памяти,
то для сохранения целостности данных необходимо произвести
изменение в копии, которая расположена в основной памяти.
При сквозном кэшировании копию в памяти модифицируют
каждый раз при изменении соответствующих данных в кэшпамяти. При кэшировании с обратной записью копию в памяти
обновляют только при замене соответствующей строки кэшпамяти.
В многопроцессорных системах, когда задачу решают на
нескольких процессорах и каждый из них оперирует одинаковыми данными из основной памяти, происходит формирование
локальных копий необходимых данных с размещением их в соответствующих модулях кэш-памяти. Однако возникает вопрос,
как поступать, когда один из процессоров обновляет данные в
своей локальной копии. В этом случае принято использовать
следующие стратегии для обеспечения целостности данных:
стратегию с признанием данных недействительными (writeinvalidate) и стратегию обновления (write-update).
В первом случае процессор, который первым приступает к
изменению своей копии в кэш-памяти, инициирует бит недействительности для соответствующих данных в копиях других
процессоров и продолжает обработку. Если другой процессор
обратится к своей копии данных с выставленным битом недействительности, то он не сможет прочитать необходимую информацию и будет ожидать момента, когда первый процессор
завершит обработку, обновит данные и снимет бит недействительности с этих данных.
В стратегии с обновлением информационную целостность
обеспечивают путем одновременного обновления значений всех
копий во всех элементах кэш-памяти. Все биты недействительности устанавливают на время такой записи в активное состоя-
45
ние. После обновления содержимого всех копий все биты недействительности обнуляют.
В общем случае на уровне системы памяти в целом можно
выделить четыре комбинации стратегий обеспечения информационной целостности среди всех модулей кэш-памяти и общей
памяти:
 обновление со сквозным кэшированием;
 обновление с обратным кэшированием;
 признание данных недействительными со сквозным
кэшированием;
 признание данных недействительными с обратным кэшированием.
Реализация каждой из стратегий основана на анализе запросов, передаваемых по шине от разных процессоров и элементов системы памяти, чтобы предотвратить появление различия одних и тех же данных в разных модулях кэш-памяти и оперативной памяти. В силу особенности реализации такую локальную кэш-память называют кэш-памятью с отслеживанием
(snooping caches).
При обновлении со сквозным кэшированием изменения в
одной из кэш-памяти записывают в основную память и в это же
время их пересылают в другие модули кэш-памяти, которые используют ту же копию.
Протокол обновления с обратным кэшированием предусматривает пересылку измененной копии в остальные блоки
кэш-памяти, которые используют ту же копию, а обновление
основной памяти происходит только при замене строки кэшпамяти, содержащей измененные данные.
Протокол с признанием данных недействительными и со
сквозным кэшированием реализует возможность нескольким
процессорам читать одинаковый блок основной памяти для создания локальных копий и использовать их до тех пор, пока
один из процессоров не изменит содержимое своей копии. В
этот момент все копии в остальных модулях кэш-памяти отмечают битом недействительности, а в память помещают новые
данные.
46
Протокол с признанием данных недействительными и с обратным кэшированием похож на предыдущий, но обновление
содержимого памяти происходит лишь при замене строки кэшпамяти, содержащей измененные данные.
Как видно из приведенного описания процесс обеспечения
целостности данных в системах с общей памятью обладает высокой сложностью. Причем чем больше процессорных элементов включено в состав вычислительной системы с общей памятью, тем сложнее логика управления кэш-памятью с помощью
протоколов отслеживания и выше нагрузка на системную шину,
по которой происходит передача запросов и блоков информации
при обновлении локальных копий.
Другой подход обеспечения информационной целостности
на уровне кэш-памяти – протоколы, использующие структуру
каталога. Каталог – структура данных, которая содержит информацию о процессорах, которые используют общую копию
блока памяти, и об их состоянии в процессе вычислений. Информация, представленная в каталоге, может иметь централизованный или децентрализованный характер. В централизованном
каталоге представлена информация обо всех блоках в единой
общей структуре данных. Поскольку такой каталог расположен
в одном узле вычислительной системы, то это может вызвать
проблему, связанную с высокой загрузкой узла и существенным
увеличением времени поиска. Избежать такой проблемы, особенно в ВС с большим числом процессоров, можно применяя
распределенную систему общего каталога. Здесь каждый модуль памяти может использовать свой отдельный каталог. В
распределенном каталоге запись для каждого блока данных
должна содержать набор указателей, чтобы определить месторасположение копий данного блока, а также бит, который показывает, может ли текущий модуль кэш-памяти произвести запись этого блока.
Выделяют три основные категории протоколов, использующих каталог кэш-памяти: каталоги с полным отображением
(full-map directories), с ограниченными каталогами (limited
directories) и сцепленные каталоги (chained directories).
В каталоге с полным отображением каждая запись содержит N указателей, где N количество процессоров в ВС. Следова-
47
тельно, существует N копий отдельного блока памяти в кэшпамяти, используемых всеми процессорами. В каталоге для
каждого блока памяти выделяют N-разрядный вектор, каждый
бит которого ассоциирован с определенным процессором ВС.
Если процессор Pi использует блок памяти, то в векторе для
этого блока в позиции i будет установлена 1, в противном случае – 0 (рисунок 3.18).
Особенность каталога с полным отображением – высокая
размерность за счет хранения информации обо всех блоках и
всех процессорах.
Блок памяти
X:
1
0
1
1
Данные 1
Каталог
Y:
0
1
0
0
Данные 2
Сеть межсоединений
X: Данные 1
Y: Данные 2
X: Данные 1
X: Данные 1
Кэш-память С0
Кэш-память С1
Кэш-память С2
Кэш-память С3
Рисунок 3.18. Каталог с полным отображением
В каталоге с ограничением присутствует фиксированное
число указателей на модули кэш-памяти, использующие одинаковые копии блоков данных памяти, независимо от числа работающих процессоров. Такая организация ограничивает количество копий, которые можно использовать одновременно разным
процессорам, решая при этом проблему высокой размерности
каталога и одновременной нагрузки на данный узел ВС.
На рисунке 3.19 представлен пример каталога с ограничением, где каждый блок данных памяти может иметь не более
двух копий в кэш-памяти.
48
В подходе, использующем сцепленный каталог, решена задача высокой размерности каталогов с полным отображением за
счет распределенного хранения информации. Запись каталога,
Блок памяти
X:
Y:
Каталог
C0 C2 Данные 1
C1
-
Данные 2
Сеть межсоединений
X: Данные 1
Y: Данные 2
X: Данные 1
Кэш-память С0
Кэш-память С1
Кэш-память С2
Кэш-память С3
Рисунок 3.19. Каталог с ограничением
содержащего информацию для определенного блока данных
памяти, представлена связным списком, каждый элемент которого содержит указатель на следующий модуль кэш-памяти, использующий одинаковую копию данных (рисунке 3.20).
49
Блок памяти
X:
C0 Данные 1
Каталог
Y:
C1 Данные 2
Сеть межсоединений
X: C3 Данные 1
Y: - Данные 2
X: - Данные 1
X: C2 Данные 1
Кэш-память С0
Кэш-память С1
Кэш-память С2
Кэш-память С3
Рисунок 3.20. Сцепленный каталог
3.3.3 Системы с распределенной памятью. В системах с
распределенной памятью каждый вычислительный узел содержит процессорный элемент и локальную память. Таким образом,
можно определить, что вычислительный узел системы – самостоятельный компьютер, который может работать независимо
от остальных компьютеров при решении своей задачи или во
взаимодействии с ними при решении общей задачи. В этой связи ВС с распределенной памятью принято называть мультикомпьютером [9].
Взаимодействие вычислительных узлов мультикомпьютера
осуществляют с помощью сети межсоединений. В данной архитектуре не существует общей глобальной памяти, поэтому для
информационного взаимодействия процессорам приходится перемещать данные из одного локального модуля памяти в другой,
используя для этого механизм передачи сообщений. Данный механизм реализуют с помощью пары команд отправить / получить, которые должны быть включены программистом в прикладное программное обеспечение. В общем случае в качестве
сообщений могут выступать команды, данные, сигналы прерываний и синхронизации.
50
На рисунке 3.21 представлены основные компоненты многопроцессорной вычислительной системы с распределенной памятью.
P1
M1
Узел 1
Канал 1
P2
M2
Узел 2
Канал 2
Pi
...
Mi
Узел i
Канал i
Pn
...
Mn
Узел n
Канал n
Сеть межсоединений
Рисунок 3.21. Система с распределенной памятью
Здесь можно выделить n узлов, представленных парой процессор-память (Pi-Mi). Причем количество таких узлов может
быть существенно большим по сравнению с ВС с общей памятью. Каждый процессор обладает своим собственным адресным
пространством. Узлы связаны друг с другом посредством внешних каналов и сети межсоединений, которая может быть реализована как статической, так и динамической топологией. При
выборе сети межсоединений оценивают два основных параметра – пропускную способность и задержку. Пропускная способность определяет количество информации, которое может быть
передано по сети за единицу времени (бит/с). Задержка определяет количество времени, необходимое для передачи сообщения
по сети.
Прикладные программы под ВС с распределенной памятью
реализуют в виде набора параллельных процессов, каждый из
которых выполняется на отдельном процессоре. Если количество процессоров в ВС меньше числа процессов в программе, то
несколько процессов будут реализованы на одном вычислительном узле с разделением во времени. Для обмена сообщениями
друг с другом такие процессы будут использовать так называе-
51
мые внутренние каналы – механизм логического разделения ресурсов между несколькими процессами. Процессы, выполняемые на различных процессорах, в свою очередь используют
внешние каналы для обмена сообщениями. Данные, которыми
обмениваются процессоры, не могут быть использованы совместно как общие данные. Каждый узел, участвующий в вычислении, с помощью сообщений отправить/получить должен загрузить в локальную память свой экземпляр данных, которые
будут обработаны.
Важное достоинство такой организации обмена данными –
простота синхронизации процессов, что непосредственно влияет
на повышение производительности ВС в целом.
Количество процессов в системах с распределенной памятью принято описывать с помощью параметра степень детализации процессов – гранулярность (process granularity – PG),
которую оценивают выражением (3.6)
t
PG  выч ,
tсоед
(3.6)
где tвыч – время, затрачиваемое на вычисление, tсоед – время, затрачиваемое на коммутацию.
В общем случае можно выделить три типа гранулярности.
Грубая степень детализации. Каждый процесс содержит
большое число последовательных инструкций и требует существенное время для выполнения.
Средняя степень детализации. Поскольку затраты на связь
между процессами увеличиваются с понижением степени детализации, то в данном случае обеспечивают поиск компромисса,
обеспечивающего минимизацию коммутационных затрат времени.
Мелкая степень детализации. Каждый процесс представляют всего несколькими последовательными командами или
даже одной. В этом случае время выполнения задачи отдельным
процессом будет минимально, но потребуется организовать
многочисленный обмен результатами среди таких процессов.
Программирование задач для решения на ВС с распределенной памятью требует специального программного обеспече-
52
ния, которое описывает сами вычислительные действия, а также
правила взаимодействия отдельных процессов и их синхронизацию. Наиболее распространенные средства программирования
под вычислительные системы с распределенной памятью – виртуальная машина параллельного действия (PVM – Parallel Virtual Machine) [10], [11] и интерфейс с передачей сообщений
(MPI – Message-Passing Interface) [12]-[14].
Отличительными особенностями ВС с распределенной памятью являются
 Легкость масштабирования. Для повышения производительности достаточно включить дополнительные вычислительные узлы в структуру ВС. Для этого необходимо лишь подключить новый набор узлов к сети межсоединений вычислительной
системы.
 В общем случае количество вычислительных узлов не
ограничено.
 Отсутствие требования к однородности используемых
вычислительных узлов. Каждый узел может быть представлен
отдельной рабочей станцией с процессором любого типа (последовательный, конвейерный, векторный и т.д.) или совокупностью компьютеров, использующих общую память (SMP- или
NUMA- системы).
 Территориальное распределение. В общем случае при
построении таких ВС используют не только локально сосредоточенные компьютеры, например в одном помещении или здании, но и вычислительные узлы с существенным территориальным распределением, например в рамках городов, государств и
даже континентов. В этом случае различают кластерные и gridсистемы.
4 ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ В ЗАДАЧАХ
СОРТИРОВКИ
Сортировка - одна из самых частых операций, выполняемых компьютером. Поскольку сортированными данными проще
манипулировать, множество алгоритмов требуют уже отсортированных данных. Сортировка имеет дополнительное значение
53
в параллельных вычислениях из-за её близости к задаче распределения данных среди процессоров, которая является основной
частью многих параллельных алгоритмов. Большое количество
параллельно сортирующих алгоритмов было исследовано для
множества параллельных архитектур вычислительных систем.
Эта глава представляет несколько параллельно сортирующих
алгоритмов для таких архитектур, как гиперкуб, параллельные
компьютеры с общей и распределенной памятью.
Сортировка определяется как задача размещения неупорядоченного набора элементов монотонно по возрастанию (или
убыванию) порядка. Допустим S = (a1, a2, ..., an) - последовательность из n элементов заданных в произвольном порядке;
сортируя S монотонно по возрастанию получим последовательность S' - {a'1, a'2, ..., a'n} таким образом, что a'i ≤ a'j для 1 ≤ i ≤ j
≤ n, и S' является перестановкой S.
Сортирующие алгоритмы разделяются на внутренние и
внешние. Во внутренней сортировке ряд элементов, который
будет отсортирован, является достаточно небольшим, чтобы
разместиться в оперативной памяти. Напротив, внешние сортировочные алгоритмы используют вспомогательную память (такую как жесткие диски) для того, чтобы сортировать, потому
что ряд элементов, который будет отсортирован, является
слишком большим, чтобы разместиться одновременно в памяти.
Эта глава концентрируется только на внутренних сортировочных алгоритмах.
Сортирующие алгоритмы могут быть выделены как основанные на сравнении и основанные на несравнении. Основанный на сравнении алгоритм сортирует неупорядоченную последовательность элементов, неоднократно сравнивая пары элементов и, если они не в том порядке, заменяя их. Эту фундаментальную операцию, основанную на сравнении, называют сравнение и обмен. Нижняя граница на последовательной сложности любого основанного на сравнении сортировочного алгоритма - Θ (n log n), где n - ряд элементов сортировки. Основанные
на несравнении алгоритмы сортируют при использовании определенных известных свойств элементов (таких как их двоичное
представление или их распределение). В основном упор будет
сделан на алгоритмах основанных на сравнении.
54
4.1 Проблемы сортировки на вычислительных
машинах параллельного действия
Параллелизование последовательного сортировочного алгоритма возводит в степень распространение элементов, которые будут сортированы на доступные процессоры. Этот процесс
проявляет многие проблемы, к которым мы должны обратиться,
чтобы более качественно отобразить параллельные сортирующие алгоритмы.
В последовательных сортировочных алгоритмах входные и
сортированные последовательности хранятся в памяти процессора. Однако, в параллельной сортировке есть два варианта, где
эти последовательности могут находится. Они могут быть сохранены только на одном из процессоров, или они могут быть
распространены среди процессоров. Последний подход особенно полезен, если сортировка - промежуточный шаг в другой алгоритм. В этой главе мы предполагаем, что входные и сортированные последовательности распространены среди процессоров.
Теперь рассмотрим точное распределение сортированной
последовательности результата среди процессоров. Общий метод распределения должен перечислить процессоры и использовать это перечисление, чтобы определить распределение глобальной переменной сортированной последовательности. Другими словами, последовательность будет сортирована относительно этого перечисления процессоров. Например, если Pi,
прибывает прежде, чем Pj в перечислении, все элементы, сохраненные в Pi, будет меньше чем сохраненные в Pj. Мы можем
перечислить процессоры разными способами. Для определенных параллельных алгоритмов и сетей соединения, некоторые
перечисления приводят к более эффективным результатам чем
другие.
Как выполняются сравнения. Последовательно сортирующий алгоритм может легко выполнить операции сравнивания и
замены на двух элементах, потому что они сохранены локально
в памяти процессора. В параллельно сортирующих алгоритмах
этот шаг не настолько прост. Если элементы постоянно находятся на том же самом процессоре, сравнение может быть сде-
55
лано легко. Но если элементы постоянно находятся на различных процессорах, местоположение становится более сложным.
Pi
Шаг 1
aj
ai,aj
Pj
Pi
ai,aj min (ai,aj)
Pj
Шаг 2
max (ai,aj)
Pi
Pj
Шаг 3
Рисунок 4.1. Пример операции сравнения и обмена.
Процессоры Pi и Pj передают свои элементы друг другу.
Процессор Pi сохраняет значение min{ai,aj}, а процессор Pj сохраняет значение max{ai,aj}.
4.1.1 Один элемент на один процессор. Рассмотрим случай, в котором каждый процессор хранит только один элемент
последовательности, которая будет сортирована. В некоторый
момент выполнения алгоритма, пара процессоров (Pi, Pj) должна
сравнить их элементы, ai и aj. После сравнения, Pi будет содержать меньшее значение, а Pj большее из {ai, aj}. Мы можем выполнить сравнение если оба процессора посылают их элементы
друг другу. Каждый процессор сравнивает полученный элемент
с его собственным и сохраняет соответствующий элемент. В
нашем примере, Pi сохранит меньшее, а Pj сохранит больший из
{ai, aj}. Как в последовательном случае, мы обращаемся к операциям сравнение - замена. Как показано на иллюстрации 6.1,
каждая операция требует одного шага сравнения и одного шага
коммуникации.
Если мы предполагаем, что процессоры Pi и Pj являются
соседями и каналы коммуникации двунаправлены, то затраты на
коммуникации сравнения – обмена будут равны времени (ts +
tw), где ts и tw - время старта сообщения и время передачи слова,
соответственно. В коммерчески доступных компьютерах ts значительно больше чем tw. Надо заметить, что в сегодняшних вычислительных машинах параллельного действия пересылка одного элемента от одного процессора до другого занимает больше времени чем непосредственно сравнение. Следовательно,
любая параллельно сортирующая система которая использует
столько же процессоров сколько и сортируемых элементов будет иметь очень малую производительность за счет того, что
56
время вычислений на процессорах будет ничтожно меньше времени межпроцессорной коммуникации.
4.1.2 Больше чем один элемент на процессор. Универсальный параллельно сортирующий алгоритм должен быть способен сортировать большую последовательность с помощью
относительно небольшого количества процессоров. Пусть p будет количеством процессоров P0, P1,..., Pp-1, и пусть n - количество сортируемых элементов. Каждому процессору назначают
блок n/p элементов, и все процессоры сотрудничают, чтобы отсортировать последовательность. Пусть A0, A1, ... , Ap-1 будут
блоки направляемые на процессоры P0, P1, ... , Pp-1 соответственно. Мы говорим, что Ai ≤ Aj, если каждый элемент Ai меньше чем
каждый элемент в Aj. Когда сортировочный алгоритм заканчивает свою работу, каждый процессор Pi хранит множество Ai`
таким образом, что Ai` ≤ Aj` для i ≤ j и  ip01 Ai   ip01 Ai' .
1 6 8 11 13
2 7 9 10 12
Pi
Pj
2 7 9 10 12
1 6 8 11 13
1 6 8 11 13
2 7 9 10 12
Pi
Pj
Шаг 1
1 2
6
7 8 9 10 11 12 13
Pi
Шаг 2
1 2
6
7 8 9 10 11 12 13
Pj
Шаг 3
1 2
6
7 8
9 10 11 12 13
Pi
Pj
Шаг 4
Рисунок 4.2. Операция сравнения-разбиения
На рисунке 4.2. каждый процессор посылает свой блок размера n/p на другой процессор. Каждый процессор объединяет
полученный блок с его собственным блоком и сохраняет только
соответствующую половину объединенного блока. В этом примере процессор Pi сохраняет меньшие элементы, а процессор Pj,
сохраняет большие элементы. Как и в случае "один элемент на
процессор", двум процессорам Pi и Pj, вероятно, придется перераспределить свои блоки элементов n/p так, чтобы один из них
получил меньшие n/p элементы, а другой, большие n/p элемен-
57
ты. Пусть Ai и Aj будут блоками, сохраненными в процессорах Pi
и Pj. Если блок n/p элементов в каждом процессоре уже сортирован, перераспределение может быть сделано эффективно следующим образом. Каждый процессор посылает свой блок в другой процессор. Дальше каждый процессор объединяет два сортированных блока и сохраняет только соответствующую половину объединенного блока. Назовем операции сравнения и разбивания двух сортированных блоков как сравнение-разбиение.
Операция сравнения-разбиения поясняется на рисунке 4.2. Если
мы предполагаем, что процессоры Pi и Pj - соседи и что каналы
коммуникации двунаправлены, то затраты на коммуникации
операции сравнения-разбиения будут равны (ts+twn/p). Поскольку увеличивается размер блока, роль времени ts уменьшается, и
для достаточно больших блоков оно может игнорироваться. Таким образом, время, требуемое объединить два сортированных
блока n/p элементов равно Θ (n/p).
4.1.3 Сортирующие сети. В поисках быстрых сортирующих методов, было спроектировано много различных сетей для
сортировки n элементов, со временем значительно меньшим чем
Θ(n log n). Эти сортировочные сети основаны на модели сети
сравнения, в которой много операций сравнения выполняемых
одновременно.
Ключевой компонент этих сетей - компаратор. Компаратор - устройство с двумя входами x и y и двумя выходами x' и y'.
Для увеличивающего компаратора, x' = min {x, y}, а y' = max
{x, y}; для уменьшающего компаратора x' = max {x, y}, а y' =
min {x, y}. Рисунок 4.3 дает схематическое представление двух
типов компараторов.
x
x’=min{x,y}
x
x’=min{x,y}
y
y’=max{x,y}
y
y’=max{x,y}
a)
x
x’=max{x,y}
x
x’=max{x,y}
y
y’=min{x,y}
y
y’=min{x,y}
b)
Рисунок 4.3. Схематическое представление компараторов: (a)
58
увеличивающий компаратор, и (b) уменьшающий компаратор.
Два элемента поступают на входы компаратора, сравниваются и, в случае необходимости, меняются прежде, чем они
пойдут на выход. Обозначим увеличивающий компаратор Θ , а
уменьшающий компаратор Ө. Сортировочная сеть обычно составляется из последовательности столбцов, и каждый столбец
содержит множество компараторов, подключенных в параллель.
Каждый столбец компараторов выполняет перестановку, и результат, полученный из конечного столбца, сортирован по увеличению или уменьшению порядка. Рисунок 4.4 поясняет типичную сортировочную сеть. Глубина сети - количество столбцов, которые она содержит. Так как скорость компаратора –
технологически зависимая константа, скорость сети - пропорциональна его глубине.
Выходы
Объединяющая сеть
Входы
Столбцы
компараторов
Рисунок 4.3. Типичная объединяющая сортировочная сеть.
Каждая сортировочная сеть составлена из набора столбцов.
Каждый столбец содержит несколько компараторов, подключенных в параллель.
Можно преобразовать любую сортировочную сеть в последовательный сортировочный алгоритм, подражая компараторам
в программном обеспечении и выполняя сравнения каждого
59
столбца последовательно. Компаратор эмулируется операцией
сравнения-обмена, где x и y сравниваются и, в случае необходимости, меняются.
4.1.4 Сортировка битоник. Битоник сеть представляет
сортировочную сеть, которая сортирует n элементов за время Θ
(log2 n). Чтобы упростить понимание мы возьмем n равной степени двойки.
Ключевая операция битоник сортировочной сети является перестановкой битоник последовательности в сортированную последовательность. битоник последовательность - последовательность элементов {a0, a1, …, an-1}, при условии (1), что существует такой индекс i, 0 ≤ i ≤ n - 1, при котором последовательность {a0,..., ai} монотонно увеличивается, а последовательность
{ai,…,an-1} монотонно уменьшается, или (2), там существует
циклический сдвиг индексов так, чтобы удовлетворялось условие (1). Например, {1, 2, 4, 7, 6, 0} битоник последовательность,
потому что она сначала увеличивается, а затем уменьшается.
Точно так же {8, 9, 2, 1, 0, 4} тоже битоник последовательность,
потому что это - циклический сдвиг {0, 4, 8, 9, 2, 1}.
Рассмотрим методику, перестройки битоник последовательности, для получения монотонно увеличивающейся последовательности. Пусть s = {a0, a1, …, an-1} будет битоник последовательностью таким образом, что a0 ≤ a1 ≤ ...≤ an/2-1 и an/2 ≥
an/2+1 ≥ … ≥ an-1. Рассмотрим следующие подпоследовательности s:
s1 = {min [a0,an/2], min[a1,an/2+1], …, min[an/2-1,an-1]},
s2 = {max [a0,an/2], max[a1,an/2+1], …, max[an/2-1,an-1]}
(4.1)
В последовательности s1 существует элемент bi = min [ai,
an/2+i] такой, что все элементы до bi из увеличивающейся части
исходной последовательности, а все элементы после bi из
уменьшающейся части. Аналогично в последовательности s2
существует элемент bi = max [ai, an/2+i] такой, что все элементы
до bi из уменьшающейся части исходной последовательности, а
все элементы после bi из увеличивающейся части. Таким образом, можно сказать, что s1 и s2 – битоник последовательности.
Кроме того, каждый элемент первой последовательности мень-
60
ше чем каждый элемент второй последовательности. bi больше
или равен любого элемент из si, bi’ меньше или равен любого
элемента из s2, и bi’ больше или эквивалентно bi. Таким образом,
мы упростили начальную задачу перестановки битоник последовательности размерности n. Остается отсортировать две
меньшие последовательности и их объединить. Мы должны использовать операцию разбивания битоник последовательности
размера n на две битоник последовательности, определенные
Уравнением 6.1 как битоник разбиение. Хотя при получении s1
и s2 мы предполагали, что у первоначальной последовательности
были увеличивающая и убывающая последовательности одинаковой длины, операция битоник разбиения проводится для любой битоник последовательности.
Можно рекурсивно получить более короткие битоник последовательности, используя Уравнение 6.1 для каждой из битоник последовательностей, пока не достигнем последовательности из одного элемента. В таком случае результат уже будет
сортирован в увеличивающемся порядке монотонно. Так как
после каждого битоник разбиения, размер задачи делится на два,
количество разбиений, требуемых для перестановки битоник
последовательность в отсортированную последовательность,
является логарифмом n. Процедура сортировки битоник последовательности использующая разбиения битоник называется
слиянием битоник. Рекурсивная процедура слияния битоник
поясняется на рисунке 4.5.
Оригинальная
последовательность
Разделение 1
Разделение 2
Разделение 3
Разделение 4
3 5 8 9 10 12 14 20 95 90 60 40 35 23 18 0
3
3
3
0
5
5
0
3
8
8
8
5
9
0
5
8
10
10
10
9
12
12
9
10
14
14
14
12
0
9
12
14
95
35
18
18
90
23
20
20
60
18
35
23
40
20
23
35
35
95
60
40
23
90
40
60
18
60
95
90
20
40
90
95
Рисунок 4.5. Слияние bitonic последовательности с 16
элементами из серии log 16 разбиений bitonic.
Этот метод легко осуществить на сети компараторов. Такая
сеть компараторов, известных как объединяющая сеть бито-
61
ник, показана на рисунке 4.6. Сеть содержит log n столбцов.
Каждый столбец содержит n/2 компараторов и выполняет один
шаг слияния битоник. Эта сеть берет на вход битоник последовательность и подает на выход последовательность в сортированном порядке. Обозначим битоник сеть с n входами как ΘBM
[n]. Если мы заменим компараторы рисунка 4.6 на уменьшающие компараторы, то входные данные будут отсортированы в
порядке уменьшения монотонно; такую сеть обозначим ӨBM
[n].
Вооружившись битоник сетью, рассмотрим подходы решения задачи сортировки n неупорядоченных элементов. Это можно осуществить, неоднократно объединяя битоник последовательности, как показано на рисунке 4.7.
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
3
5
8
9
10
12
14
20
95
90
60
40
35
23
18
0
3
5
8
9
10
12
14
0
95
90
60
40
35
23
18
20
3
5
8
0
10
12
14
9
35
23
18
20
95
90
60
40
3
0
8
5
10
9
14
12
18
20
35
23
60
40
95
90
Рисунок 4.6 Битоник объединяющая сеть для n = 16.
62
0
3
5
8
9
10
12
14
18
20
23
35
40
60
90
95
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[2]
ВМ[4]
ВМ[8]
ВМ[4]
ВМ[16]
ВМ[4]
ВМ[8]
ВМ[4]
Рисунок 4.7 Схематичное представление сети преобразующей
входную последовательность в битоник последовательность.
Как этот метод работает. Последовательность двух элементов x и y формирует битоник последовательность, или вида x ≤
y, когда у битоник последовательности есть x и y в увеличивающейся части и никаких элементов в уменьшающейся части, или
вида x ≥ y, когда у битоник последовательности есть x и y в
уменьшающейся части и никаких элементов в увеличивающейся
части. Следовательно, любая несортированная последовательность элементов - конкатенация битоник последовательностей из
двух элементов. Каждая стадия сети, которая показана на рисунке 4.7, объединяет смежный канал битоник последовательности
в увеличении и уменьшении порядка. Согласно определению
битоник, последовательность, полученная, связывая увеличивающую и убывающую последовательности, является битоник.
Следовательно, результат каждой стадии в сети на рисунке 4.7 конкатенация битоник последовательностей, которые являются в
два раза длиннее, чем на входе. Объединяя всё большие и большие битоник последовательности, мы в конечном счете получаем
битоник последовательность размера n. Объединение этой последовательности сортирует исходные данные. Назовем алгоритм,
воплощенный в этом методе как битоник сортировка, а сеть как
битоник сортирующая сеть. Первые три стадии сети на рисун-
63
ке 4.7 показаны более наглядно на рисунке 4.8. Последняя стадия
рисунка 4.7 показана наглядно на рисунке 4.6.
Последняя стадия битоник сортировочной сети последовательности из n элементов содержит битоник объединяющую
сеть с n входами. Глубина log n. Другие стадии выполняют полную сортировку n/2 элементов. Следовательно, глубина, d (n),
показанная на рисунке 4.7 получается из следующего рекуррентного соотношения:
d(n) = d(n/2)+log(n)
Решая выражение 6.2, получим следующее выражение:
(6.2)
(log 2 n  log n)
d (n)   i 
 (log 2 n) .
2
i 1
log n
Такая сеть может быть реализована на последовательных компьютерах. Битоник сортирующая сеть может быть
очень легко адаптирована и реализована на параллельных компьютерах, в том числе гиперкубе, с распределенной и общей
памятью.
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
64
10
20
5
9
3
8
12
14
90
0
60
40
23
35
95
18
10
20
9
5
3
8
14
12
0
90
60
40
23
35
95
18
5
9
10
20
14
12
8
3
0
40
60
90
95
35
23
18
3
5
8
9
10
12
14
20
95
90
60
40
35
23
18
0
Рисунок 4.8 Сеть компараторов, которая преобразует входную
последовательность из 16 несортированных данных в битоник
последовательность.
5 МЕТОДЫ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ
АЛГОРИТМОВ НА ОСНОВЕ ПОНИЖЕНИЯ
ПОРЯДКА ПРОИЗВОДНОЙ
5.1 Переход от произвольной математической
зависимости к системам дифференциальных
уравнений
В [15] была обоснована принципиальная возможность
представления функций с помощью уравнений К.Шеннона, однако обоснование принципиальной возможности еще не равносильно указанию рационального пути перехода от заданных
функций к соответствующим уравнениям. Так как проблема перехода от функциональных зависимостей к эквивалентным
уравнениям К.Шеннона имеет существенное значение при программировании задач для ЦИМ (цифровых интегрирующих машин), то на этом вопросе следует остановиться подробнее.
Рассмотрим один из наиболее эффективных методов перехода от заданных функций к порождающим системам уравнений
К.Шеннона. Допустим, что задана какая-либо негипертрансцендентная функция многих переменных
  F {x1 , x2 ,..., xi 1 , f [ y1 , y2 ,..., yk 1 ,  z1 , z2 ,..., zl ,
yk 1 ,..., ym ], xi 1 ,..., x j 1 , 1 ,  2 ,..., p , x j 1 ,..., xn },
(5.1)
представляющая собой суперпозицию более простых функций,
которую необходимо представить в форме уравнений
К.Шеннона.
Такую функцию следует прежде всего расчленить на ряд
элементарных функций:
65
  F  x1 , x2 ,..., xn ,
xi  f  y1 , y2 ,..., ym ,
yk    z1 , z2 ,..., zl ,
(5.2)
x j   1 ,  2 ,..., p ,
каждая из которых не поддается дальнейшему расчленению и
упрощению на основе принципа суперпозиции. Затем для каждой функции из системы (5.2) необходимо составить порождающую систему уравнений К.Шеннона. Объединяя системы
уравнений, определенные для каждой из функций (5.2), получим
общую систему уравнений К.Шеннона, задающую исходную
функцию.
Остается рассмотреть метод перехода от некоторой негипертрансцендентной функции
z  f  y1 , y2 ,..., yl ,
(5.3)
не поддающейся дальнейшему расчленению на более элементарные функции, к порождающей системе уравнений
К.Шеннона. С этой целью продифференцируем функцию (5.3)
f
dyi
i 1 yi
l
dz  
и введем обозначения
zi  zi  y1 , y2 ,..., yl  
f
, (i  1,2,...,l ).
yi
(5.4)
(5.5)
В результате можно написать
l
dz   zi dyi
(5.6)
i 1
Продифференцируем далее функции
zi  zi  y1 , y2 ,..., yl , (i  1,2,...,l )
dzi 
l
j 1
Если ввести обозначения
66
  f 

dy j , (i  1,2,...l ).
j  yi 
 y
(5.7)
zij  zij  y1 , y2 ,..., yl  
zi
  f 



y j y j  yi 
(5.8)
(i  1,2,...,l ; j  1,2,...,l ),
то равенство (5.7) можно представить в следующем виде:
dzi 
l
 zij dy j i  1,2,...,l .
(5.9)
j 1
Продолжая процесс дифференцирования z i аналогичным
образом и вводя соответствующие обозначения zij (подстановки) для возникающих при этом новых функций, получим систему дифференциальных уравнений.
По условию функция z  f  y1 , y2 ,..., yl  негипертрансцендентна и, следовательно, удовлетворяет конечной системе уравнений Шеннона. Любая функция может удовлетворять конечной
системе дифференциальных уравнений только тогда, когда при
последовательном дифференцировании указанной функции,
начиная с некоторого шага дифференцирования, ее высшие
частные производные либо обращаются в ноль, либо содержат
периодически повторяющиеся функции.
Таким образом, общая схема перехода от заданной функции к порождающей системе уравнений Шеннона состоит из
следующих этапов:
 расчленение исходной функции с учетом суперпозиции на
более простые;
 последовательное дифференцирование каждой простой
функции (при одновременном введении новых переменных) до
момента получения конечной системы уравнений Шеннона; и,
наконец,
 определение начальных значений всех зависимых переменных, входящих в систему.
В качестве примера рассмотрим переход к системе уравнений Шеннона от функции z  e y x .
Пользуясь принципом суперпозиции, можно, очевидно,
написать
67
z  uv; u  e y ; v  x.
Составим для каждой из трех функций z, u, v систему уравнений Шеннона, записывая для удобства исходные функции,
промежуточные значения, и конечные результаты в таблицу 5.1.
Таблица 5.1 - Пример перехода от функции z  e y x к СУШ
Функция Обозначения
Система диф. уравнений
(СУШ)
y 2  z ; y 3  u;
z  uv,
dy2  dy5  dy6 , dy2  dy5  dy6 ,
y 4  v;
u  ey,
y7  y ,
v  x.
y1  x,
1
y8 

x
1 
y9   
x 
1
,
y4
1 
2
  y8 ,
x
y10  2 y8 ,
y11  2  Const .
dy5  udv,
dy5  y3dy4 ,
dy6  vdu,
dy6  y4 dy3 ,
dy 3  e x dy ,
dy3  y3dy7 ,
1
dx,
x
1
dy8   d x ,
x
dy9  2 y8dy8 ,
dy4  y8dy1 ,
dy4 
dy10  2dy8 ,
dy8   y9 dy4 ,
dy9  y10 dy8 ,
dy10  y11dy8 ,
dy11  0.
dy11  0.
Систему уравнений Шеннона можно записать в обозначениях математических величин, как это показано в третьем
столбце таблицы. Однако по мере усложнения решаемых задач
количество участвующих в СУШ переменных возрастает и даже
для задач небольшой размерности в несколько раз превосходит
число цифр латинского алфавита. Поэтому на практике удобнее
оказывается использовать формализованное обозначение математических величин в форме индексной переменной y k , как
показано в четвертом столбце. Это сокращает число используемых символов для обозначения переменных до одного и позволяет абстрагироваться от математического содержания задачи,
уделяя больше внимания ее структуре.
Для решения полученной СУШ в заданной граничной об-
68
ласти ее необходимо дополнить вектором начальных условий:
y pi 0  y pi 0 , где i = 3, 4, 8, 9, 10, 11.
Структурная схема параллельной цифровой интегрирующей системы, воспроизводящей решение СУШ, представленной
в таблице 5.1, показана на рисунке 5.1.
5.2 Методы численного интегрирования по Стилтьесу
В любой цифровой интегрирующей машине (ЦИМ), как
отмечено в первом разделе, реализуется одна из форм дифференциальных уравнений Шеннона [15], например, симметричная
форма записи (5.10).
N
dy pk 
 Apkjdz j ,
dyqk 
 Aqkjdz j ,
j 1
N
(5.10)
j 1
dzk  y pk dyqk ,
dz1  dx,
y pk ( x0 )  y pk 0 ,
k  2,3,..., N .
Здесь Apkj и Aqkj (k  1,2,..., N , j  1,2,..., N ) являются постоянными коэффициентами, принимающими значения 0 или 1 в зависимости от решаемой задачи. Прямоугольные матрицы, со-
69
dy4
И1
dy3
dy5
dy2
y3
dy
3
И2
dy1
y2

dy4
И4
И7
dy4
y8
dy6
И5
y4
dy8
y9
dy8
dy7
И3
dy3
dy3
И6
y3
dy9
И8
2
y10
dy10
Рисунок 5.1. Структурная схема параллельной цифровой интегрирующей системы,
воспроизводящей решение СУШ функции
70
z  ey  x
dy10
ставленные из коэффициентов Apkj и Aqkj , вместе с вектором
начальных условий y pk 0 (k  1,2,..., N ) полностью задают систему уравнений Шеннона (5.10) и программу коммутации интеграторов в ЦИМ.
Основу СУШ составляет интеграл Стилтьеса (5.11), для
вычисления которого используются различные формулы численного интегрирования, например, интерполяционные (5.12).
zk (i 1)   y pk ( x)dyqk ( x),
(5.11)
1
zk (i 1)  y pkiyqk (i 1)  y pk (i 1)yqk (i 1) 
2

(5.12)
2 n  9  ( 1) n
n   3
4

 0
 n [yqk (i 1 )yqk (i 1  )  yqk (i 1  )yqk (i 1 ) ],
  1
где n = 3,4,5,…,  n - постоянные коэффициенты [15].
Решение СУШ в ЦИМ выполняется на основе итерационных
процессов либо вычислением неизвестных значений приращений (переменных) методом экстраполяции (5.13).
n
n
z * k (i 1)   (1) 1  z k (i 1 ) .
 1
 
(5.13)
Особенностью, оптимального по объему вычислений,
численного интегрирования по Стилтьесу является сбалансированность частных формул численного интегрирования по порядку аппроксимирующих полиномов функций y p и y q интеграла Стилтьеса (5.11), определяющих величину методической
погрешности при заданном шаге интегрирования x  h . В таблице 5.2 приведены интерполяционные формулы численного
интегрирования по Стилтьесу на основе первых разностей и
значения методических погрешностей на одном шаге интегри-
70
Таблица 5.2 - Интерполяционные формулы численного интегрирования по Стилтьесу на основе первых разностей
Порядок Название формуФормулы оценки погрешностей
погрешн. лы интегрирова- Формулы интегрирования
метода на одном шаге интегриn
ния
рования

Формула прямо2 1
zi 1  y piyq i 1
i 1  x   y' p  y'q  
2
угольников
2


3
1
Формула трапеций zi 1  y piyq i 1  y p i 1yq i 1
2
4
Формула квадратичных парабол
71
1
zi 1  y piyq i 1  y p i 1yq i 1 
2
1

y piyq i 1  y p i 1yqi
12


1
[ y ' ' p   y ' q   
12
 y ' p   y ' ' q  ]
 i 1  x 3
i 1  x 
1 3 
[ y p   y 'q   
24
 y ' p   yq3  ]
4
рования.
Порядок используемых в вычислениях формул экстраполяции должен быть таким, чтобы замена приращений (переменных) в СУШ их экстраполированными значениями не привела бы к ухудшению методической погрешности. Это достигается, когда порядок формулы экстраполяции v на единицу выше порядка формулы численного интегрирования [15]. В таблице 5.3 приведены формулы экстраполяции разностей для соответствующих порядков погрешностей n (порядок погрешности n - есть показатель степени шага интегрирования x в
формуле оценки величины методической ошибки на одном шаге, см. таблицу 5.2)
Таблица 5.3 Формулы экстраполяции разностей
Порядок
погрешноФормулы экстраполяции разностей
сти n
y *  2yi  yi 1
2
i 1
3
y*i1
 3yi  3yi 1  yi  2
4
y *
 4yi  6yi 1  4yi  2  yi  3
i 1
5.3 Разностно-квантованные схемы интегрирования
уравнений Шеннона в относительной форме записи
В цифровых интегрирующих системах (ЦИС) СУШ моделируется разностными схемами, предусматривающими квантование, как независимой переменной x так и всех зависимых переменных: yk ( x), y pk ( x), yqk ( x) , (k  2,3,..., N ) и их приращений. Фактически это значит, что во всех вычислениях, которые
производятся с помощью ЦИС, приходится сталкиваться с тем
обстоятельством, что переменные, участвующие в вычислениях, ограничены по модулю, представлены конечным числом
разрядов и могут, следовательно, изменяться лишь постоянными скачками, равными квантам: x, yk , y pk , yqk . Квантова-
72
ние переменных и приращений существенно влияет на точность
работы, быстродействие ЦИС и на затраты необходимого для
построения цифровых интеграторов оборудования.
Для квантования переменных и приращений в ЦИС могут
быть использованы различные методы [15]. В любом случае это
приводит к возникновению погрешностей квантования первого
и второго рода. Погрешность квантования первого рода 1 образуется в результате ограничения числа разрядов n и  представления значений переменных и приращений СУШ соответственно. Погрешность квантования второго рода  2 образуется
вследствие того, что при вычислении используются не точные,
а уже квантованные величины.
Рассмотрим влияние квантования на разработку алгоритмов моделирующих решение СУШ в ЦИС с позиций сложности
цифровых интеграторов и времени вычисления.
Интегралы Стилтьеса вычисляются в цифровых интеграторах на основе частных формул численного интегрирования
(5.12), таблица 5.1, с ограниченной длиной разрядной сетки переменных n и приращений  . Величина  меньше n и зависит
от шага интегрирования и скорости изменения переменных.
Поэтому при разработке алгоритмов ЦИС, с целью сокращения
времени на обработку (и тем самым повышения быстродействия и уменьшения сложности цифровых интеграторов), необходимо предусмотреть участие в выполняемых операциях только значащих разрядов значений переменных и приращений, исключив заведомо нулевые разряды. Аналитически это достигается путем деления приращений y k на величину кванта y .
y k
Относительная величина приращения
есть целое  - разy
рядное число со знаком, не содержащее незначащих, заведомо
нулевых старших разрядов, дополняющих разрядную сетку
приращения до n. Поскольку  меньше n, то это во-первых
снижает аппаратурные затраты цифровых интеграторов (что
для параллельной системы большой размерности весьма существенно) и во-вторых сокращает на (n-  ) циклов время выпол-
73
нения макрооперации интегрирования.
Из выражения квантования первого рода (5.14) [15]
i
1i   s y 0   sy j ,
(5.14)
j 1
где sy j -остатки, не превышающие по модулю кванта y , но в
пределе могут достигать и значения кванта sy j  y
следует, что при непосредственном квантовании приращений
погрешность квантования первого рода имеет тенденцию к
накоплению и при неблагоприятных условиях на большом интервале интегрирования может стать весьма значительной, даже превысить значение переменной.
Существенно снизить погрешность квантования первого
рода можно, доведя ее до величины не превышающей половины кванта на всем интервале интегрирования, если квантовать
приращения с учетом остатков, полученных в предыдущих шагах вычислений.
С учетом сказанного разностно-квантованная схема в относительной форме записи, моделирующая решение СУШ
(5.10) в ЦИС для частной формулы численного интегрирования
трапеций имеет следующий вид
 y pk ( i 1)
y
 y qk ( i 1)
y
 z * * j (i 1)
N
  Apkj
y
j 1
N
  Aqkj
 z * * j ( i 1)
j 1
y pki  y pk ( i 1)  2  n
y
 y pki
y
,
,
,

 y * * pk ( i 1)   y * *qk ( i 1)

  y pki  2  ( n 1)
,


y

y

y


~
 z
 z k ( i 1)
Oz
1
 P0  k ( i 1)  ki   ,
y
y 2  2
 y
~zk ( i 1)
74
Oz k (i 1)
y

z
 ~
1
Oz
1
 Pn1  k (i 1)  ki   ,
2
y 2  2
 y
(5.15)
y pk ( x 0 )  y pk 0 ; k  2,3,..., N ; xi 1  xi   x,
где
 z k (i 1)  y * * pk (i 1)  y * *qk (i 1)
,
,
y
y
y
целые значения
квантованных приращений интегралов, подынтегральных
функций и переменных интегрирования на (i+1) шаге соответственно;
Pdr [a ] - функция расчленения, при помощи которой из
числа a выделяется число с d по r разряды включительно;
Ozki
- остаток, полученный при квантовании приращения
y
интеграла на i шаге;
y  2  n - квант значения подынтегральной функции y ki ;
  z j (i 1)
,
если j  k ,

 y
 *
y
  z j (i 1)
если j  k .
 y ,

Звездочкой обозначены проэкстраполированные значения приращений, число которых во многом определяется правильным
ранжированием дифференциальных уравнений в СУШ.
**
 z j (i 1)
5.4 Примеры реализации формальных методов перехода от произвольной математической зависимости к системам дифференциальных уравнений
- Пусть задана функция y  A sin 2ft , где A  100, f  60
и задана погрешность вычисления   10 4 .
75
Тогда, используя вышеизложенную методику приведем исходную математическую зависимость к системе дифференциальных уравнений К.Шеннона (СУШ). В таблице 5.4 приведены
обозначения, подстановки и последовательность получения
дифференциальных уравнений СУШ.
Структурная схема связей решающих блоков, отображающая параллельный вычислительный процесс исходной математической зависимости в цифровой интегрирующей системе показана на рисунке 5.2
Таблица 5.4 Последовательность перехода y  A sin 2ft к СУШ
Обозначения, подстановки
СУШ
y1  t ; dy1  1;
dy2  dy5  dy6 ;
y2  y; dy2  dy5  dy6 ;
dy5  y3dy4 ;
y3  A  const; dy3  0;
dy6  y4 dy3 ;
y4  sin 2ft  sin y7 ; dy4  cos y7 dy7  y8dy7 ;
dy4  y8 dy7 ;
dy5  y3dy4 ;
dy7  dy10  dy11
dy6  y4 dy3 ;
dy8   y4 dy7 ;
y7  2ft  y9 y1; dy7  dy10  dy11;
dy9  dy14  dy15
y8  cos y7 ; dy8   sin y7 dy7   y4 dy7 ;
dy10  y9 dy1;
y9  2f  y12 y13; dy9  dy14  dy15 ;
dy11  y1dy9 ;
dy10  y9 dy1;
dy14  y12dy13;
dy11  y1dy9 ;
dy15  y13dy12 .
y12  2  const; dy12  0;
y13  f  const; dy13  0;
dy14  y12dy13;
dy15  y13dy12 .
76
dy4
И1
dy3
dy5
y3
dy3
И2
dy4
dy6
dy7
И4
dy8
dy4
И6
dy9
-y4
dy10
y9
dy9
И7
dy1

dy7

dy9
И8
dy7
y7
dy11
y1
dy13
И9
dy14
y12
dy13
dy8
И5
dy4
y8
dy1
dy12
y2
y4
dy7
dy12
И3
dy2

И10
И11
dy9
y9
dy15
y13
Рисунок 5.2 - Структурная схема связей решающих блоков
СУШ для математической зависимости y  A sin 2ft
С целью сокращения числа переменных неизвестных на
шаге i + 1 выполним ранжирование системы дифференциальных уравнений:
Зная, что dy12  0, dy13  0, вычисляем :
1)dy14  y12dy13 ;
2)dy15  y13dy12 ;
3)dy9  dy14  dy15 ;
77
Зная, что dy1  1, вычисляем далее :
4)dy10  y9 dy1;
5)dy11  y1dy9 ;
6)dy7  dy10  dy11;
7)dy4  y8 dy7 ;
8)dy8   y4 dy7 ;
Зная, что dy3  0, вычисляем далее :
9)dy5  y3dy4 ;
10)dy6  y4 dy3 ;
11)dy2  dy5  dy6 .
Выбирая один из возможных способов численного решения,
перейдем к интерполяционным формулам численного интегрирования по Стилтьесу:
Для формулы численного интегрирования прямоугольников
(m=0) система имеет следующий вид:
1)y2 (i 1)  y5(i 1)  y6 (i 1) ;
2)y5(i 1)  y3i y4 ( i 1) ;
3)y6 ( i 1)  y4i y3(i 1) ;
y4 (i 1)  y8i y7 (i 1) ; для рассчета y4(i1 ) неизвестен y8i ,
который зависит от y4i , поэтому заменим y8i соответст вующей формулой экстраполяции y8*i . Запишем
4)y8*(i 1)  3y8i  3y8(i 1)  y8(i  2 ) ;
5)y4 ( i 1)  y8*i y7 (i 1) ;
6)y7 (i 1)  y10(i 1)  y11(i 1) ;
7)y8(i 1)   y4i y7 ( i 1) ;
8)y9 (i 1)  y14( i 1)  y15(i 1)
78
9)y10( i 1)  y9iy1( i 1) ;
10)y11(i 1)  y1iy9 (i 1) ;
11)y14(i 1)  y12iy13(i 1) ;
12)y15(i 1)  y13iy12(i 1) .
Для формулы численного интегрирования трапеций (m=1) система имеет следующий вид:
1)y2 ( i 1)  y5( i 1)   6 (i 1) ;
1
2)y5(i 1)  y3iy4 (i 1)  y3(i  )y4 ( i 1) ;
2
1
3)y6 (i 1)  y4iy3(i 1)  y4 (i  )y3( i 1) ;
2
*
4)y8(i 1)  4y8i  6y8( i 1)  4y8(i  2 )  y8(i  3) ;
1
5)y4 (i 1)  y8iy7 (i 1)  y8*(i 1)y7 (i 1) ;
2
6)y7 (i 1)  y10(i 1)  y11(i 1) ;
1
7)y8(i 1)   y4iy7 (i 1)  y4 (i 1)y7 ( i 1) ;
2
8)y9 (i 1)  y14( i 1)  y15( i 1)
1
9)y10(i 1)  y9iy1( i 1)  y9 ( i 1)y1( i 1) ;
2
1
10)y11(i 1)  y1iy9 (i 1)  y1( i 1)y9 ( i 1) ;
2
1
11)y14(i 1)  y12iy13(i 1)  y12(i 1)y13(i 1) ;
2
1
12)y15(i 1)  y13iy12(i 1)  y13( i 1)y12(i 1) .
2
7
- Пусть задана функция y  3 cos t ; f  35 Гц;   10 ,
тогда система дифференциальных уравнений Шеннона по рас-
79
смотренной выше методике будет иметь следующий вид (таблица 5.5):
Таблица 5.5 СУШ функции y  3 cos t
Функция
Подстановки
СУШ
y  cos t
y0  1
dy2   y4 dy3
y1  t
dy4  y5dy6
3
dy6  y8dy2
y2  y3 3
1
1 1
dy2   
3  3 y3
2

 dy3


1 1
y4   2  y5  y6
3 y2
y7 
dy8  y9 dy2
dy3   y11dy10
dy11  y3dy10
dy10  y12dy1
1
y2
dy6  2 y7 dy2
y8  2 y7  y9 y7
y3  cos t  cos y10
dy3   sin y10dy10   y11dy10
dy11  cos y10dy10  y3dy10
y10  t  y12 y1
dy10  y12dy1
Структурная схема параллельной интегрирующей системы
воспроизведения заданной математической зависимости имеет
вид (рисунок 5.3):
80
dy3
dy4
dy2
И1
dy2
dy6
y4
И4
y9
И2
dy2
dy4
y5
dy8
dy10
dy11
dy1
И5
И3
dy6
y8
dy10
dy3
dy3
y11
И7
dy8
И6
dy11
y3
dy10
y12
Рисунок 5.3 Структурная схема связей решающих блоков
СУШ для математической зависимости y  3 cos t
5.5 Разностно-квантованные схемы интегрирования.
Расчет основных параметров ЦИС
Расчет заключается в выборе оптимальных соотношений
порядков формул численного интегрирования m , экстраполяции приращений v , самих формул, разрядности значений переменных n , приращений  , шага интегрирования x  h , способа округления, обеспечивающих требуемую погрешность  на
всем интервале интегрирования заданных математических зависимостей и шаге выдачи решений H .
Общая погрешность решения задач в ЦИС на большом
интервале интегрирования зависит от ошибки метода  , квантования первого и второго рода (1 ,  2 ) , инструментальной погрешности  , трансформируемой  (определяемой, как способом представления исходных математических зависимостей так
и в последствии коммутацией цифровых интеграторов в соответствии с решаемой задачей)
(5.16)
   , 1 ,  2 , ,  .
В этой связи аналитически выбрать не завышенные параметры
81
ЦИС не представляется возможным.
Оценка общих погрешностей, возникающих при решении в
ЦИС различных конкретных задач, в большинстве случаев производится путем интегрирования системы дифференциальных
уравнений погрешностей [15] или моделированием на ЦВМ
широкого применения. Однако в обоих случаях прежде необходим ориентировочный начальный выбор параметров ЦИС, которые в дальнейшем были бы уточнены.
Порядок формулы численного интегрирования m определим из условия, согласно которому предельная методическая
погрешность  при вычислении интегралов СУШ
xt
xt
0
0
I  z k   y pk ( x)dy qk ( x)   F ( x)dx
(5.17)
не должна превышать половины предельной абсолютной ошибки вычислений  , то есть sup   0,5 ; (  2,3,..., k ) . Здесь

F (x) - некоторая эквивалентная функция. В общем случае
F ( x)  y p ( x) y ' q ( x) . Но, учитывая, что методическая ошибка
формул численного интегрирования в основном определяется
скоростью изменения подынтегральной функции y pk на каждом шаге интегрирования yqk ( i 1) , в качестве F (x ) удобно
использовать хорошо интегрируемую периодическую функцию, например, sin xk , имеющую предельно допустимую скорость изменения такую же, как и функция y pk (x ) СУШ. Используя общую формулу методической погрешности на одном
шаге интегрирования при вычислении интеграла Римана [15]
получим

sup   sup   


 2

(5.18)
 sup (x  2  f ) m 1   b1( m 1) (sin xt ) (xmt x1) ,

 2
82
где b1( m 1) - известные коэффициенты. Заменяя алгебраическую

сумму приращений
 
интегралом, находим
 2
sup (x  2  f )
t
m 1
x
 b1( m 1)   (sin xt )( m 1) dxt  0,5 .
(5.19)
0
Если xt  2 , то  можно представить в виде
x
    sup  sin xt dxt  2 ,
t
(5.20)
0
тогда получаем
(5.21
(x  2  f ) m1  b1( m1)   .
В этом неравенстве величины x - шаг интегрирования и  относительная приведенная погрешность известны (или задаются исходя из требований решения задачи) f - максимальная
циклическая частота эквивалентной функции синус, определяемая скоростью изменения переменных СУШ, которую требуется найти. Предположим, что каждая переменная СУШ меняется по закону синуса
y  y max  sin  2  f э  х , тогда y'  2  f э y max cos 2  f э  x .
Приравнивая в последнем выражении y'  y' max определим
максимальное значение частоты f э для каждой функции. Поскольку в принятых условиях этому будет соответствовать
cos 2  f э  x  1 , то
f э max 
y ' max
2  y max
.
(5.22)
Значения f э max рассчитываются для каждой функции системы
уравнений Шеннона. Так как оценочный расчет m выполняется по предельно допустимым максимальным значениям, то в
качестве f выбирается значение
83
f  sup f э max .
(5.23)
Порядок формулы экстраполяции системы выбирается
из условия, при котором замена переменных или приращений
их экстраполированными значениями не привела бы к существенному увеличению приращения методической ошибки. Оно
выполняется, если
 *pq(i 1)   pq(i 1) .
(5.24)
Неравенство (5.24) соблюдается, когда порядок малости величины h v 1 , входящей в качестве коэффициента в выражение
для  *pq(i 1) , выше или равен порядку малости коэффициента
h m 1 формулы методической погрешности  pq(i 1) [15]:
(5.25)
v 1  m  2 ,
откуда v  2 . Формулы экстраполяции, представленные в таблице 5.3, приведены с учетом неравенства (5.25).
Оценка погрешностей квантования для различных формул численного интегрирования показывает, что условие
sup 1  0,5 (  2,3,..., k )
(5.26)

при принятых алгоритмах численного интегрирования и экстраполяции выполняется, если
n  ent log 2  1  1.
(5.27)

Число
разрядов
 y * *qk (i 1)
y


приращений
 z k ( i 1)
,
y
 y * * pk (i 1)
y
,
зависит от шага интегрирования x , предельных
скоростей и значений изменения переменных СУШ, согласно
которым
yi
y

max
dyi
dx

max
y
x
 i
y
y
.
(5.27)
max
Зная предельную величину относительного приращения
84
yi
y
, значение  можно определить по формуле
max

  ent log 2

dyi
dx

max
x 
 1 .
y 
(5.28)
Найденные значения параметров ЦИС позволяют также
приближенно оценить время выполнения основных операций
интегрирования и экстраполяции: tинт.  0,9  t ум н. , t э.  3  tсл. .
5.6 Задания для самостоятельного выполнения
В заданиях предлагается самостоятельно синтезировать,
рассчитать параметры и провести исследования параллельной
цифровой интегрирующей системы (ЦИС), реализующей одну
из приведенных в таблице 5.6 функций.
Таблица 5.6 - Варианты исходных данных для самостоятельного выполнения
Номер
Реализуемая функция Параметры
варианта
f (гц)

A
1
10
35
10-6
2
50
48
10-5
3
100
60
10-4
4
68
33
10-7
y  A  Sin 2ft
5
220
50
10-5
6
150
28
10-6
7
75
40
10-5
8
130
53
10-4
9
99
38
10-6
f1 (гц) f 2 (гц) 
A
10
11
12
85
y
A  Sin1t
Cos 2 t
100
120
140
25
30
35
55
50
45
10-3
10-4
10-5
Продолжение таблицы 5.6
Номер
Реализуемая функция Параметры
варианта
A  Sin1t
Cos 2 t
13
14
15
16
y
17
18
19
20
21
y  Cost
22
23
24
25
26
27
28
29
30
3
y  tgx  z
y
1
ax 2  b
A
f1 (гц) f 2 (гц) 
160 40
180 45
200 50
220 55
f (гц)
30
35
40
50
10-6
10-7
10-5
10-6
40
35
30
25

10-6
10-7
10-5
10-6
  10 6
a
b

5
10
15
20
25
30
35
40
45
10-4
10-5
10-6
10-7
10-5
10-6
10-5
10-6
10-5
20
30
40
50
60
70
80
90
100
5.6.1 Задание № 1
Цель: Знакомство с методами решения задач в цифровых
интегрирующих системах, методами перехода от исходных математических зависимостей к системам дифференциальных
уравнений Шеннона, с особенностями структуры цифровых
интеграторов, использующих различные формулы численного
интегрирования, методиками расчета параметров ЦИС.
86
Порядок выполнения
Для заданной функции (см. таблицу 5.6) провести исследование, составить СУШ в симметричной форме записи и структурную схему параллельной ЦИС, моделирующей ее решение в
соответствии с изложенной методикой.
Выполнить оценочные расчеты параметров ЦИС: шага интегрирования, разрядностей переменных и приращений для
формул численного интегрирования прямоугольников (m = 0) и
трапеций (m = 1), удовлетворяющих требованиям вычисления
функции.
Произвести сравнительные оценки характеристик параллельных ЦИС для симметричной и несимметричной форм
записи СУШ.
Представление результатов
Результаты предлагается представить в форме отчета, в
котором отразить:
а) Результаты исследования решаемых математических зависимостей: области определения, характер четности, периодичность, точки разрыва и пределы в них, точки пересечения
графика функций с осями координат, экстремумы и интервалы
возрастания/убывания, точки перегиба и интервалы выпуклости/вогнутости, асимптоты поведения функции на концах области определения, график функции.
б) Систему дифференциальных уравнений Шеннона с
начальными условиями.
в) Структурную схему параллельной интегрирующей системы воспроизведения заданной математической зависимости.
г) Расчет параметров ЦИС.
Контрольные вопросы
а) Какие функции можно воспроизводить в ЦИС?
б) Чем отличается симметричная форма записи СУШ от
несимметричной?
в) Как форма записи СУШ влияет на структуру параллельной ЦИС?
87
г) В чем отличие интеграла Стилтьеса от интеграла Римана?
д) Можно ли интеграл Стилтьеса привести к интегралу
Римана? Если можно, то как?
е) Какой интеграл используется при интегрировании
СУШ? Как это влияет на число реализуемых в ЦИС операций?
ж) Какой набор операций реализуется в ЦИС?
5.6.2 Задание № 2
Цель: Знакомство с математическими основами реализации ЦИС и структурно-математическими методами моделирования параллельных ЦИС.
Порядок выполнения
а) Выполнить ранжирование СУШ, с целью минимизации
числа величин подлежащих экстраполяции.
б) Составить алгоритмы и структурные схемы функциональных блоков ЦИС: цифровых интеграторов, реализующих
формулы численного интегрирования m = 0 и m = 1, экстраполяторов приращений, реализующих формулы экстраполяции
приращений v = m + 1.
в) Составить алгоритм работы параллельных ЦИС (разностно-квантованную СУШ в относительной форме записи) для
моделируемой математической зависимости.
г) Составить структурную схему моделирования параллельной ЦИС на ПЭВМ.
д) Написать и отладить программу моделирования параллельной ЦИС на ПЭВМ.
е) Моделируя процесс решения, получить графики изменения заданной функции арифметико-логическими методами
(эталонное решение) и на модели параллельной ЦИС.
ж) Определить шаг интегрирования h для m = 0 и m = 1,
обеспечивающий заданную погрешность вычисления  на интервале решения.
88
Оформление результатов
Результаты задания предлагается оформить в виде отчета,
где последовательно отразить все пункты выполненной работы.
Контрольные вопросы
а) Что такое экстраполяция переменных и приращений?
б) В каких случаях формулы экстраполяции используются
в моделях параллельных ЦИС?
в) Нужны ли экстраполяторы в параллельных ЦИС?
г) В чем физическое отличие разностных СУШ, разностно-квантованных и разностно-квантованных в относительной
форме записи?
д) Будут ли аппаратурные отличия параллельной ЦИС и
системы построенной путем замены функциональных блоков
модели параллельной ЦИС аппаратными модулями?
5.6.3 Задание№ 3
Цель: Исследование характеристик ЦИС. Исследование
влияния порядка формулы численного интегрирования m на
погрешность  при постоянном шаге интегрирования h.
Порядок выполнения
Используя модель параллельной ЦИС, полученной при
выполнении задания № 2, провести исследования зависимости
погрешности решения СУШ указанной в задании функции на
некотором интервале, от порядка используемых формул численного интегрирования. Исследования проводятся путем расчета и построения на ЭВМ графиков погрешности  на интервале от порядка формул численного интегрирования m = 0 и m
= 1 для hi = Const, i = 0,1,2,… . Определить величину влияния
методической погрешности на общую погрешность решения.
Сделать выводы по каждому проведенному исследованию, а
также по области устойчивой работы параллельной ЦИС относительно m и h при заданной погрешности  и степени влияния m на  в исследуемом диапазоне h.
89
Содержание отчета
В отчете должны быть приведены все полученные по результатам проведенных исследований графики погрешностей и
обоснованные выводы.
Контрольные вопросы
а) Во сколько раз уменьшается погрешность метода при
переходе от формулы численного интегрирования прямоугольников к формуле трапеций на шаге интегрирования, на интервале решения?
б) При каком соотношении шага интегрирования h0 и h1
формулы численного интегрирования m = 0 и m = 1 будут эквивалентны по точности?
в) Возрастет или уменьшится время вычисления заданной
математической зависимости на шаге решения, на интервале
при  = Const?
г) Во сколько раз изменится быстродействие и аппаратурные затраты при решении вашей задачи в ЦИС с одноразрядными по
 y qk ( i 1)
y
или многоразрядными приращениями?
5.6.4 Задание № 4
Цель: Исследование характеристик ЦИС. Исследование
влияния шага интегрирования h на погрешность  для формул
численного интегрирования m = 0 и m = 1 . Оценка влияния величины трансформированной погрешности и погрешности
квантования на результат решения.
Порядок выполнения
Используя модель параллельной ЦИС, полученной при
выполнении задания № 2, провести исследования зависимости
погрешности решения СУШ на выбранном интервале вычисления функции, от изменения шага интегрирования для частных
формул численного интегрирования: m = 0 и m = 1. Исследова-
90
ния проводятся путем расчета и построения на ЭВМ графиков
погрешности  решения СУШ на интервале от шага интегрирования h для m = 0 и m = 1. Определить границы и степень
влияния шага интегрирования на методическую погрешность
вычисления, как составляющей общей погрешности решения.
Сделать выводы по каждому проведенному исследованию.
Содержание отчета
В отчете должны быть приведены все полученные по результатам проведенных исследований графики погрешностей и
обоснованные выводы.
Контрольные вопросы
а) Во сколько раз должна измениться величина методической погрешности формулы численного интегрирования при
увеличении (уменьшении) шага интегрирования в четыре раза
для формул прямоугольников, трапеций, парабол (квадратичных, кубичных)?
б) В каком случае уменьшение шага интегрирования
уменьшает погрешность вычисления в ЦИС?
в) Какие составляющие общей погрешности вычисления
зависят от шага интегрирования?
г) Что эффективнее по затратам оборудования в вашем варианте для уменьшения времени решения на интервале с заданной погрешностью: использовать более простую формулу численного интегрирования при малом шаге интегрирования или
формулу высокого порядка при большем шаге интегрирования?
5.7 Примеры выполнения заданий
5.7.1 Моделирования функции y 
1
ax 2  b
,
с использованием методов ЦИС
Система уравнений Шеннона, согласно изложенной методики, представлена в таблице 5.7.
91
Таблица 5.7 –Преобразование функции y 
1
ax 2  b
к по-
рождающей системе дифференциальных уравнений К.Шеннона
Подстановка
СУШ
y  y ; dy   y dy ;
1) dy   y dy ;
2
2
11 3
2
11 3
y  x ; dy  1 ;
2) dy  y dy ;
1
1
y  ax 2  b ; dy  y dy ;
3
10 4
3
2
y  ax  b ; dy4  y7 dy8  dy6 ;
4
y  ax 2 ; dy  y dy ;
5
7 8
5
y  x 2 ; dy8  y9 dy1 ;
8
y  b ; dy  0 ; y  a ;
6
6
7
dy  0 ;
7
y  2 у ; dy  2dy  y dy ;
9
1
9
1 13 1
1 ; dy  y dy ;
y 
10
14 11
10 2 y
3
1
y 
 y2 ;
11 y
2
4
dy  2 y dy  y dy ;
11
2 2
12 2
3)
4)
5)
6)
7)
8)
9)
3 10 4
dy  dy  dy ;
4
5
6
dy  y dy ;
5
7 8
dy  y dy ;
8
1 9
dy  y dy ;
9
13 1
dy  y dy ;
10
14 11
dy  y dy ;
11 12 2
dy  y dy .
12
13 2
y  2y ;
12
2
dy  2dy  y dy ;
12
2
13 2
y  2 ; dy  0 ;
13
13
1
y   ; dy  0 .
14
14
4
92
Структурная схема параллельной ЦИС, воспроизводящая
1
функцию y 
в соответствии с СУШ, представленax 2  b
ной в таблице 5.7, показана на рисунке 5.4
dy3
И1
dy11
dy2
y11
dy1
И2
dy13
dy9
dy4
И3
y13
dy10
dy3
y10
dy9
И4
dy1
dy8
И5
y1
dy7
dy5
у7
∑
dy4
dy6
dy2
dy12
dy2
И6
dy11
И7
dy13
y12
dy12
y13
dy14
И8
dy10
dy11
y11
Рисунок 5.4 -Структурная схема параллельной ЦИС
1
воспроизводящая функцию y 
ax 2  b
Составляем разностную схему СУШ на основе первых
разностей и ранжируем уравнения СУШ:
dy  1
1
93
dy  y dy
9 13 1
dy  y dy
8 1 9
dy  y dy
5
7 8
dy  0
6
dy  dy  dy
4
5
6
dy  y dy
3
10 4
dy   y dy
2
11 3
dy  y dy
11 12 2
dy  y dy
10
14 11
dy  y dy
12
13 2
Для решения воспользуемся интерполяционными
формулами численного интегрирования по Стилтьесу:
а) На основе формулы прямоугольников:
y
1
1(i  1)
y
 y y
9(i  1)
13i 1(i  1)
y
 y y
8(i  1)
1i 9(i  1)
y
 y y
5(i  1)
7i 8(i  1)
y
y
6(i  1)
0
 y
 y
5(i  1)
6(i  1)
y
 y y
3(i  1)
10i 4(i  1)
y
 y y
2(i  1)
11i 3(i  1)
y
 y y
11(i  1)
12i 2(i  1)
y
 y y
12(i  1)
13i 2(i  1)
4(i  1)
94
б) На основе формулы трапеций:
y
1
1(i  1)
1
y
 y y
 y
y
9(i  1)
13i 1(i  1) 2 13(i  1) 1(i  1)
1
y
 y y
 y
y
8(i  1)
1i 9(i  1) 2 1(i  1) 9(i  1)
1
y
 y y
 y
y
5(i  1)
7i 8(i  1) 2 7(i  1) 8(i  1)
y
y
6(i  1)
4(i  1)
0
 y
 y
5(i  1)
6(i  1)
1
y
 y y
 y
y
3(i  1)
10i 4(i  1) 2 10(i  1) 4(i  1)
1
y
 y y
 y
y
2(i  1)
11i 3(i  1) 2 11(i  1) 3(i  1)
1
y
 y y
 y
y
11(i  1)
12i 2(i  1) 2 12(i  1) 2(i  1)
1
y
 y y
 y
y
12(i  1)
13i 2(i  1) 2 13(i  1) 2(i  1)
Для вычисления значения y
нам неизвестно зна2(i  1)
чение y
, а для вычисления y
неизвестно
11(i  1)
11(i  1)
значение y
.
2(i  1)
Вычисление неизвестных значений приращений переменных выполняется методом экстраполяции. Порядок
используемых в вычислении формул экстраполяции должен быть таким, чтобы замена приращений их экстраполированными значениями не привела бы к ухудшению методической погрешности. Это достигается когда порядок
формулы экстраполяции на единицу выше порядка формулы численного интегрирования. Так как для формулы
95
трапеции порядок погрешности n  3 , будем использовать
формулу экстраполяции с порядком погрешности n  4 :
y*
 4y  6y
 4y
 y
2(i  1)
2i
2(i  1)
2(i  2)
2(i  3)
*
y
 4y  6y
 4y
 y
11(i  1)
11i
11(i  1)
11(i  2)
11(i  3)
Отсюда, система уравнений К.Шеннона приобретает вид:
y
1
1(i  1)
1
y
 y y
 y
y
9(i  1)
13i 1(i  1) 2 13(i  1) 1(i  1)
1
y
 y y
 y
y
8(i  1)
1i 9(i  1) 2 1(i  1) 9(i  1)
1
y
 y y
 y
y
5(i  1)
7i 8(i  1) 2 7(i  1) 8(i  1)
y
0
6(i  1)
y
 y
 y
5(i  1)
6(i  1)
1
y
 y y
 y
y
3(i  1)
10i 4(i  1) 2 10(i  1) 4(i  1)
y*
 4y  6y
 4y
 y
2(i  1)
2i
2(i  1)
2(i  2)
2(i  3)
1
y
 y  y
 y
y *
11(i  1)
12i 2(i  1) 2 12(i  1) 2(i  1)
1
y
 y y
 y
y
2(i  1)
11i 3(i  1) 2 11(i  1) 3(i  1)
1
y
 y y
 y
y
12(i  1)
13i 2(i  1) 2 13(i  1) 2(i  1)
4(i  1)
Вычислим значение шага интегрирования. Для этого воспользуемся формулой: x  2  f m1  b
  , где
1(m1)
96
x - шаг интегрирования,
 - относительная погрешность,
- известные коэффициенты,
b
1(m1)
f - максимальная циклическая частота - f = sup|fэ max|.
В варианте задания использованы следующие данные:
a  20
b  50 , где
  10  7
a и b - известные коэффициенты
Для расчета шага интегрирования найдем fэ max:
f ý max 
y'
max
2 y max



1




2
 ax  b 

max
2
1
ax 2  b

1
 0.16
2
max
Для формул численного интегрирования прямоугольников
m  0 , отсюда,

10 7
x 

 1.4110 9
2  f  (a  b) 2  0.16  70
Для формул численного интегрирования трапеций m  1,
отсюда,
10 7
x 

 3.76 10 5
2
2
2  f   (a  b)
2  0.16  70

Выполним оценочный расчет разрядностей переменных
Воспользуемся формулой: n  ent log   1   1 ;
 2

97

n  ent log 10 7 

 2
 1

  1  ent23.25  1  24 .

Отсюда, разрядность переменных n  24 .
1
1

 10 7 ,
n
24
2
2
что должно удовлетворить требованиям решения задачи.
Тогда, инструментальная погрешность
Программа
Ниже приведен листинг программы имитирующей работу
ЦИС для математической зависимости y 
1
ax 2  b
. Про-
грамма обеспечивает вывод на экран пяти графиков функций:
график эталонного вычисления математической зависимости на
ПЭВМ арифметико-логическими методами, график вычисления
математической зависимости на модели ЦИС с использованием
метода численного интегрирования - прямоугольников, график
вычисления математической зависимости на модели ЦИС с использованием метода численного интегрирования - трапеций и
два графика ошибок для каждого из методов.
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
float f (float x);
int init ();
int x0 = 59; // x0, y0 - координаты
int y0 = 450; // начало координат в пикселах
float xn = 1; // начальное значение x
float xm = 20; // максимальное значение x
98
float hx = xm/(637-x0); // изменение x при шаге в один пиксел
float hy = f (xn)/(y0 - 2); // среднее изменение y при шаге в один
пиксел
int main() {
if (init () == 1) exit (1);
// Блок переменных для образца
float sx1 = x0 + xn/hx; // вычисляем пиксел, соответствующий
xn
float sy1 = y0 - f (xn)/hy;
float sx2 = sx1 + 1; // вычисляем пиксел, соответствующий xn
+ hx
float sy2 = y0 - f (xn + hx)/hy;
// Блок переменных для прямоугольников
float ry = f (xn);
float ry1 = y0 - ry/hy;
float ry11 = 60*xn;
float ry4 = -ry*ry;
float ry9 = ry4/2;
float ry8 = 1/(2*sqrt (30*xn - 25));
float ry5 = -2*ry;
float rdy11 = 60*hx;
float rdy7 = rdy11*hx;
float rdy3 = ry8*rdy7;
float rdy = ry4*rdy3;
float rdy4 = ry5*rdy;
// Блок переменных для трапеций
float ty = f (xn);
float ty1 = y0 - ty/hy;
float ty11 = 60*xn;
float ty4 = -ty*ty;
float ty9 = ty4/2;
float ty8 = 1/(2*sqrt (30*xn - 25));
float ty5 = -2*ty;
float tdy11 = 60*hx;
99
float tdy7 = tdy11*hx;
float tdy3 = ty8*tdy7;
float tdy = ty4*tdy3;
float tdy4 = ty5*tdy;
// Блок переменных для ошибки по прямоугольникам
float erry1 = y0 - fabs (ry1 - sy1);
// Блок переменных для ошибки по трапециям
float erty1 = y0 - fabs (ty1 - sy1);
for (int i = 2; sx2 <= 638; i++) {
// Блок построения образца
setcolor (LIGHTBLUE);
line (sx1, sy1, sx2, sy2); //чертим первый отрезок, соответствующий//точкам (xn; f (xn)), (xn + hx; f (xn + hx))
// Блок построения по прямоугольникам
setcolor (MAGENTA);
ry11 += rdy11;
rdy7 = ry11*hx;
float rdy9 = rdy4/2;
ry9 += rdy9;
float rdy8 = ry9*rdy3;
ry8 += rdy8;
float rdy5 = -2*rdy;
ry5 += rdy5;
rdy4 = ry5*rdy;
ry4 += rdy4;
rdy3 = ry8*rdy7;
float rdy = ry4*rdy3;
ry += rdy;
int ry2 = y0 - ry/hy; // Собственно построение
line (sx1, ry1, sx2, ry2);
// Блок построения ошибки прямоугольников
setcolor (LIGHTCYAN);
float erry2 = y0 - fabs (ry2 - sy2);
100
line (sx1, erry1, sx2, erry2);
ry1 = ry2;
erry1 = erry2;
// Блок построения по трапециям
setcolor (GREEN);
ty11 += tdy11;
tdy7 = (ty11 + tdy11/2)*hx;
float tdy9 = tdy4/2;
ty9 += tdy9;
float tdy8 = (ty9 + tdy9/2)*tdy3;
ty8 += tdy8;
float tdy5 = -2*tdy;
ty5 += tdy5;
tdy4 = (ty5 + tdy5/2)*tdy;
ty4 += tdy4;
tdy3 = (ty8 + tdy8/2)*tdy7;
tdy = (ty4 + tdy4/2)*tdy3;
ty += tdy;
int ty2 = y0 - ty/hy;// Собственно построение
line (sx1, ty1, sx2, ty2);
// Блок построения ошибки по трапециям
setcolor (YELLOW);
float erty2 = y0 - fabs (ty2 - sy2);
line (sx1, erty1, sx2, erty2);
ty1 = ty2;
erty1 = erty2;
sx1 += 1; // сдвигаем "экранные иксы"
sx2 += 1;
sy1 = sy2; // сдвигаем "экранный y" образца
sy2 = y0 - f (xn + i*hx)/hy; // вычисляем следующий y образца,
соответствующий значению f от (текущего x плюс hx)
}
getch ();
return (0);
101
}
float f (float x) {
return 1/sqrt(30*x*x-25);
}
int init () {
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
initgraph (&gdriver, &gmode, "f:\\bc\\bgi");
/* read result of initialization */
errorcode = graphresult ();
if (errorcode != grOk) { /* an error occurred */
printf ("Graphics error: %s\n", grapherrormsg(errorcode));
printf ("Press any key to halt:");
getch ();
return (1);
/* return with error code */
}
setcolor (LIGHTGRAY);
// чертим оси координат
line (x0, y0, x0, 0);
line (x0, y0, x0, 450);
line (x0, y0, 59, y0);
line (x0, y0, 639, y0);
setcolor (WHITE);
// рисуем стрелочки
line (630, y0 - 2, 639, y0); // на оси Ox
line (630, y0 + 2, 639, y0);
line (x0 - 2, 9, x0, 0); // на оси Oy
line (x0 + 2, 9, x0, 0);
// проставляем координатные отрезки на оси Ox
outtextxy (x0 - 10, y0 + 5, "0");
102
outtextxy (632, y0 + 5, "x");
char *buf;
for (int i = 1; i <= 9; i++) {
line (x0 + (639 - x0)*i/10, y0, x0 + (639 - x0)*i/10, y0 + 4);
outtextxy (x0 + (639 - x0)*i/10, y0 + 5, gcvt (xm*i/10, 2, buf));
}
// проставляем координатные отрезки на оси Oy
outtextxy (x0 - 10, 0, "y");
for (i = 1; i <= 9; i++) {
line (x0, y0 - y0*i/10, x0 - 4, y0 - y0*i/10);
outtextxy (x0 - 59, y0 - y0*i/10, gcvt (f (xm)*i/10, 2, buf));
}
setcolor (LIGHTRED);
// чертим асимптоту
line (x0 + sqrt (5.0/6)/hx, 0, x0 + sqrt (5.0/6)/hx, 450);
// рисуем пояснения
setcolor (MAGENTA);
line (514, 3, 543, 3);
outtextxy (545, 0, " - rect");
setcolor (GREEN);
line (514, 13, 543, 13);
outtextxy (545, 10, " - trap");
setcolor (LIGHTBLUE);
line (514, 23, 543, 23);
outtextxy (545, 20, " - smpl");
setcolor (LIGHTCYAN);
line (514, 33, 543, 33);
outtextxy (545, 30, " - err rect");
setcolor (YELLOW);
line (514, 43, 543, 43);
outtextxy (545, 40, " - err trap");
return (0);
}
103
5.7.2 Программа моделирования функции
y  3 cos t
, с использованием методов ЦИС
Расчет параметров ЦИС:
1) Соотношение порядков формул
а) m = 0 (для формулы прямоугольников)
б) m = 1 (для формулы трапеций)
2) Экстраполяция приращений   1  m  2
а)   1 (для формулы прямоугольников)
б)   2 (для формулы трапеций)
3) Расчет f э . Данный параметр является max скоростью
изменения функций. На интервале x  [0, 0,08] все
функции, входящие в состав СУШ являются гладкими,
следовательно f э является частотой периодических
функций, входящих в СУШ, и f э = 35 Гц.
4) Шаг интегрирования (h  2  f э ) m 1  
а) h  10 9 (для формулы прямоугольников)
б) h  0,5 10 5 (для формулы трапеций)
5) Расчет разрядной сетки интегратора
а) Разрядная сетка для представления значения функции
2 22  10 7 , n = 22
б) Разрядная сетка для представления приращений
26  35 , n = 6
в) Разрядная сетка для представления остатка
22  6  22  6
6) Расчет методической погрешности M  bm 1  h  y p ( )
а) М = 35 107 (для формулы прямоугольников)
б) М = 3 10 8 (для формулы трапеций)
104
Код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, StdCtrls, ExtCtrls, TeeProcs, Chart,
TeeFunci;
type
TForm1 = class(TForm)
Polotno: TChart;
DrowGraph: TButton;
initial: TLineSeries;
integral: TLineSeries;
stepOfIteration: TEdit;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
Button1: TButton;
model: TLineSeries;
remainder: TCheckBox;
errorGraph: TLineSeries;
procedure DrowGraphClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
105
{ Public declarations }
end;
var
Form1: TForm1;
integ,stepOfIterationReal,temp1:real;
arrayPointX : array[1..100] of real;
arrayPointY : array[1..100] of real;
buf:array [1..6] of byte;
error:integer;
workModeRemainder:Boolean;
newValue,oldValue : array[1..15] of double;
integratorsResults, functionValue : array [1..15] of double;
implementation
uses Math;
{$R *.dfm}
const
f=35;
length=1 ;
beginPoint = 0;
magnification = 1000;
// n=2;
maskN=000001;
maxYValues = 32;
w=70*pi;
function y3(x :real):real ;
begin
y3:=cos(w*x);
//functionValue[3]:=functionValue[3] + x;
//y3:=functionValue[3];
end;
function y5():real ;
begin
y5:=1/3;
106
end;
function y2(x :real):real;
var
temp:real;
begin
temp:= cos(w*x);
if temp>=0 then
y2:=exp((1/3)*ln(abs(temp)))
else
y2:=-exp((1/3)*ln(abs(temp)));
end;
function y11(x :real):real ;
begin
y11:=sin(w*x);
//functionValue[11]:=functionValue[11] + x;
//y11:=functionValue[11];
end;
function y8(x :real):real ;
var
temp:real;
begin
temp:= y2(x) ;
if not(temp=0) then
y8:=2/temp
else y8:=0;
//functionValue[8]:=functionValue[8] + x;
//y8:=functionValue[8];
end;
function y9():real ;
begin
y9:=2;
end;
function y4(x :real):real ;
var
temp:real;
begin
temp:= (3*sqr(y2(x))) ;
if not(temp=0) then
107
y4:=1/temp
else
y4:= 0;
//functionValue[4]:=functionValue[4] + x;
//y4:=functionValue[4];
end;
function Intgrator(x:real; i:integer) :real;
begin
integratorsResults[i]:= integratorsResults[i] +
+ x*stepOfIterationReal;
Intgrator:= integratorsResults[i];
end;
procedure bullet7(x:real);
begin
newValue[10]:=w*Intgrator(oldValue[1],7);
end;
procedure bullet6(x:real);
begin
//newValue[11]:=y3(oldValue[3])*Intgrator(oldValue[10],6);
newValue[11]:=y3(x)*Intgrator(oldValue[10],6);
end;
procedure bullet5(x:real);
begin
//newValue[3]:=y11(oldValue[11])*Intgrator(oldValue[10],5);
newValue[3]:=y11(x)*Intgrator(oldValue[10],5);
end;
procedure bullet3(x:real);
begin
//newValue[6]:=y8(oldValue[8])*Intgrator(oldValue[2],3);
newValue[6]:=y8(x)*Intgrator(oldValue[2],3);
end;
procedure bullet4(x:real);
begin
newValue[8]:=y9()*Intgrator(oldValue[2],4);
end;
procedure bullet2(x:real);
108
begin
newValue[4]:=y5()*Intgrator(oldValue[6],2);
end;
procedure bullet1(x:real);
begin
//newValue[2]:=y4(oldValue[4])*Intgrator(oldValue[3],1);
newValue[2]:=y4(x)*Intgrator(oldValue[3],1);
end;
procedure TForm1.DrowGraphClick(Sender: TObject);
var
x,e:real;
i,j:integer;
begin
for i:=2 to 15 do begin
newValue[i]:=0;
oldValue[i]:=0;
integratorsResults[i]:=0;
end;
x:=beginPoint;
while x<length do begin
bullet1(x);
bullet2(x);
bullet3(x);
bullet4(x);
bullet5(x);
bullet6(x);
bullet7(x);
for i:=1 to 15 do begin
oldValue[i]:=newValue[i];
end;
e:=e+oldValue[2];
initial.AddXY(x,e);
x:=x+ stepOfIterationReal;
end;
end;
end;
109
procedure TForm1.Button1Click(Sender: TObject);
begin
{if (stepOfIterationReal <> 0) then
// повторное интегрирование
memo1.Lines.Add('S='+FloatToStr(integratorRectangle(integral)));
}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stepOfIterationReal:=0;
end;
end.
РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ
Результаты моделирования представлены графиком вывода
значений Dy3, показанного на рисунке 5.5.
Рисунок 5.5 - Вывод графика Dy3
110
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. ТОП 500. Список 500 самых мощных компьютеров
мира. http://www.top500.org/. (20.12.2008г.).
2. SPEC CPU2000 Development. http://www.spec.org/
osg/cpu2000/.
3. Каган Б.М. Электронные вычислительные машины и
системы: Учеб. пособие для вузов. – М.: Энергоатомиздат,
1985. - 552 с., ил.
4. Воеводин В.В. Вычислительная математика и структура алгоритмов. – М.: МГУ, 2006.-113 с. Ил.
5. Flynn M. Some Computer Organizations and Their Effectiveness. – IEEE Trans. on Computers, Sept., 1972.
6. Jouppi N. Superscalar versus Superpipelined Machines. –
Computer Archetecture News, June, 1988.
7. Столлингс В. Структурная организация и архитектура
компьютерных систем, 5-е изд. – М.: Издательсий дом «Вильямс», 2002. – 896 с. – ISBN 5-8459-0262-2.
8. El-Rewini H., Abd-El-Barr M. Advanced Computer Architecture and Parallel Processing. John Willey & Sons, New Jersey,
2005. – 272 p. – ISBN 0-471-46740-5.
9. Таненбаум Э. Архитектура компьютера. 4-е изд. – СПб.:
Питер, 2003. – 704 с. – ISBN 5-318-00298-6.
10.Geist A., Beguelin A., Dongarra J., Jiang W., Manchek R.,
Sunderam V. PVM: Parallel Virtual Machine, A Users' Guide and
Tutorial for Networked Parallel Computing. MIT Press, Massachusetts, 1994. – 176 p. – ISBN 0-262-57108-0.
11.Официальный веб-ресурс: http://www.csm.ornl.gov/pvm/
12.Snir M., Otto S., Huss-Lederman S., Walker D., Dongarra
J. MPI: The Complete Reference Volume 1. MIT Press, Massachusetts, 1998. – 448 p. – ISBN 0-262-69215-5.
13.Snir M., Otto S., Huss-Lederman S., Walker D., Dongarra
J. MPI: The Complete Reference Volume 2 – The MPI-2 Exten-
111
sions. MIT Press, Massachusetts, 1998. – 363 p. – ISBN 0-26257123-4.
14.Официальный веб-ресурс: http://www.mpi-forum.org/
15.Каляев А. В. Теория интегрирующих машин и
структур. - М.: Сов. радио, 1970. -.659 с., ил.
112
ОГЛАВЛЕНИЕ
Введение…………………………………………….………..
3
1. Основные понятия высокопроизводительных
вычислений……………………………………..................
4
1.1 Характеристики и требования
высокоскоростной обработки…………………….…. 4
1.2 Способы повышения скорости обработки………..… 8
2 Взаимосвязь структур алгоритмов и исполнителей…..… 14
3 Структурная организация высокопроизводительных
вычислительных систем…………………………………. 17
3.1 Классификация ВС по Флину……………………….. 18
3.2 Параллелизм на уровне команд……………………... 21
3.3 Параллелизм на уровне процессоров……………….. 35
4 Параллельные алгоритмы в задачах сортировки………... 53
4.1 Проблемы сортировки на вычислительных
машинах параллельного действия………………….. 54
5 Методы построения распределенных алгоритмов на
основе понижения порядка производной………………. 64
5.1 Переход от произвольной математической
зависимости к системам дифференциальных
уравнений…………………………………………….. 64
5.2 Методы численного интегрирования по
Стилтьесу……………………………………………... 68
5.3 Разностно-квантованные схемы интегрирования
уравнений Шеннона в относительной форме
записи…………………………………………………. 72
5.4 Примеры реализации формальных методов
перехода от произвольной математической
зависимости к системам дифференциальных
уравнений……………………………………………… 75
5.5 Разностно-квантованные схемы интегрирования.
Расчет основных параметров ЦИС…………………. 81
5.6 Задания для самостоятельного выполнения………... 85
5.7 Примеры выполнения заданий………………………. 91
Библиографический список……………………………… 111
113
Download