Научная статья на тему 'Создание библиотеки сортировки массива в параллельном режиме с применением низкоуровневого языка программирования'

Создание библиотеки сортировки массива в параллельном режиме с применением низкоуровневого языка программирования Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
202
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
НИЗКОУРОВНЕВОЕ ПРОГРАММИРОВАНИЕ / АССЕМБЛЕР / ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ / СОРТИРОВКА / LOW-LEVEL PROGRAMMING / ASSEMBLER / PARALLEL COMPUTING / SORTING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Путинцев Илья Александрович, Варданян Андраник Эдуардович, Красильников Игорь Владимирович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Путинцев Илья Александрович, Варданян Андраник Эдуардович, Красильников Игорь Владимирович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

CREATING A SINGLE LIBRARY LIBRARY IN PARALLEL REGIME WITH THE USE OF LOW-LEVEL PROGRAMMING LANGUAGE

The processing of large digital data since the beginning of the new millennium requires more and more attention every day. An endless stream of new information replenishing the server at a speed of several gigabits per second is able for a few days to close access to any information by simply hiding them in an unprocessed data structure. Any data structure begins with sorting, and continuously replenished must sort as quickly as possible.

Текст научной работы на тему «Создание библиотеки сортировки массива в параллельном режиме с применением низкоуровневого языка программирования»

Путинцев И.А., Варданян А.Э., Красильников И.В.

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

Путинцев Илья Александрович, студент 1 курса магистратуры кафедры информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва

Варданян Андраник Эдуардович, студент 1 курса магистратуры кафедры информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва

Красильников Игорь Владимирович, кандидат технических наук, доцент кафедры информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва, e-mail: Российский химико-технологический университет им. Д.И. Менделеева, Москва, Россия 125480, Москва, ул. Героев Панфиловцев, д. 20

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

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

CREATING A SINGLE LIBRARY LIBRARY IN PARALLEL REGIME WITH THE USE OF LOW-LEVEL PROGRAMMING LANGUAGE

Putintsev I.A., Vardanyan A.E., Krasilnikov I.V

D. Mendeleev University of Chemical Technology of Russia, Moscow, Russia

The processing of large digital data since the beginning of the new millennium requires more and more attention every day. An endless stream of new information replenishing the server at a speed of several gigabits per second is able for a few days to close access to any information by simply hiding them in an unprocessed data structure. Any data structure begins with sorting, and continuously replenished must sort as quickly as possible.

Keywords: low-level programming, assembler, parallel computing, sorting.

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

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

Так как сегодня наиболее популярной операционной системой для компьютеров является линейка продуктов под названием Windows от американского производителя Microsoft, то и разработка библиотеки велась под данную систему. Разработанная библиотека является динамической

(DLL). Динамическая библиотека - сборник подпрограмм позволяющий программисту

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

Для выполнения сортировки выбран метод «Быстрой сортировки». Метод быстрой сортировки основывается на перестановке элементов, расположенных максимально далеко друг от друга, разбивая заданный массив на две части относительно основного (опорного) элемента последовательности данных. При выполнении метода данные располагаются по разные стороны от опорного значения и продолжают перестанавливаются до тех пор пока массив не будет полностью отсортирован.

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

Библиотека параллельной сортировки

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

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

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

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

Было решено добавить ещё один метод сортировки массива под названием «Раскидка». В результате выполнения этого метода решается наиболее важная задача параллельных вычислений -гонка потоков.

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

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

Самый важный момент в работе «Раскидки» -выбор правильного среднего элемента данных. Если выбрать просто тот, что находится посередине, то может оказаться что распределение произойдет относительно очень маленького или очень большого значения, это приведёт к тому, что вся сортировка будет выполняться лишь одним витком, второй будет просто запущен без дела и по сути он будет просто занимать ресурсы вычислительной машины. Для решения этой задачи был разработан новый подход к выполнению параллельности. Он заключается в том, что средний элемент массива каждый раз при выполнении вычисляется. То-есть он берётся в зависимости от значений предоставленных данных и является «плавающим» для каждого раза сортировки.

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

M = (H - L) /2 ,

где M - значение среднего элемента, H - значение наибольшего элемента, L - значение наименьшего элемента

В результате таких вычислений Мы получили значение среднего элемента для конкретного случая сортировки. С каждой новой сортировкой следует производить подобные действия заново. Получив значение среднего элемента, метод распределяет все элементы на основе сравнения с средним. Те, что являются меньше отправляются в левую часть, те что больше или равны переносятся в правую. Схема работы метода «Раскидка» библиотеки параллельной сортировки приводится на рисунке 1.

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

В ходе работы использовался язык программирования Ассемблер, ориентированный на работу с процессорами Intel архитектуры x86. Все потоки вызывались при помощи встроенного в систему Windows API. Использование потоков из уже готовых функций повысило скорость создания библиотеки, при этом сохранив её универсальность и скорость выполнения программы осталось на том же высоком уровне.

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

и не хватить. Эта задача решилась сама Собой при вызове витков операционной системой. Проблемы подобного рода в ОС Windows решаются выделением для каждого витка собственного регистра. Такой подход был очень удивительным. Видимо каждому из вызываемых потоков система предоставляет наиболее быстрый участок памяти для работы, выступающий в роли «виртуального регистра» для каждого витка. В дополнение к регистрам, каждый из потоков, как оказалось получает и Свой собственный стек. Это очень удобно при параллельном программировании. Позволяет программисту оставить все ухищрения на манер поворота регистра (имеется в виду использование rol/ror команд ассемблера) и сосредоточиться на более важных моментах работы.

С библиотекой параллельной сортировки были проведены несколько десятков экспериментов, для сравнения результатов работы и скорости выполнения. Вычислительных ошибок во время экспериментов выявлено не было. Результаты содержащие скорость выполнения сопоставлены с результатами работы сортировки с системой Open MP и Windows Thread. В данной статье приводится время выполнения программ (в миллисекундах) с использованием библиотеки параллельной сортировки на при обработке массивов значений из 200 млн. элементов (Рисунок 2). На гистограмме (Рисунок 2) представлено время выполнения программ с разными подходами, где progl - разработанная в ходе работы библиотека с одним вызванным витком выполнения, ОМП - программа с использованием OpenMP, Win32Thread - сортировка с применением Windows 32 Thread. Использовались 2 внешних витка, prog2 -разработанная в ходе работы библиотека с одним вызванным витком выполнения.

Исследование проводится в рамках Федеральных Целевых Программ России.

второй поток

3 2 1 4 5 7 6 8

первый поток

Рисунок 1. Схема работы метода «Раскидка».

12000 10000 3000 6000 4000 2000

. ■

P'og-

Рисунок 2. Результаты выполнения сортировки 200 мл. элементов.

Работа выполнена при финансовой поддержке Путинцева Александра Георгиевича и Путинцевой Ольги Николаевны. Выражается благодарность Поняевой Зинаиде Ивановне, за то что не меашала работе. Также выражается благодарность Романенко Михаилу Михайловичу за то что он не понял по какой причине ему выражена благодарность. Благодарность выражается Озрокову Ахмеду Хамзатовичу, за хорошую службу и охрану науки на границе родины. Выражается благодарность Простову Дмитрию Ивановичу, за то что он из Истры. Отдельно выражается благодарность Евгению Васильевичу Юртову за предоставленную возможность научной работы. Также автор благодарит В.В. Путина. Выражается благодарность Лукьянову Дмитрию Александровичу, за то что не вмешивался в процесс работы. Леонову Евгению за отличные познавательные видео. Выражается благодарность Медведеву Дмитрию Анатольевичу за поддержку и мотивацию к работе.

Литература

1. Левитин А. В. Глава 4. Метод декомпозиции: Быстрая сортировка // Алгоритмы. Введение в разработку и анализ — М.: Вильямс, 2006. — С. 174— 179. — 576 с. — ISBN 978-578-8459-0987-9

2. Э. Таненбаум. Архитектура компьютера. 5-ое издание. — СПб.: Питер, 2007. 848 с.

3. Win32 API. Урок 17. Динамические библиотеки [Электронный ресурс]/Библиотека I2R -Режим доступа: http://www.i2r.ru/static/565/out_17611.shtml - Дата обращения 28.04.2016

1 ■

ОМР Win32Th-sd p-og2

i Надоели баннеры? Вы всегда можете отключить рекламу.