Научная статья на тему 'Ускорение процессов обработки данных большого объема средствами графических процессоров'

Ускорение процессов обработки данных большого объема средствами графических процессоров Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
179
19
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ГРАФИЧЕСКИЙ ПРОЦЕССОР / БЛОК / ПОТОК / АЛГОРИТМ / СОРТИРОВКА / ПОИСК / ПАРАЛЛЕЛИЗМ / GRAPHICS PROCESSOR / BLOCK / THREAD / ALGORITHM / SORTING / SEARCH / PARALLELISM

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

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

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

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

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

ACCELERATION OF PROCESSING OF BIG VOLUME DATA BY TOOLS OF GRAPHIC PROCESSORS

The modern tools of accelerating the processing of large-scale data using the graphics processor technology CUDA are considered. The architecture of NVIDIA's video card and the features of executing programs on it for non-graphical calculations are investigated. The procedure for improving performance using a graphics processor due to parallelism is considered on the example of sorting algorithms (quick and Shell) and data search algorithms (binary and interpolation). Experimental studies of the developed program modules are also conducted; relevant conclusions are made about their effectiveness, advantages, disadvantages and possible further improvements.

Текст научной работы на тему «Ускорение процессов обработки данных большого объема средствами графических процессоров»

УДК 004.424.5

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

С.В. Скворцов, Т.А. Фетисова, Т.С. Скворцова

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

Ключевые слова: графический процессор, блок, поток, алгоритм, сортировка, поиск, параллелизм.

Введение. Традиционно анализ и обработка данных больших объемов производится средствами вычислительных систем коллективного пользования, такими как суперЭВМ, мэйнфреймы, мощные серверы и т.п. [1]. Однако развитие аппаратно-программных средств персональных ЭВМ, таких как многоядерные центральные процессорные устройства и графические процессоры, позволяют частично перераспределить функции обработки больших данных между мощными центральными ЭВМ и персональными ЭВМ клиентов (пользователей) [2]. В частности, использование графических ускорителей позволяет значительно повысить производительность обработки слабосвязанных данных больших объемов [9], подобно системам с архитектурой SIMD.

В данной работе рассматривается возможность ускорения процессов обработки данных большого объема средствами графических ускорителей фирмы NVIDIA по технологии CUDA на примере операций сортировки и поиска, которые часто встречаются в различных прикладных алгоритмах [2, 3]. Примерами могут служить алгоритмы обработки и хранения больших объемов данных (BigDATA), эволюционные алгоритмы, работа с базами данных, работа в Интернете и многое другое [7, 8]. Целью работы является разработка и исследование параллельных версий известных алгоритмов сортировки и поиска данных с целью их эффективной программной реализации на графических процессорах персональных ЭВМ.

По сравнению с последовательным и многопоточным (для многоядерных процессоров) программированием задача организации высокопроизводительных вычислений с помощью графических процессоров представляется новой и актуальной [4], а все аспекты данной задачи требуют особого изучения, поскольку непосредственно влияют на качество оптимизации прикладных программ [5, 6].

312

Архитектура графического процессора. CUDA является программно-аппаратной архитектурой для организации параллельных вычислений, которая позволяет значительно увеличить производительность вычислений за счет использования графических процессоров фирмы NVIDIA. Данная технология подразумевает знание специализированного понятийного аппарата [3]. Device или устройство, под которым понимается непосредственно графический процессор (видеоплата), выполняющего команды центрального процессора (ЦП). Host или хост - это ЦП, который отвечает за выделение памяти, запуск различных функций и передачу данных. Kernel или программное ядро представляет собой функцию, выполняющуюся на графическом процессоре.

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

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

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

Алгоритмы сортировки и поиска данных и их многопоточная реализация. Эффективное использование технологии CUDA можно рассмотреть на примере известных алгоритмов сортировки и поиска данных. Для этого необходимо модифицировать применяемые алгоритмы для мно-

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

[3, 5].

Быстрая сортировка - алгоритм, основанный на стратегии «разделяй и властвуй». Относительно опорного элемента массив данных делится на две части: элементы, меньшие или равные опорному, переносятся в левую часть, элементы, большие - в правую. Затем рекурсивно сортируются вновь образованные подмассивы.

Многопоточная реализация алгоритма быстрой сортировки основана на следующих положениях. Благодаря индексу опорного элемента, делящего массив данных на подмассивы, можно параллельно сортировать части массива (подмассива), которые были получены справа и слева от опорного элемента. Для запуска на графическом процессоре процедуры распараллеливания, требуется реализовать первичное разделение исходного массива данных на ЦП, что позволит определить индекс опорный элемент и сформировать подмассивы для дальнейшей параллельной сортировки. Затем данные подмассивы сортируются независимо друг от друга средствами графического процессора. Необходимо отметить, что число параллельных потоков (степень параллелизма) возрастает с каждым разделением частей массива на еще меньшие части.

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

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

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

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

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

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

Экспериментальная оценка разработанных программных модулей. Для оценки эффективности разработанных параллельных алгоритмов сортировки и поиска данных, реализованных в виде программных модулей на платформе CUDA, были проведены экспериментальные исследования прикладных программ, реализованных только на ЦП (последовательная реализация) и на ЦП с использование графического процессора (многопоточная реализация). Эксперимент проводился на базе процессора IntelCore2 QuadQ6600 и видеоплаты NVIDIA GeForcegtx 470.

В процессе эксперимента оценивалось время работы указанных версий программных модулей, реализующих рассмотренные алгоритмы сортировки и поиска. Исходные данные формировались случайным образом в виде одномерных целочисленных массивов. В процессе эксперимента изменялись размер массива и число блоков потоков, запускаемых на графическом процессоре по технологии CUDA. При исследовании программ сортировки размер массива изменялся от 100000 до 600000 элементов, для программ поиска данных - от 100000 до 1000000 элементов. Для каждого сочетания указанных параметров было выполнено по 10 экспериментов с разными числовыми данными. Графики зависимостей среднего времени сортировки данных от размера массива приведены на рис. 1 и 2.

Время, сек

1,6

1,4

Параллельная реализация j — — — 256 блоков

0,8 512 блоков

0,6 ..*'' - -1024 блока

0,4 .••* ...... Последовательная

Размер списка

10000 20000 30000 40000 50000 60000

Рис. 1. Зависимости среднего времени работы модуля быстрой сортировки от размера списка

10000 20000 30000 40000 50000 60000 " ^ размер списка

Рис. 2. Зависимости среднего времени работы модуля алгоритма

Шелла от размера списка

Экспериментальные исследования показывает, что параллельные алгоритмы сортировки, реализованные на платформе СЦОА, по сравнению с их последовательными версиями позволяют получить значительное ускорение при обработке массивов большой размерности. Так время работы многопоточного модуля алгоритма быстрой сортировки сокращается до 10 раз, для алгоритма Шелла - до 20 раз. На это влияют непосредственно параметры запуска функции программного ядра - число блоков и потоков. В настоящей работе рассматривался только блочный способ распараллеливания, поэтому в процессе проведения экспериментов менялся только этот параметр.

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

В отличие от быстрой сортировки многопоточная сортировка Шелла дает выигрыш производительности сразу, однако при 512 и 1024 блоках результаты близки между собой. Это можно объяснить размерами исходных массивов, поскольку с увеличением их размера необходимо задействовать больше блоков для распараллеливания.

Графики зависимостей среднего времени работы модуля бинарного и интерполяционного поиска приведены на рис. 3 и 4 соответственно.

Рис. 3. Зависимости среднего времени работы модуля бинарного поиска

от размера массива

316

Time, sec

4,50000

4,30000 4,10000 3,90000 3,70000 3,50000 3,30000 3,10000 2,90000 2,70000 2,50000

--------- • —*' '

** -Serial version

✓ ✓ - • Parallel 256 blocks

** • •• Parallel 512 blocks

—- --Parallel 1024 blocks

Size, *1000

100 200 300 400 500 600 700 800 900 1 ООО

Рис. 4. Зависимости среднего времени работы модуля интерполяционного поиска от размера массива

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

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

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

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

317

ственно сокращается с ростом объема массива обрабатываемых данных и размера блока (параметр программного ядра CUDA), причем с увеличением числа блоков выигрыш возрастает.

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

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

1. Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. М.: Издательство Московского университета, 2010. 544 с.

2. Лунин Д.В., Скворцов С.В. Организация параллельных вычислений на платформе CUDA // Вестник Рязанского государственного радиотехнического университета. 2014. № 49. С. 77-82.

3. Скворцов С.В., Пюрова Т.А. Параллельные алгоритмы сортировки данных и их реализация на платформе CUDA // Вестник Рязанского государственного радиотехнического университета. 2016. № 58. С. 42-48.

4. Козлов М. А., Скворцов С. В. Алгоритмы параллельной сортировки данных и их реализация на языке Clojure // Вестник Рязанского государственного радиотехнического университета. 2013. № 4-1 (46). С. 92-96.

5. Skvortsov S.V., Fetisova T.A., Bakuleva M.A. Improving the Perfo-mance of software applications for sort and search data by means of GPUs// Proceedings MECO 2018 - IEEE 7th Mediterranean Conference on Embedded Computing (MEC0-2018), 2018. P. 153-156.

6. Елесина С.И., Никифоров М.Б. Повышение эффективности генетического алгоритма // Информационные технологии. 2012. С. 49-54.

7. Костров Б.В., Баранчиков А.И. Методы исследования моделей и алгоритмов представления данных для предметных областей с ранжируемыми атрибутами // Вестник Рязанского государственного радиотехнического университета. 2013. № 46. С. 59-64.

8. Никифоров М.Б., Тарасов А.С. Оптимизация алгоритма двойной интерполяции в задачах анализа высотных данных // Сборник трудов международной научно-технической и научно-методической конференции «Современные технологии в науке и образовании». СТН0-2018 - Рязань, 2018. С. 118-123.

9. Ручкин В.Н., Костров Б.В., Романчук В.А., Фулин В.А. Анализ явного и неявного параллелизма на основе кластеризации вычислительных систем // Динамика сложных систем - XXI век. 2015. Том 9. № 2. С. 20-28.

Скворцов Сергей Владимирович, д-р техн. наук, профессор, s.v.skvor@gmail.com, Россия, Рязань, Рязанский государственный радиотехнический университет,

Фетисова Татьяна Анатольевна, аспирант, pyurova_ta@mail.ru, Россия, Рязань, Рязанский государственный радиотехнический университет,

Скворцова Татьяна Сергеевна, канд. техн. наук, старший преподаватель, t.s.skvortsova@yandex.ru, Россия, Рязань, Академии права и управления ФСИНРоссии

ACCELERATION OF PROCESSING OF BIG VOLUME DATA BY TOOLS

OF GRAPHIC PROCESSORS

S.N. Skvortsov, T.A. Fetisova, T.S. Skvortsova

The modern tools of accelerating the processing of large-scale data using the graphics processor technology CUDA are considered. The architecture of NVIDIA's video card and the features of executing programs on it for non-graphical calculations are investigated. The procedure for improving performance using a graphics processor due to parallelism is considered on the example of sorting algorithms (quick and Shell) and data search algorithms (binary and interpolation). Experimental studies of the developed program modules are also conducted; relevant conclusions are made about their effectiveness, advantages, disadvantages and possible further improvements.

Key words: graphics processor, block, thread, algorithm, sorting, search, parallelism.

Skvortsov Sergey Vladimirovich, doctor of technical sciences, professor s.v.skvor@gmail.com, Russia, Ryazan, Ryazan State Radio Engineering University,

Fetisova Tatyana Anatolevna, postgraduate, pyurova_ta@mail. ru, Russia, Ryazan, Ryazan State Radio Engineering University,

Skvortsova Tatyana Sergeevna, candidate of technical sciences, senior lecturer, t. s. skvortsova@yandex. ru, Russia, Ryazan, The Academy of Law and Management of the Federal Penal Service of Russia

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