Научная статья на тему 'Метод распараллеливания вычислений на gpu-сопроцессорах'

Метод распараллеливания вычислений на gpu-сопроцессорах Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
409
97
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
NVIDIACUDA / GPGPU / ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ / ЯЗЫК С / GPU-ПРОЦЕССОРЫ / РЕШЕТО ЭРАТОСФЕНА

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

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

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

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

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

Текст научной работы на тему «Метод распараллеливания вычислений на gpu-сопроцессорах»

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

Список использованной литературы:

1. Котельников В.С., Жуков В.Г., Худошин А.А., Сухоруков В.В. Значения дефектоскопии канатов для повышения безопасности эксплуатации грузоподъемных кранов// Безопасность труда в промышленности, №9, 2002. - с. 15-25.

2. Котельников В.С., Сухоруков В.В., Короткий А.А. и др. Методические указания по магнитной дефектоскопии стальных канатов. Основные положения. РД-03-348-00. - М.: Гостехнадзор, 2000. - 18 с.

© Кулешов С.С., 2015

Польдяев Андрей Сергеевич

Магистр по направлению информатика и вычислительная техника, г. Москва, РФ, МАТИ- РГТУ им. К.Э. Циолковского E-mail: andrey.poldyaev@kaspersky.com

МЕТОД РАСПАРАЛЛЕЛИВАНИЯ ВЫЧИСЛЕНИЙ НА GPU-СОПРОЦЕССОРАХ

Аннотация

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

Ключевые слова

NVIDIACUDA, GPGPU, параллельные вычисления, язык С, GPU-процессоры, решето Эратосфена

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

Идея использования графических процессоров для математических вычислений появилась в 90-х годах прошлого столетия. В 2003 году на конференции SIGGRAPH (специальная группа по графическим и интерактивным методам) вычислениям на GPU была посвящена секция, получившая название GPGPU (General-Purpose Computationon GPU - универсальные вычисления rnGPU). Самым известным компилятором, предназначенным для неграфических вычислений на GPU, являлся Brook GPU. До его появления разработчики выбирали между двумя наиболее распространенными API: Direct3Dили OpenGL. Эти трудности серьезно ограничивали применение GPU, так как 3Dграфика подразумевала использование текстур и шейдеров, в отличие от привычных разработчикам, по параллельному программированию, -потоков и ядер. Компилятор Brook, а также потоковые расширения к языку С, которые были разработаны в

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

Появление компилятора Brook, вызвало интерес к вычислениям на GPU у разработчиков видеочипов NVIDIAh ATI. Развитие параллельных вычислений на GPUоткрывало новые возможности, которые серьезно изменили рынок. Некоторые исследователи из проекта Brook, спустя какое-то время, присоединились к команде NVIDIA, чтобы представить программно-аппаратную стратегию параллельных вычислений. Результатом работы данной команды стала технология NVIDIACUDA (Compute Unified Device Architecture).

Развитие CUDA происходило довольно стремительно и, чтобы привлечь на свою сторону как можно больше разработчиков, NVIDIA использовала стандартный язык C, дополнив его специальными средствами. После выхода видеокарты GeForce 8800 GTX NVIDIA представила новый компилятор языка С по названием CUDAC. Это был первый язык, который специально разрабатывался для программирования на графическом процессоре, что послужило значительным упрощением для разработчиков.

Концепция архитектуры CUDA основывается на тесном взаимодействии GPU (device) и CPU (host). GPU является вычислительным устройством и сопроцессором для центрального процессора, при этом имеет собственную память и возможность обрабатывать большое количество потоков параллельно. При обработке последовательная часть обычного кода будет отдана на исполнение центральному процессору, а массивно-параллельная часть поступает на обработку процессору GPU. Вычисления на графическом процессоре представляют собой набор нитей (threads, потоков), выполняющихся одновременно. Нити (или потоки) разделяются на группы по 32 нити и называются «warp». Количество нитей в одном warp не случайно, 32 -это минимально возможный объем данных, обрабатываемый в мультипроцессоре, однако это не всегда удобно, поэтому CUDA позволяет работать с блоками размером от 64 до 512 потоков. При решении задач на GPU используются огромное количество параллельно выполняемых нитей, которые организованы в следующую структуру, изображенную на рис. 1:

Host

Kernel 1

Grid 1

Block (о,0) Block (1,0) Block а»)

&к)сК,-' (М Block (1,1) В jock (2.1)

...................

Kernel

г

Grid 2 /

Block (1,1)

Ihre nil Thnii llireuJ Thrcnd Ilirtud i

(□, В) (L,0) {4ч tt) !

ihre ail IlirrHd llirvat] litre ml IlireaU j

«M> (1,1) c.ih CM)

Thurcsiit Hirrad Thrnil Tlircjiil ltiirjd

10,1} (M) 12,2 h ал (■MI

Рисунок 1

Верхний уровень иерархии представляет собой сетка (grid), которая соответствует всем нитям, выполняющим данное ядро. Сетка состоит из одномерных или двумерных массивов блоков (block). В свою очередь, блок это одномерный, двумерный или трехмерный массив нитей (thread). Каждый блок в сетки, как и каждая нить внутри блоки имеют свои адрес - одно, два или три неотрицательных числа, задающих индекс. Программа, работая над ядром, выполняет одновременно огромное количество нитей и для определения конкретного номера нити, используются специальные переменные threadlDX и blocklDX. Данные переменные являются трехмерными целочисленными векторами и используются только на GPU. Используются также переменные gridDim и blockDim для определения размера сетки и блока соответственно [1].

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

этом каждой подзадаче соответствует свой блок нитей, решаемых совместно. Разбиение нитей на warp происходит отдельно для каждого блока, при этом, взаимодействовать нити разных блоков между собой не могут. Подобный подход очень похож на архитектуруSIMD (Single Instruction, Multiple Data — одиночный поток команд, множественный поток данных), однако присутствуют существенные отличия и, в связи с этим, компания NVIDIA использует термин SIMT (Single Instruction, Multiple Thread).

Исходная задача

I I I

Нити

Рисунок 2

Реализация программ для CUDA подразумевает использование трех основных спецификаторов [2]:

-_host_— выполняется на CPU, вызывается с CPU;

-_global_— выполняется на GPU, вызывается с CPU;

-_device_— выполняется на GPU, вызывается с GPU.

Возможно совместное использование спецификаторов_host_и_device_, при этом выполнение

соответствующей функции может выполняться как на CPU, так и на GPU. Код для соответствующих

платформ будет автоматически сгенерирован компилятором. Использование спецификаторов_global_и

_host_ вместе невозможно, т.к. спецификатор _global_ обозначает ядро, и соответственно должна

возвращать значение типа void. На функции_device_и_global_, используемые на GPU, накладываются

следующие ограничения:

- не поддерживается рекурсия

- не поддерживается взятие по адресу

- не поддерживаются статические переменные

- не поддерживается переменное число входных аргументов

Размещение переменных в GPU осуществляется с помощью использования следующих спецификаторов -_constant ,_device_и_shared_. Существуют ограничения для этих объектов:

- спецификаторы не могут применяться к полям структуры (union и struct)

- использование соответствующих переменных, может осуществляться только в пределах одного

файла

- записи констант может осуществляться только на CPU при помощи специальных функций

- переменные_shared_не могут инициализироваться при объявлении.

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

- комплект средств разработки CUDA (CUDA Toolkit)

- драйвер для графического процессора NVIDIA

- стандартный компилятор языка С.

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

1. Поиск всех простых чисел в промежутке 2А30 - 2А31-2А32 и подсчет их количеств, сравнение полученных результатов с оценками Чебышева;

2. Поиск среди найденных чисел, равноотстоящие от середины интервала - числа 2А31.

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

Список использованной литературы

1. Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2010. 17 с.

2. Берилло А. NVIDIA CUDA - неграфические вычисления на графических процессорах // Информационный ресурс сети интернет IXBT.com, 23.09.2008 г. - http://www.ixbt.com/video3/cuda-1.shtml.

3. Инютин С.А. Компьютерная модулярная алгебра квадратичного диапазона и область ее приложения // Вестник Тюменского государственного университета, 2001, № 2. -С. 14-19.

4. Инютин С.А. Модулярные вычисления в сверхбольших компьютерных диапазонах // Электроника. Известия вузов, 2001, № 6. -С. 81 -87.

Польдяев А.С., 2015

Савашинский Илья Игоревич

УРФУ, ИРИТ-РтФ, каф. РТС, студ. 4 курс г. Екатеринбург, РФ egor37-ilya 14@yandex.ru Бекетова Анна Павловна (научн. руковод.)

УРФУ, каф. ин. языков и перевода ИнФО, ст. препод.

г. Екатеринбург, РФ annishuara@ya.ru

APPROXIMATE ESTIMATION OF INFORMATION DAMAGE CAUSED TO RADIO-LOCATING SYSTEMS BY RADIO-ELECTRONIC WARFARE DEVICES

Аннотация

В данной работе проведена приближенная оценка информационного ущерба, наносимого радиолокационным системам (РЛС) средствами радиоэлектронной борьбы на основе создания активных помех одной РЛС передатчиком (ПРД) помех автомобиля-нарушителя. Особое внимание уделено определению границ зоны подавления через диаграмму направленности (ДН) РЛС и области неопределенности для одной и нескольких РЛС. Также рассмотрена работа ПРМ при воздействии помех различной интенсивности и приведена формула дальности действия ПРД помех. Получены соответствующие изображения и зависимости.

Ключевые слова

Помеха, радиолокационная система (РЛС), зона (область), дальность, подавление, мощность,

приемник (ПРМ).

For noises' efficiency estimation it is necessary to find the relation of noise/signal power ratio (the k coefficient) to noises' station and repressed appliance parameters.

The aim (automobile-offender) will be considered to overcome one radio-locating system (RLS), pic.1.

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