Исследование влияния памяти графического устройства на скорость выполнения программ

Струняшев Александр Николаевич - аспирант кафедры Математического обеспечения и применения электронных вычислительных машин факультета Вычислительной техники Пензенского государственного университета. (ПГУ, г.Пенза)

Аннотация: В статье рассматривается влияние выбранной памяти графического устройства на скорость выполнения программы. В качестве исследуемой программы выступает реализация алгоритма шифрования ГОСТ 28147-89.

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

Основой взаимодействия центрального (CPU, англ. central processing unit) и графического (GPU, англ. graphics processing unit) процессоров является память. Именно с помощью нее передаются данные на устройство и считывается результат выполнения. Согласно спецификации [1] память графического устройства имеет иерархическую структуру.

Для передачи данных в программу на GPU разработчику доступно всего три вида памяти: глобальная, постоянная и текстурная. Все они имеют различную емкость и скорость доступа. Глобальная память допускает произвольную адресацию и предоставляет возможность чтения и записи данных. Данный тип памяти обладает малой скоростью доступа, порядка нескольких сотен тактов. Размер глобальной памяти гораздо больше, чем у других видов памяти и зависит от конкретного устройства.

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

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

Целью данного исследования является определение изменения скорости выполнения с использованием различных видов памяти. В качестве примера взята программа для шифрования алгоритмом ГОСТ 28147-89, описание результатов которой приводилось в [2]. Подобный выбор обусловлен тем, что для шифрования необходимо иметь данные, таблицу замен и ключ. Размещая их в различных типах памяти, можно проанализировать изменение скорости выполнения. Для чистоты эксперимента во всех тестах будет использована видеокарта Nvidia GeForce 9400 GT и выбрано одинаковое количество рабочих блоков и нитей. В качестве данных для шифрования выступают 500000 64-битных блоков, созданных с помощью генератора случайных чисел.

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

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

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

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

1) CUDA C Programming Guide [Электронный ресурс]: Официальный сайт документации Nvidia. URL: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#memory-hierarchy (дата обращений 28.08.2013).
2) Струняшев А.Н. Применения алгоритма шифрования ГОСТ 28147-89 на графических процессорах, используя технологию Nvidia CUDA // Научная перспектива. - 2012. - №7. - ISSN 2077-3153.- 750 экз.

Интересная статья? Поделись ей с другими: