Параллельные вычисления и верификация программ

Список литературы

1. Рыжов А.П. Модели поиска информации в нечеткой среде. М., Издательство центра прикладных исследований при механико-математическом факультете МГУ, 2004. 96с.

2. Токарев В.Л. Теория обеспечения рациональности решений. Тула: Изд-во ТулГУ, 2000. 120 с.

I.N. Nabrodova

PARAMETRICAL OPTIMIZATION OF INDISTINCT MODEL

Method of parametrical optimization of the constructed linguistic model on training sample of the data, providing increase of adequacy of turning-out model created for decisionmaking support are described.

Key words: linguistic model, the linguistic variable term-sets.

Получено 17.05.12

УДК 004.415.52

Е.И. Дараган, асп.,

ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ И ВЕРИФИКАЦИЯ ПРОГРАММ

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

Ключевые слова: верификация, программное обеспечение, сети Петри, параллельные вычисления.

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

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

Вместе с этим, с повышение вычислительных возможностей, ужесточаются требования к качеству программного обеспечения. Значительное число программно-аппаратных комплексов окружающих современного человека представляют собой системы реального времени. Для них характерно не только свойство гарантированности выполнения заложенных в них алгоритмов, но и, что не менее критично, гарантированное время реакции системы на изменение входных параметров. В соответствии с этим определим понятие ошибки для таких программ. В [1] ошибка определяется, как неспособность системы действовать в соответствии с исходным контрактом или перечнем требований пользователей. Данное определение имеет ряд недостатков. Если, согласно требованиям пользователя, система должна обеспечивать среднее время между отказами из-за ошибки в программном обеспечении на уровне 100 часов, а для действующей системы этот показатель равен 150 часам, система все же имеет ошибки (поскольку ее среднее время между отказами конечно), даже несмотря на то, что она превышает требование пользователя. Кроме того, письменно зафиксированные и сформулированные требования редко детализированы настолько, чтобы описывать желаемое поведение программного обеспечения реального времени при всех возможных параметрах входных воздействий. Основываясь на вышесказанном, можно сформулировать более общее определение ошибки: в программном обеспечении имеется ошибка, если оно не выполняет того, что указано в его спецификации. Отказ программного обеспечения - это проявление ошибки в нем.

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

Широко используемым подходом к автоматизации верификации программного обеспечения является метод проверки на моделях [2]. Для анализируемой программы строится формальная модель, которая реализу-

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

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

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

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

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

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

На данный момент широкое распространение получила технология применения графических процессоров (GPU) для выполнения паралель-ных вычислений. Вычисления на GPU или GPGPU заключаются в использовании GPU для универсальных вычислений в области науки и проектирования. Вычисление на GPU сводится к использованию CPU и GPU с разнородной выборкой между ними, а именно: последовательную часть программ берет на себя CPU, в то время как трудоёмкие вычислительные задачи переносятся на GPU. Благодаря этому происходит распараллеливание задач, которое приводит к ускорению обработки информации и уменьшает время выполнения работы, система становиться более производительной и может одновременно обрабатывать большее количество задач, чем ранее. Однако, чтобы добиться такого успеха одной лишь аппаратной поддержкой не обойтись, в данном случае необходима поддержка ещё и программного обеспечения, что бы приложение могло переносить наиболее трудоёмкие вычисления на GPU. Эффективность использования пара-лельных вичислений демонстрируют резулльтаты проведенного экспере-мента (Рис. 1). Обе оси находятся на логарифмических масштабах, ось X, показывает векторы, размерностью от одной тысячи до одного миллиона элементов, ось Y - время выполнения сортировки. Синим маркером обозначен график зависимости времени выполнения операций от размера вектора входных значений на GPU; фиолетовый маркер - время, используемое центральным процессором (CPU) на выполнения операций сортировки данных.

Рис.1. Графики зависимости времени выполнения сортировки массивов данных с использованием ресурсов CPU и GPU

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

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

Среди существующих методов описания и анализа параллельных систем выделяется подход, основанный на использовании сетевых моделей. При построении моделей сложных систем со множеством состояний и переходов обязательным условием остаётся учёт таких её свойств как: случайность времени выполнения операции, возможность одновременного выполнения групп операторов, а также стохастический характер переходов. Для анализа и решения задач моделирования процесса функционирования динамических систем предлагается использовать сети Петри [3] (Рис. 2), которые позволяют представлять и изучать в динамике поведение системы параллельных взаимодействующих процессов программы.

Рис 2. Сеть Петри

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

сети описывает состояние сети в каждый текущий момент времени и определяется системой условий.

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

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

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

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

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

1. Майерс Г. Надежность программного обеспечения. - М.: Мир,

, где

£п7 = 0

Список литературы

1980.

2. Кларк Э.М., Грамберг О., Пелед Д. Верификация моделей программ: Model Checking. Пер. с англ./Под ред. Р. Смелянского. — М.:МЦНМО, 2002. — 416 с.: ил.

3. Ларкин Е.В., Сабо Ю.И. Сети Петри-Маркова и отказоустойчивость авионики. — Тула: Тул. гос. ун-т., 2004. — 208 с.

4. Ивутин А.Н., Дараган Е.И. Применение сетей Петри и метода построения графа информационных зависимостей для решения задач верификации и распараллеливания вычислений // Известия ТулГУ. Серия: Технические науки. Вып. 5. — Тула: Изд. ТулГУ, 2011.

E.I. Daragan

PARALLEL CALCULATIONS AND VERIFICATION OF PROGRAMS

The main features of the process of verification of program code, describes the main approaches to solving problems of verification. Held a brief overview of parallel computing tasks.

Key words: verification, software, Petri nets, parallel computing.

Получено 17.05.12

УДК 004.415.52

А.Н. Ивутин, канд. техн. наук, доц.,

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

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

Ключевые слова: алгоритм, параллельные вычислительные системы, управляющий граф.

Основным направлением развития компьютеров является повышение их быстродействия. Причем традиционно это повышение для персональных компьютеров происходило экстенсивными методами. Однако с

101