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

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

Литература

1. Максимов Д.В., Рукшин С.Е. Достоинства и недостатки интернет-олимпиад / В сб.: Некоторые актуальные проблемы

современной математики и математического образования. СПб: БАН, 2010. С. 140-142.

2. Рукшин С.Е. Классификация типов научных соревнований с автоматической обработкой решений // Науч.-технич. вест. СПбГУ ИТМО. 2010. № 3. С. 121-125.

3. Башмаков М.И., Поздняков С.Н., Резник Н.А Информационная среда обучения. СПб: «Свет», 1997.

4. Ivanov S., Pozdnyakov S. Computers in productive teaching of mathematics or how information technologies can support intellectual freedom of the learner. The 10-th International Congress on Mathematical Education, National presentation: Russia, Selected materials, Copenhagen, Denmark, July 4-11, 2004, pp. 115-124.

5. Рукшин С.Е. О технологиях автоматической проверки решений математических задач / В сб.: Некоторые актуальные проблемы современной математики и математического образования. СПб: БАН, 2010. С. 142-147.

УДК 004.942

ПОСТРОЕНИЕ СХЕМНОГО РЕШЕНИЯ ПО АЛГОРИТМИЧЕСКОМУ ПРЕДСТАВЛЕНИЮ ВЫЧИСЛИТЕЛЬНОГО ПРОЦЕССА

В.А. Тихомиров, д.т.н.; Т.И. Козырев; С.Г. Тимофеев

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

Ключевые слова: система моделирования, сложные информационные системы, ПЛИС.

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

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

зование вычислительных систем. Важнейшим направлением повышения производительности вычислительных систем являются архитектурные методы.

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

Все это приводит к тому, что высокую реальную производительность кластерная архитектура демонстрирует в основном только при решении

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

Это обусловлено противоречием, вытекающим из неадекватности конкретной архитектуры многопроцессорной системы и внутренней структуры решаемой задачи. Снять его можно, разработав системы с реконфигурируемой архитектурой, изменяемой от задачи к задаче в отличие от многопроцессорных вычислительных систем с жесткой архитектурой. Таким образом, реализация концепции реконфигурируемых архитектур обеспечивает возможность адаптации архитектуры вычислительной системы под структуру решаемой проблемы, а также высокую реальную производительность многопроцессорной вычислительной системы, близкую к пиковой, на широком классе задач (в том числе при решении сильносвязанных задач) и практически линейный рост производительности при увеличении числа процессоров в системе [1].

Специалисты, использующие программируемые логические интегральныге схемыг (ПЛИС), считают, что применение данных кристаллов обеспечивает более чем на два порядка большую производительность систем в сравнении с реализованными на стандартных микропроцессорах системами с аналогичной потребляемой мощностью и стоимостью [2]. Особенно целесообразно применение данного подхода при создании встраиваемых бортовых вычислительных систем. Следует отметить, что концепция построения ре-конфигурируемых вычислительных структур открывает широкие перспективы использования ПЛИС в качестве элементной базы для создания больших вычислительных полей, в рамках которых могут создаваться проблемно-ориентированные вычислительные системы, адаптируемые под структуру решаемой задачи.

Возможность создания таких систем обеспечит максимум эффективности при решении конкретной вычислительной задачи. Однако это только одна сторона медали. Другую формируют про-

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

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

Примерами могут служить задачи математической физики, цифровой обработки сигналов, криптографии и т.д.

Рассмотрим потоковую задачу, сформулированную следующим образом: существует некоторое упорядоченное множество векторов данных каждый элемент которого должен быть обработан по фиксированному алгоритму А; задача потоковой обработки заключается в преобразовании множества (потока) векторов входных данных во множество (поток) векторов выходных данных В простейшем случае решение подобных задач связано с применением последовательной вычислительной системы, основным элементом которой является процессор Р. Для этого необходимо предварительно запрограммировать процессор на последовательное выполнение всех операций алгоритма и затем подать на вход последовательность векторов. Считая, что время обработки одного вектора на процессоре Р равно РА, время, затраченное на последовательную обработку всего потока входных данных, равно п*РА. Самым очевидным путем сокращения времени обработки потока входных векторов является распараллеливание процесса обработки.

В простейшем случае параллельный способ подразумевает наличие нескольких процессоров (Р1=Р2=.=Рт=Р), каждый из которых может работать независимо от других. В этом случае время решения, то есть время обработки всего множества векторов входных данных, будет равно (п/т)*РА, то есть сократится в т раз.

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

А=А1;А2...Ат и в системе имеется несколько процессоров, соединенных последовательно, причем каждый из процессоров реализует определенную стадию общего алгоритма. Время обработки массива данных на конвейере процессоров будет зависеть от времени работы самой медленной ступени конвейера (обозначим ее РаО, тогда время обработки всего потока данных будет п*Рдт

Существенным преимуществом конвейерного способа обработки перед параллельным является сокращение числа входных и выходных информационных каналов. Рассмотренные способы оптимизации применимы для схемного представления

1. Граф временной зависимости операций вычислительного процесса

вычислительной задачи. В рамках существующей парадигмы работы вычислительных систем на следующем шаге необходимо отобразить схемное представление вычислительной задачи в алгоритмическое. Для этого предлагается методика, позволяющая транслировать языки программирования высокого уровня в языки описания аппаратуры.

Сущность ее заключается в устранении недостатка, связанного с применением графа специального вида. Так, исходный текст на языке программирования высокого уровня, реализующий алгоритм, принято неявно описывать графом вычислительного процесса, определяющим отношение временной зависимости операций алгоритма: Gw=<O, W, 1п, ОШ>, где О - множество операций нижнего уровня (они представляются операторами языка программирования); W - множество ребер, соответствующих последовательности выполнения операций; 1п - начальная операция; ОШ -множество всех возможных завершающих операций.

Недостаток подобного представления в том, что вычислительная система, построенная на основе такого графа, не может начать выполнение операции до тех пор, пока не закончится выполнение предыдущей, что соответствует последовательному выполнению алгоритма. Если определить на том же множестве О информационную зависимость операций, то можно получить представление процесса, отражающее граф информационной зависимости операций Gd. Такое представление вычислительного процесса определяет последовательность выполнения операций, зависящую от данных, необходимых для выполнения операции, и является исходным для построения схемного описания вычислительной системы для реконфигурируемой вычислительной системы. Построенный граф информационной зависимости процесса вычисления обладает двумя свойствами:

• является максимально детальным для описания алгоритма на языке программирования высокого уровня, так как вершины представляют собой неделимые операции, предоставляемые языком программирования;

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

При описании построенного графа на языке описания аппаратуры вершины графа принимают вид аппаратных модулей, в которых определены входные и выходные шины данных, а ребра являются самими шинами данных, через которые проходит информация по вычислительной системе. Архитектура построенной по такому графу вычислительной системы полностью адекватна архитектуре процесса вычисления, что обеспечивает максимальную производительность реконфигури-руемого вычислителя. Если полученное схемное

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

• построение графа временной зависимости по алгоритмическому описанию вычислительного процесса;

• построение графа информационной зависимости на основе графа временной зависимости;

• генерация схемного решения на основе графа информационной зависимости.

Граф временной зависимости строится по исходному коду на языке высокого уровня по следующей схеме: проводятся препроцессорная обработка, лексический, синтаксический и семантический анализы исходного текста, в результате чего строится дерево синтаксического разбора. Эти операции успешно осуществляются с помощью классического компилятора, описанного в [3] и имеющего модульную архитектуру, в которой каждая операция выполняется отдельным модулем. Модули препроцессора, лексического и синтаксического анализаторов зависят от исходного языка программирования.

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

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

деляются операции, а затем определяются связи, отражающие передачу управления между операциями.

Детализацию методики осуществим на примере реализации алгоритма решения квадратного уравнения. На первом шаге описывается алгоритм на псевдоязыке.

Программа РешениеКвадратногоУравнения;

Начало

{ вводится значение параметра а } ПолучитьПараметр (а); { вводится значение параметра Ь } ПолучитьПараметр (Ь); { вводится значение параметра с } ПолучитьПараметр (с); { вычисляется дискриминант } Дискриминант = Ь*Ь-4*а*с;

{ выгаисляется квадратный корень из дискриминанта } Переменная! = КвадратнышКорень (Дискриминант);

О ©

0 ©

©

©

Считывание значения «Ьз 1

Вычисление значения

Считывание значения «а»

I

Вычисление значения

Рис. 2. Граф информационной зависимости операций вычислительного процесса

{ выгаисляется первый корень } Ответ1 = (-Ь - Переменная1)/(2*а); { Вытод первого корня } Вытести (Ответ1); { выгаисляется второй корень } Ответ2 = (-Ь + Переменная1)/(2*а); { Вытод второго корня } Вытести (Ответ2); Конец.

На втором шаге строится граф Gw (рис. 1), реализующий приведенный псевдокод.

Далее построенный граф процесса вычисления отражает последовательность выполнения действий алгоритма. У каждой операции есть входные и выходные данные, соответствующие передаче управления блоку и завершению его работы. Затем осуществляется переход от графа временной зависимости Gw к графу информационной зависимости Gd. При этом акцент смещается с потока управления на поток данных, что позволяет начать выполнение действия в любой момент после появления всех необходимых данных. Переход реализуется следующим алгоритмом: 1) определяются входные данные; 2) на первый слой графа помещаются операции, зависящие только от входных данных; 3) на каждый следующий слой помещаются операции, информационно зависящие от исходных данных и результов выполнения операций на предыдущих слоях.

Пример графа Gd, построенного по графу Gw, представлен на рисунке 2.

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

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

Литература

1. Каляев А.В., Левин И.И. Модульно-наращиваемые многопроцессорные системы со структурно-процедурной организацией вычислений. М.: Янус-К, 2003. 380 с.

2. Левин И.И. Методы и программно-аппаратные средства параллельных структурно-процедурных вычислений. Дисс. ... докт. техн. наук. Таганрог, 2004. 363 с.

3. Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Compilers Principles, Techniques, and Tools. 2006.

УДК 681.3.06

ОПТИМАЛЬНОСТЬ СТРУКТУРИРОВАНИЯ ПРОГРАММНЫХ РЕСУРСОВ ПРИ КОНВЕЙЕРНОЙ РАСПРЕДЕЛЕННОЙ ОБРАБОТКЕ

П.А. Павлов, к.ф.-м.н.

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

Ключевые слова: распределенный процесс, программный ресурс, однородная система, асинхронный и синхронный режимы, структурирование, ограниченный (неограниченный) параллелизм, характеристический набор, эффективность, оптимальность.

В различных областях человеческой деятельности постоянно приходится сталкиваться с большими задачами, эффективное решение которых связано с распараллеливанием процессов вычислений. Решение подобных задач объединяет в единое целое сведения из таких областей, как архитектура компьютеров и вычислительных систем, системное программирование и языки программирования, различные методы обработки ин-

формации и т.д. [1]. С появлением и активным использованием масштабируемых систем многие проблемы параллельных вычислений приходится переосмыслить, по-новому взглянуть на принципы организации вычислений, на создание эффективного аппаратного, алгоритмического и программного обеспечения многопроцессорный систем (МС), на обеспечение однозначности результата выполнения программ, на эффективное пла-