НАУКА И АСУ 2014
СОВРЕМЕННЫЕ ГРАФИЧЕСКИЕ ПРОЦЕССОРЫ КАК СРЕДСТВА ОПТИМИЗАЦИИ ПАРАЛЛЕЛЬНЫХ
ВЫЧИСЛЕНИЙ
Агибалов О.И.,
Южный Федеральный Университет, [email protected], Золотарёв А. А., к.ф.-м.н., с.н.с., Южный Федеральный Университет, [email protected]
Ключевые слова:
видеокарта, gpu, графический адаптер, cuda, opencl, directcompute, gpgpu, nvidia, amd, intel, поток.
АННОТАЦИЯ
Предметом данного исследования являются графические адаптеры как средства выполнения массово-параллельных операций. Цель исследования - определение закономерностей и возможностей современных графических ускорителей при решении математических задач. Методология проведения исследования строится на основе тестирования GPU (Graphics Processing Unit) при проведении простых и сложных математических операций, а также изучения закономерностей их обработки. При этом в учёт берутся такие параметры, как тип данных, их объём, структура данных в памяти видеоадаптера и другие. В результате были построены таблицы и графики, моделирующие поведение видеокарт при упомянутых выше критериях. Область применения результатов охватывает любые сферы приложения массовых вычислений, основанных на параллелизме и многопоточности. Результаты описывают базовые зависимости работы GPU. Это означает, что они могут быть использованы разработчиками ещё на этапе проектирования программных средств, в т.ч. высокопроизводительных систем управления.
SCIENCE AND ACS 2014
H&ES
RESEARCH
Многие актуальные задачи науки и техники, экономики и производства уже не могут быть исследованы без использования методов параллелизма и многопоточно-сти. На современном этапе развития техники и технологий эти методы, как правило, относят к центральным процессорам, суперкомпьютерам (кластерам) и графическим процессорам - так называемым GPGPU (GeneralPurpose Graphics Processing Unit) [1, 2].
Данное исследование изучает закономерности поведения последних. Известно, что изначально они предназначались исключительно для обработки графических операций в компьютерных играх. Однако, возможности архитектуры этих устройств были оценены профессионалами, занимающимися научными вычислениями. Тогда производители графических процессоров перестроили архитектуры таким образом, чтобы на них можно было производить вычисления общего (не графического) характера. Так появились GPGPU.
На данный момент существует достаточно много технологий использования GPGPU. Самыми известными является CUDA от NVidia, OpenCL от Apple, DirectCompute от Microsoft [3]. Особый интерес представляет CUDA, поскольку она является самой производительной и обладает наилучшей поддержкой как со стороны самой NVidia, так и сторонних разработчиков. Главным недостатком CUDA является работоспособность только на графических картах от NVidia. Однако, у CUDA есть достойная альтернатива в лице OpenCL, который изначально задумывался как кроссаппаратный и кроссплатформенный [4]. Он позволяет создавать программы как для адаптеров NVidia, так и для устройств от AMD. DirectCompute также работает на видеокартах разных производителей, но, как не трудно догадаться, только на операционных системах Windows [5].
Архитектура GPU достаточно сложна и состоит из уровней. Для распределения памяти используется популярная сегодня архитектура NUMA. Все процессоры находятся на так называемых мультипроцессорах. Каждый процессор может создавать один или несколько потоков. При этом каждый процессор имеет в своём распоряжении определённый участок памяти. Эта память называется локальной. Она доступна только одному указанному процессору и не может быть обработана другими процессорами. В свою очередь, каждая группа процессоров на мультипроцессоре обладает памятью, доступной всем процессорам внутри группы, но недоступной другим группам. По аналогии с этим на GPU размещена глобальная память, которая может использовать любыми процессорами из любой группы. Чем ближе память к процессору, тем быстрее она работает. Это означает, что самая высока скорость доступа у локальной памяти, а самая низкая - у глобальной [6].
В действительности, такой подход позволяет очень гибко размещать структуры данных в памяти GPU. Разработчик должен заранее продумать эти структуры так, чтобы доступ к ним был максимально быстрым, без потери функционала программы. Эти структуры упаковываются в массивы и пересылаются в память графического процессора. GPU - это векторное устройство, выполняющие
операции в соответствии с командами типа SIMD. Благодаря этому каждый процессор создаёт поток, управляющий лишь одним элементом из массива. Это не исключает доступа к данным, обрабатываемым параллельными потоками в рамках доступности NUMA. Пересылка данных и настройка программы производится центральным процессором. Следовательно, GPGPU-программа состоит из двух частей: для центрального процессора и для графического.
Для достижения наилучшего результата необходимо выяснить оптимизационные возможности современных GPU, а это подразумевает тестирование на различных операциях: как базовых, так и более сложных, функциональных. Также важно понять, как GPU работает с разными базовыми типами данных и насколько возрастает время работы при увеличении объёма входных данных.
Когда говорят о базовых математических операциях, то обычно подразумевают сложение, вычитание, умножение и деление. Само тестирование целесообразно проводить через сравнение результатов, достигаемых на центральном и графическом процессорах. Представим полученные результаты в таблице (таблица 1).
Таблица 1
Результаты выполнения базовых арифметических операций
Операция Тер CPU, мс Тер GPU, мс
Сложение 3332,5 57,2
Вычитание 3332,8 58,5
Умножение 3381,6 60,1
Деление 5242,1 60,4
Вычисления производились на массивах объёмом 20 000 000 элементов и состояли в попарном сложении, вычитании, умножении и делении их элементов. Из таблицы видно, что GPU на два порядка быстрее, нежели ЦП. Однако, интересный вывод заключается в том, что графический процессор тратит примерно одинаковое время на выполнение всех операций. В то же самое время центральный процессор затрачивает на операцию деления чуть ли не в полтора раза больше времени. Следовательно, при выполнении деления эффективность GPU по сравнение с ЦП возрастает ещё больше.
Это время справедливо для массивов, содержащих по 20 миллионов элементов в каждом. Но при других объёмах время будет другим. Значит, нужно понять, каким образом затраченное на обработку время зависит от объёма входных данных. Проведённые вычисления показали, что эта зависимость носит линейный характер. Причём, такое заключение справедливо как для центрального процессора, так и для видеокарты.
Традиционно графические процессоры разрабатывались для оперирования числами с плавающей точкой (float). Но реальные вычисления наряду с обработкой
www.h-es.ru
high tech in earth space research
61
His
RESEARCH
НАУКА И АСУ 2014
такого формата данных сталкиваются с обработкой и целочисленных величин (int). Следовательно, важно выяснить, насколько сильно тип данных влияет на скорость выполнения операций обработки. Рассмотрим следующую таблицу (таблица 2).
Таблица 2
Продолжительность обработки в зависимости от типа данных
Вид замера времени int float
Среднее для CPU, мс 2826,7 3336,4
Средне для GPU, мс 50,3 49,9
Данные в таблице 2 приведены для операции сложения двух массивов. Из неё видно, что для GPU нет принципиальной разницы между целыми числами и числами с плавающей точкой. Для процессора эта разница существенна, ведь числа с плавающей точкой обрабатываются на 20% дольше.
Все продемонстрированные результаты были получены на элементарных математических операциях. Они действительно являются основой для обработки различных агрегатных данных и многих типов задач. Т.е., не менее интересно выявление подобных результатов и для более вычислительно сложных операторов. К ним относятся функции тригонометрии, степенные функции, логарифмы и др.
Результаты численного эксперимента для простейших из них таких, как синуса, косинуса, тангенса, возведения в степень, модуля и другими, приведены в таблице 3.
Таблица 3
Продолжительность реализаций функциональных операций
Операция Среднее время работы CPU, MC. Среднее время работы GPU, мс Дисперсия для CPU Дисперсия для GPU
Синус 49850,5 205,5 308,5 8,9
Косинус 49859,0 207,2 578,9 23,5
Тангенс 64534,6 190,6 142,3 3157,6
Арксинус 15867,9 210,4 618,8 4,0
Арккосинус 15155,3 211,7 674,5 3,1
Арктангенс 23384,8 211,5 1320,8 1,8
Квадратный корень 8900,3 206,5 70,0 2,9
Логарифм 26436,3 210,1 2369,1 3,7
Возведение в степень 3.5 99117,6 170,8 2105,2 5453,5
Экспонента 21884,2 207,0 11356,4 11,3
По результатам расчетов скорость работы видеокарты превышает скорость работы центрального процессора в среднем в 250 раз.
Однако в данной таблице есть некоторые операции, обладающие очень большой дисперсией их нужно рассмотреть подробнее. Одной из них является Тангенс. Ниже приведена статистическая характеристика этой операции (таблица 4).
Таблица 4 Характеристика операции тангенса
МИН CPU, MC. 64518
MAX CPU, мс. 64550
AV CPU, мс. 64534,6
MIN GPU, мс. 31
MAX GPU, мс. 214
AV GPU, мс. 190,6
ДИСП CPU 142,3
ДИСП GPU 3157,6
Видим, что минимальное значение времени равно 31 миллисекунде, а максимальное - 214 миллисекундам. На самом деле, такой разброс может быть объяснён внутренними процессами, происходящими в компьютере. Очевидно, что операционная система также использует GPU для своих вычислений. И именно это, а также аппаратные процессы, могут влиять на производительность. Это предположение подтверждается тем, что во всех остальных случаях (в 9 тестах из 10) разброс времени составлял всего лишь 214 - 201 = 13 миллисекунд, которые обуславливаются стохастическими программными и аппаратными процессами и не выходят за разумные рамки погрешности.
Из всех таблиц данных численного эксперимента следует, что на обработку любой из функций с использованием CPU требуется на 2-3 порядка больше времени, чем GPU.
Исходя из всего выше сказанного, следует, что самым важным преимуществом GPU является скорость обработки или быстродействие. Однако они не лишены недостатков, которые, впрочем, лишь накладывают некоторые ограничения, заставляя разработчиков быть более внимательными как к процессу проектирования задачи, так и к программированию функционала. На данном этапе развития технологий эта проблема отчасти решается такими технологиями, как OpenACC [7].
Использование GPU целесообразно не всегда. Тестирование показало, что такая массовая параллельность оправдывает себя только на больших объёмах данных. Удалось выяснить, что много времени отнимает пересылка массивов, и это время возрастает линейно с увеличением размеров массивов. Внутри этого есть период, когда производится настройка инфраструктуры GPU. И этот период постоянен для данного ПК и не зависит от объёма данных. Интересно, что именно этот период может занимать до 90% времени инициализации программы. Остальные 10% времени уходят на пересылку данных. Из-за этого время пересылки может быть большим даже при маленьких размерах массивов. И тогда этап инициализации длится дольше, чем вся обработка на центральном процессоре. При больших объёмах данных он компенсируется полученным ускорением от параллельной обработки.
SCIENCE AND ACS 2014
US
RESEARCH
Полученные зависимости могу быть использованы для предсказаний. Например, при запуске среды проводятся тестовые запуски, в ходе которых вычисляются параметры работы GPU: время пересылки разных объёмов данных, время обработки атомарных операций и другие. Эти параметры будут неизменными в условиях постоянства внешней программной и аппаратной среды. Затем, используя эти результаты, можно предсказать, сколько времени потребуется на пересылку определённого объёма данных.
Так или иначе, полученные зависимости позволяют сделать выводы о том, как именно функционируют технологии GPGPU и более того, найти причины и закономерности такого функционирования.
Литература
1. Agibalov, O 2013, GPGPU and the modern ways, conference proceedings, II German-Russian Interdisciplinary Workshop
"Nanodesign : Physics, Chemistry, Computer Modeling", 10-11 October, Rostov-on-Don, Russia, Southern Federal University, Rostov-on-Don.
2. Zolotarev, A & Agibalov, O 2013, Abilities of modern graphics adapters for optimizing parallel computing, World Applied Sciences Journal, 2013. V.23, Num. 5, pp. 644-649.
3. NVidiaCorporation, CUDA parallel computing, viewed 18 September 2014, http://www.nvidia.co.uk/object/cuda-parallel-computing-uk.html.
4. AMD Corporation, OpenCL Zone, viewed 18 September 2014, http://developer.amd.com/tools-and-sdks/opencl-zone/.
5.NVidiaCorporation, DirectCompute, viewed 18 September 2014, https://developer.nvidia.com/directcompute.
6. Boreskov, A 2012, Parallel computations on GPU. Architecture and programming model of CUDA, Moscow University publisher, Moscow.
7. NVidiaCorporation, OpenACC, viewed 18 September 2014, https://developer.nvidia.com/openacc.
MODERN GRAPHICS PROCESSORS AS TOOLS FOR OPTIMIZING PARALLEL COMPUTATIONS
Agibalov O., graduate of Southern Federal University, [email protected]
Zolotarev A., head. the Department of space device engineering and innovative technology of Southern Federal University, [email protected]
Abstract
The subject of current research is using graphics adapters as devices for massively parallelized computations. The purpose of the research is to determine laws and abilities of modern graphics accelerators when solving mathematical challenges. The methodology of the research is based on testing GPUs (Graphics Processing Units), performing simple and complex mathematical operations and examining their laws. Such parameters as data types, volume of data and memory structures are considered. At the result the charts, modeling the behavior of GPUs in these conditions, were created. The application of the results includes any spheres related to performing massive computations and based parallelism on multithreading. The results describe basic relationships of GPU's functioning. Thus they may be used by developers yet during designing programming tools including high-performance control systems.
Keywords: video card, gpu, graphics adapter, cuda, opencl, directcompute, gpgpu, nvidia, amd, intel, thread
References
1. Agibalov, O 2013, GPGPU and the modern ways, conference proceedings, II German-Russian Interdisciplinary Workshop "Nanodesign : Physics, Chemistry, Computer Modeling", 10-11 October, Rostov-on-Don, Russia, Southern Federal University, Rostov-on-Don.
2. Zolotarev, A & Agibalov, O 2013, Abilities of modern graphics adapters for optimizing parallel computing, World Applied Sciences Journal, 2013. V.23, Num. 5, pp. 644-649.
3. NVidiaCorporation, CUDA parallel computing, viewed 18 September 2014, http://www.nvidia.co.uk/object/cuda-par-allel-computing-uk.html.
4. AMD Corporation, OpenCL Zone, viewed 18 September 2014, http://developer.amd.com/tools-and-sdks/open-cl-zone/.
5. NVidiaCorporation, DirectCompute, viewed 18 September 2014, https://developer.nvidia.com/directcompute.
6. Boreskov, A 2012, Parallel computations on GPU. Architecture and programming model of CUDA, Moscow University publisher, Moscow.
7. NVidiaCorporation, OpenACC, viewed 18 September 2014, https://developer.nvidia.com/openacc.
SX ^»Kfloat ж. f complex c;
с.i=x*a.i; return с;
www.h-es.ru
high tech in earth space research
63