Ускорение aes шифрования на аппаратно-программной платформе Nvidia CUDA

УДК 681.3.06

Р. Ф. Гибадуллин, А. С. Яковлев, А. А. Новиков,

М. Ю. Перухин

УСКОРЕНИЕ AES ШИФРОВАНИЯ НА АППАРАТНО-ПРОГРАММНОЙ ПЛАТФОРМЕ

NVIDIA CUDA

Ключевые слова: GPGPU, AES, акселератор.

Проведены эксперименты, чтобы выявить отношение между подходами к распределению памяти для переменных алгоритма AES и степенью детализации, как параллелизм, эксплуатируемый процессами кодирования AES, используя CUDA. Результаты показали, что при степени детализации в 16 байт/поток была достигнута наивысшая пропускная способность в 35 Гбит/с. Показаны различия эффектов распределения памяти и степени детализации приблизительно в 2-30% для производительности в стандартной реализации. Решение о степени детализации вычислений и распределении памяти - наиболее важный фактор для эффективной обработки при шифровании AES на GPU. Кроме того, реализация с перекрыванием обработки и передачи данных обеспечила пропускную способность в 22,5 Гбит/с, включая время передачи данных.

Keywords: GPGPU, AES, accelerator.

This paper presents results of several experiments that were conducted to elucidate the relation between memory allocation styles of variables of AES and granularity as the parallelism exploited from AES encoding processes using CUDA. Results of these experiments showed that the 16 bytes/thread granularity had the highest performance. It achieved approximately 35 Gbps throughput. It also exhibited differences of memory allocation and granularity effects around 2-30% for performance in standard implementation. It shows that the decision of granularity and memory allocation is the most important factor for effective processing in AES encryption on GPU. Moreover, implementation with overlapping between processing and data transfer yielded 22.5 Gbps throughput including the data transfer time.

Введение

С появлением технологии NVIDIA CUDA подход GPGPU продолжил развитие хорошей среды исполнения по стоимости и производительности и привлек внимание ученых из различных областей [1,2].

Технология поддерживает целочисленные и логические операции, что обеспечивает новую область для логических приложений, таких как алгоритмы шифрования. Мы также заинтересованы в ускорении алгоритмов шифрования, как нечислового приложения CUDA [3]. Advanced Encryption Standard (AES) сегодня широко используется в качестве алгоритма шифрования. AES шифрование можно реализовать параллельно с легкостью в случае режимов ECB и CTR. Прежде чем CUDA была выпущена, эффективность для производительности не была хороша, хотя сообщали о некоторых исследованиях по ускорению обработки шифрования на GPU. После того, как CUDA была выпущена, появилась возможность использовать её, получив большее ускорение в работе. Тем не менее, программисты должны учитывать многочисленные факторы, чтобы использовать эту мощь, также в приложениях шифрования. Особенно такие проблемы, как оптимизация способов использования памяти различного вида на CUDA и степень детализации вычислений, доставляют много проблем.

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

AES

AES - симметричный алгоритм блочного шифрования, представленный в 2001 NIST [3], который шифрует и дешифрует блоки простого текста и шифрованного текста с помощью 128-разрядного, 192-разрядного или 256-разрядного ключа. Его единица обработки составляет 1 байт. Количество раундов шифрования зависит от размера ключа. Мы выбрали 128-битный ключ AES, который состоит из 10 раундов. Каждый раунд состоит из четырех трансформаций: SubBytes, ShiftRows, MixColumns и AddRoundKey. Финальный раунд немного отличается от других раундов: он не включает MixColumns.

AES реализуется на основе оптимизированного исходного кода ANSI C, предоставленного как часть OpenSSL, инструментария с открытым исходным кодом для SSL/TLS.

Этот алгоритм определяет раунд процессы, объединенные в трансформацию просто с помощью таблицы поиска под названием "T-box" и оператора XOR. Представляя a раунд вводом (процедура трансформации при вводе), который разделен на части по 32 бита, раунд вывод (процедура трансформации при выводе) e представлен как

©Т3[а3

где Т0, Тг, Т2 и Т3 являются таблицами поиска, и kj является j-м столбцом roundkey. Этот алгоритм включает только четыре преобразования таблицы поиска и четыре операции XOR.

Кроме того, AES имеет некоторые режимы, такие как режим электронной кодовой книги (ECB) и режим сцепления блоков шифртекста (CBC). Мы

выбираем режим ECB, потому что он может свободно использовать мощь параллельных вычислений на GPU.

Похожие работы

Кук достиг пропускной способности в 1,53 Мбит/с при AES шифровании с помощью OpenGL на NVIDIA Geforce3 Ti200 [4]. Однако его потенциал производительности составляет только 2,3% производительности CPU (Pentium IV 1,8 ГГц; Intel Corp), потому что более ранняя архитектура GPU имела неполный набор команд для вычислений общего назначения. Харрисон достиг пропускной способности в 870,8 Мбит/с при AES шифровании на GeForce 7900GT,используя Direct X9 [5].

Манавски, реализовавший CUDA-AES, достиг уровня пропускной способности в 8,28 Гбит/с с входным размером 8 МБ с помощью NVIDIA GeForce 8800GTX[6].

Ди Биаджио реализовал counter режим AES (AES-CTR) с CUDA используя NVIDIA GeForce 8800GT [7]. Эта реализация достигла уровня пропускной способности в 12,5 Гбит/с с входным размером 128 МБ, принимая во внимание гранулярность обработки. Он определил мелко структурированную архитектуру, представляющую внутренний параллелизм каждого раунда AES. Он предложил, чтобы четыре блока 32-разрядных слов были отправлены четырём скалярным процессорам. Кроме того, крупно структурированная архитектура была определена как использование высокоуровневого параллелизма, который существует между независимыми блоками открытого текста. При такой степени детализации вычислений каждая нить обрабатывает один 128-разрядный блок открытого текста.

Нишикава также рассмотрел гранулярность [8]. Он определил 16 байт/нить, когда одна нить обрабатывает один блок открытого текста, что было истинно также для крупномодульной обработки, предложенной Д. Биаджио [7]. Реализации с другой гранулярностью, такие как 4 байта/нить и 1 байт/нить были определены таким же образом, как 16 байт/нить. Было реализовано кодирование AES-ECB согласно стандартному алгоритму AES без T-box, которое достигло 6,25 Гбит/с на GeForce GTX285 [8].

Эта работа представляет обсуждение более подробной реализации AES с попыткой выявить лучшую производительность AES используя GTX285.

Реализация AES шифрования на CUDA GPU

Степень детализации показывает размер задачи, предназначенной для отправки на скалярный процессор. Степень детализации определяет, как распараллелить алгоритм AES. Важна стратегия распределения памяти CUDA, потому что есть несколько различных типов памяти. Особенности каждого типа памяти отличаются в довольно сильной степени. Различие в стратегии

распределения памяти обеспечит измеримые эффекты в производительности.

Степень детализации параллельной обработки

Определены степени детализации четырех типов, чтобы распараллелить алгоритм AES.

16 байт/нить

Использование распараллеленного подхода 16 байт/нить означает, что каждая нить независимо обрабатывает каждый блок открытого текста из 16 байтов. Эта реализация представляет в качестве преимущества снижение накладных расходов. Она не требует никакой синхронизации и никаких общих данных между нитями. Эта степень детализации использует параллелизм только между блоками открытого текста. Рисунок 1 показывает, что нити обрабатывают блоки открытого текста независимо.

Рис. 1 - Степень детализации 16 байт/поток 8 байт/нить и 4 байта/нить

Степень детализации в 8 байт/нить обрабатывает один блок открытого текста двумя потоками. Этот подход использует параллелизм между блоками открытого текста и внутренней обработкой открытого текста одновременно.

Этот метод использует разделяемую память для обмена промежуточными данными между двумя нитями и синхронизации.

Степень детализации в 4 байта/нить обрабатывает один блок открытого текста четырьмя нитями. Этот метод отличается от 8 байт/нить количеством нитей для обработки блока открытого текста. Разделяемая память и синхронизация необходима по той же самой причине, как в случае 8 байт/нить. Эти степени детализации используют больше параллелизма, чем 16 байтов/нить, хотя они используют синхронизацию и разделяемую память.

1 байт/нить

Лучше осуществлять AES обработку, шифруя, по крайней мере, 32 битовыми блоками, потому что алгоритм шифрования AES, используемый в этих исследованиях, оптимизирован для 32-битной обработки. Однако он в состоянии обработать 1 байт данных в нити. 1 байт/нить означает, что 16 нитей обрабатывают блок открытого текста согласованным способом. Эта степень детализации разработана, чтобы сравнить более ранние исследования и также другие степени детализации. Хотя эта степень детализации приведёт к неудовлетворительной производительности для GPU с 32-х битовыми операционными блоками.

Обзор доступа к памяти при распараллеленном шифровании AES на CUDA GPU

AES содержит структуры данных трех видов, как показано ниже.

1. Обычный текст, зашифрованный текст и промежуточные данные.

2. T-box.

3. Раунд ключ (раунд ключ вычислен по секретному ключу).

Когда шифрование начато, все данные хранятся в памяти на хосте. В начале обработки AES с использованием CUDA GPU, открытый текст, раунд ключ и таблицы T-box передаются в глобальную память и константную память на GPU. Чтобы ускорить обработку, данные переданы другой более скоростной памяти, такой как регистры GPU и разделяемая память. Необходимо рассмотреть особенности этих типов памяти для хранения данных в пригодном для этих данных месте.

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

Раунд ключ и T-box

T-box и раунд ключ - данные только для чтения, идентичные для всех нитей.

Согласно таким особенностям, эти переменные должны быть размещены в константной памяти. Константная память обеспечивает очень низкое время ожидания, когда система кэша работает хорошо. Относительно T-box: T-box требует произвольного доступа, таким образом, существует возможность, что они не могут обеспечить низкое время ожидания доступа.

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

Открытый текст

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

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

Используя совместно используемую память, необходимо выбрать способ хранения данных в разделяемой памяти: массив структур (Array of Structure - AoS) и структура массивов (Structure of Array -SoA). AoS имеет дело с обычным текстом, как он есть. SoA располагает N-е элементы каждого блока открытого текста последовательно. Эти способы обеспечивают различие в появлении конфликтов банков. Чтобы уменьшить количество случаев конфликтов банков, мы выбираем лучший шаблон распределения для каждой реализации.

Другие действия для оптимизации. Архитектура T-box

Оценена реализация T-box нескольких различных видов, основанных на

оптимизированной реализации OpenSSL AES. Представлены две различные реализации T-box:

1. Один 32-битный массив T-box и операция вращения (экономия памяти).

2. Предварительно вычисленный 32-битный массив T-box*4.

Сокращение переключений между блоками потоков

После того, как нити завершили шифрование блока (128 бит) открытого текста, нити возвращаются в начальное состояние и продолжают шифровать другой блок открытого текста снова. Если делать так, только малое количество нитей может зашифровать довольно много блоков. Таким образом, мы можем избежать издержки от переключений между блоками нитей в AES.

Перекрывание обработки на GPU и передачи данных

Необходимо рассмотреть издержки, относящиеся к передаче данных между центральным процессором и GPU, чтобы эффективно использовать производительность. Чтобы скрыть эти издержки, CUDA обеспечивает перекрывание передачи данных и обработки. Мы осуществили перекрывание передачи открытого текст в (и зашифрованного текст от) глобальную память GPU и процесса AES шифрования на GPU. В случае данных, разделённых на два блока: прежде, чем начать обработку AES на GPU, начата передача одного блока обычного текста на GPU. Когда передача будет закончена, кодирование AES на GPU и передача второго блока открытого текста будет начата одновременно. Когда процесс кодирования первого блока обычного текста будет закончен, процесс кодирования второго блока открытого текста и процесс возвращения результата

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

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

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

Реализован AES в этих экспериментах был следующим образом: 128-битный алгоритм шифрования AES в режиме ECB. Раунд ключ был вычислен на CPU и передан в глобальную или константную память GPU до начала шифрования AES. Открытый текст был также сгенерирован центральным процессором случайным образом. Размер открытого текста был зафиксирован на 256 МБ.

Конфигурация системы: CPU - Intel Core i7-920, память - 6 Гб, ОС - CentOs 5.3, компилятор gcc version 4.1.2, GPU NVIDA Geforce GTX 285, память GPU 1 Гб, CUDA компилятор - nvcc version 2.3.

Параметры реализации

AES реализован с большим количеством параметров. Таблица 1 показывает использованные параметры реализации.

Таблица 1

Степень детализации 16, 8, 4, 1 байт/нить

Расположение Т-Ьох константная, разделяемая память

Архитектура Т-Ьох 4 или 1 таблица

Расположение раунд ключа константная, разделяемая память

Расположение открытого текста разделяемая память (АоБ или БоА), регистры

Пропускная способность

Реализации 1-6 выполнены со степенью детализации в 16 байт/нить.

Реализация 1: расположение Т-Ьох и раунд ключа в константной памяти, открытого текста в регистрах, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 5.0 Гбит/с.

Реализация 2: расположение Т-Ьох в разделяемой памяти, раунд ключа в константной памяти, открытого текста в регистрах, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 34.4 Гбит/с.

Реализация 3: расположение Т-Ьох и раунд ключа в разделяемой памяти, открытого текста в регистрах, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 35.2 Гбит/с.

Реализация 4: расположение Т-Ьох и раунд ключа в разделяемой памяти, открытого текста в регистрах, архитектура Т-Ьох - 1 таблица. Пропускная способность составила 21.54 Гбит/с.

Реализация 5: расположение Т-Ьох, раунд ключа и открытого текста в разделяемой памяти, представление открытого текста - SoA, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 29.9 Гбит/с.

Реализация 6: расположение Т-Ьох, раунд ключа и открытого текста в разделяемой памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 21.7 Гбит/с.

Реализации 7-9 выполнены со степенью детализации в 8 байт/нить.

Реализация 7: расположение Т-Ьох и открытого текста в разделяемой памяти, расположение раунд ключа в константной памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 26.9 Гбит/с.

Реализация 8: расположение Т-Ьох, раунд ключа и открытого текста в разделяемой памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 23.9 Гбит/с.

Реализация 9: расположение Т-Ьох и открытого текста в разделяемой памяти, расположение раунд ключа в константной памяти, представление открытого текста -БоА, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 23.4 Гбит/с.

Реализации 10-12 выполнены со степенью детализации в 4 байт/нить.

Реализация 10: расположение Т-Ьох и открытого текста в разделяемой памяти, расположение раунд ключа в константной памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 25.3 Гбит/с.

Реализация 11: расположение Т-Ьох, раунд ключа и открытого текста в разделяемой памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 25.0 Гбит/с.

Реализация 12: расположение Т-Ьох и открытого текста в разделяемой памяти, расположение раунд ключа в константной памяти, представление открытого текста -БоА, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 17.1 Гбит/с.

Реализации 13 выполнен со степенью детализации в 1 байт/нить: расположение Т-Ьох, раунд ключа и открытого текста в разделяемой памяти, представление открытого текста - AoS, архитектура Т-Ьох - 4 предварительно вычисленные таблицы. Пропускная способность составила 2.9 Гбит/с.

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

Рисунок 2 показывает лучшую пропускную способность каждой степени детализации

вычислений. Результаты показывают, что реализация 16 байт/нить достигла самой высокой пропускной способности в 35,2 Гбит/с. Фактически, 16 байт/нить имеет преимущество по сравнению с другими реализациями. Эта реализация не потребовала ни совместно используемой памяти для обработки AES, ни синхронизации. Отсутствие необходимости в разделяемой памяти означает обеспечение не только быстродействующего доступа к регистрам, но также и отсутствие конфликтов банков памяти.

Степень детализации

Рис. 2 - Пропускная способность степеней детализации

Давайте теперь обсудим 8 байт/нить и 4 байта/нить. Самая высокая пропускная способность составила 26,9 Гбит/с, но у этих реализаций была почти идентичная пропускная способность. Их пропускная способность была ниже почти на 30%, чем в реализации при 16 байт/нить. Реализации на 8 и 4 байта/нить требовали, чтобы совместно используемая память хранила блоки открытого текста и промежуточные значения. Но доступ к совместно используемой памяти вызвал конфликты банков. Синхронизация и конфликты банков разделяемой памяти были главными причинами этого снижения производительности.

Реализация с 1 байт/нить достигла очень низкой пропускной способности, но никакой неожиданности в этом нет, потому что осуществлённый алгоритм был разработан с использованием 8 битовых операций, полученных из алгоритма, оптимизированного для 32 битовых операций, разделенных на четыре операции.

Расположение T-box

Должно быть рассмотрено различие в производительности между константной памятью и разделяемой памятью. Реализации типов 1 и 2 в таблице 5 показывают пропускную способность для одних и тех же случаев: архитектуры Т-Ьох, места хранения открытого текста и раунд ключа, кроме расположения в памяти Т-Ьох. В реализации типа 1 показана чрезвычайно низкая пропускная способность в 5,0 Гбит/с как результат расположения Т-Ьох в константной памяти. В отличие от этого, реализация типа 2 достигла высокой пропускной способности в 34,4 Гбит/с в результате расположения Т-Ьох в разделяемой памяти. Фактически, и у постоянной памяти, и у

разделяемой памяти почти равная способность времени ожидания доступа, но их механизмы отличаются. Константная память достигла низкого времени ожидания посредством системного кэша. Это обеспечило очень низкое время ожидания, когда требовался регулярный доступ к памяти, потому что система кэша работает хорошо в таких случаях. Т-Ьох требовала модель произвольного доступа. В результате расхождение, разделяющее реализации типов 1 и 2, показало различие производительности константной памяти для произвольного доступа и регулярного доступа. Этот результат показал, что Т-Ьох должна быть размещена в разделяемой памяти для AES. Для экономии области разделяемой памяти лучше расположить Т-Ьох в константной памяти, но совместно используемая память обеспечила достаточную область для Т-Ьох в этой реализации AES.

Теперь рассмотрим архитектуру Т-Ьох. Реализация типа 3 показала пропускную способность архитектуры четырёх Т-Ьох. Тип 4 показал пропускную способность архитектуры одной Т-Ьох. Реализация типа 4 достигла приблизительно на 40% более низкой производительности, чем реализация типа 3. Этот факт показывает, что стоимость вычисления вращения Т-Ьох оказывает влияние на производительность. Хотя архитектура с четырьмя Т-Ьох требует больше памяти, она не оказывает влияния на производительность.

Следовательно, лучше использовать архитектуру из 4-ёх Т-Ьох. Тогда Т-Ьох должна быть расположена в совместно используемой памяти.

Место расположения открытого текста

Относительно распределения открытого текста, за исключением реализации 1 байт/нить, были оценены обе реализации: массив структур (AoS) и структура массивов ^оА). Как описано в предыдущем подразделе, этот подраздел исследует результаты реализации, которые ограничены расположением Т-Ьох в совместно используемой памяти и архитектурой из четырёх Т-Ьох.

Для степени детализации вычислений в 16 байт/нить разделяемая память для открытого текста была ненужной, вместо неё использовались регистры. Кроме того, открытый текст мог быть сохранён в разделяемую память, но пропускная способность была на 15-35% ниже, чем в реализации, при которой открытый текст хранился в регистрах. При расположении открытого текста в регистрах достигнута более высокая производительность, чем при расположении открытого текста в разделяемой памяти, потому что при такой реализации отсутствуют конфликты доступа к памяти.

Сравнение пропускной способности реализации AoS и реализации SoA показывает, что реализация SoA достигла лучшей производительности, чем реализация AoS.

При степени детализации в 8 и 4 байт/нить, открытый текст должен быть сохранен в разделяемую память. Важно различие в

производительности при AoS и SoA. Реализация AoS обеспечила приблизительно на 50% лучшую производительность, чем реализация SoA при степени детализации в 4 байт/нить, и также на 12% лучшую производительность при 8 байт/нить.

Место расположения раунд ключа

Относительно расположения в памяти раунд ключа: было найдено небольшое различие в производительности. Реализация с расположением раунд ключа в совместно используемой памяти была примерно на 2% быстрее, чем реализация с расположением раунд ключа в константной памяти при степени детализации 16 байт/поток.

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

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

Реализация AES для GPU с учетом степени детализации и расположения в памяти T-box рассмотрена в [7]. Она достигла пропускной способности приблизительно в 12,5 Гбит/с при кодировании AES CTR для открытого текста размером 128 МБ, используя NVIDIA 8800GT, у которой 112 потоковых процессоров и частота процессора 1,5 ГГц. У NVIDIA GeForce GTX285, которая использована в этих экспериментах, есть 240 потоковых процессоров; частота процессора составляет приблизительно 1,5 ГГц. Сравнивая их, получаем следующие различия: существуют разница в производительности в два и более раза не только из-за числа процессоров, но также и из-за архитектуры процессора и отличий в библиотеках CUDA. Фактически, мы достигли в три раза большей пропускной способности, чем в [7]. Самая высокая пропускная способность в [7] была достигнута с архитектурой из четырёх T-box, T-box расположена в совместно используемой памяти при степени детализации в 16 байт/поток. Эти параметры реализации совпадают с теми параметрами, при которых достигнута самая высокая пропускная способность, представленная в этой статье. Эта статья также представила новые факторы, такие как большая степень детализации и изменила подходы к распределению памяти. Некоторые из них поспособствовали лучшей производительности.

Перекрывание передачи данных

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

Результаты внедрения были оценены для AES с размером открытого текста в 256 МБ. Как выведено из измерений времени передачи данных, накладные расходы составляют приблизительно 0,08 мс, которые включают обе копии, в и от глобальной памяти, от и на центральный процессор. Пропускная способность, включая это время передачи данных при 16 байт/поток (четыре T-box и раунд ключ, расположенный в совместно используемой памяти), достигла только 13,4 Гбит/с. Мы реализовали другую программу AES кодирования, в которой применено перекрывание передачи данных и AES обработки, чтобы получить лучшую производительность. Результаты показывают, что применение реализации с перекрыванием при 16 байт/поток (четыре T-box и раунд ключ, расположенный в совместно используемой памяти), достигает пропускной способности в 22,5 Гбит/с. Это означает, что перекрывание может скрыть 65% времени передачи данных.

Эта реализация делит данные открытого текста на четыре блока открытого текста. Кроме того, программы кодирования AES работали независимо друг от друга четыре раза.

Заключение

Эта работа представила анализ эффективности AES шифрования в различных условиях, таких как степень параллельности обработки и различные варианты использования памяти. Более чем в 10 раз существует различие в производительности, и была достигнута лучшая реализация AES: пропускная способность в 35,2 Gbps на GPU.

Результаты показали, что такая реализация со степенью детализации в 16 байт/поток имеет тенденцию быть эффективной. Кроме того, расположение таблицы общих данных T-box и раунд ключа в совместно используемой памяти приводит к лучшей производительности, но раунд ключа, который требует последовательного доступа, возможно хранить в константной памяти. Результаты показывают, что AES должен быть реализован со степенью детализации в 16 байт/поток с архитектурой из 4-х Т-Ьох'ов и размещением T-box в совместно используемой памяти для эффективной обработки на GPU. Однако место расположения раунд ключа не существенно для производительности: хранится ли раунд ключ в разделяемой памяти или в константной памяти.

Лучшим результатом, достигнутым в этом исследовании, была пропускная способность в 35,2 Гбит/с, которая предполагает большой потенциал

CUDA GPU для использования в качестве акселератора шифрования.

Исследования показали, что реализация с перекрыванием передачи данных и обработки на GPU достигла пропускной способности в 22,5 Гбит/с, включая передачу данных с устройства на хост. Эта пропускная способность подразумевает на 68% более быструю обработку по сравнению с ситуацией без перекрывания. Кроме того, перекрывание скрыло 65% времени передачи данных, которое показало, что GPU становится реальным акселератором для AES шифрования с перекрыванием передачи данных.

Литература

1. Гибадуллин Р.Ф., Новиков А.А., Хевронин Н.В., Перухин М.Ю. Разработка параллельного модуля генерации защищенной картографической базы данных // Вестник технол. ун-та. - 2016. - № 10. - С.102-105.

2. Гибадуллин Р.Ф., Савельев А.Г., Перухин М.Ю. Ускорение обработки SQL-запросов к базам данных на GPU посредством аппаратно-программной платформы NVIDIA CUDA // Вестник технол. ун-та. - 2016. - № 20. - С.110-116.

3. Naoki Nishikawa, Keisuke Iwai and Takakazu Kurokawa. Acceleration of the key crack against cipher algorithm using

CUDA (in Japanese). - In IEICE technical report. Computer systems 109 (168), Sendai, Japan, July 2009. - pp. 49-54.

4. Debra L. Cook, John Ioannidis, Angelos D. Keromytis, and Jake Luck. Cryptographies: Secret key cryptography using graphics cards. - In RSA Conference, Cryptographerfs Track (CT-RSA), 2005. - pp. 334-350.

5. Owen Harrison and John Waldron. AES encryption implementation and analysis on commodity graphics processing units. - In 9th Workshop on Cryptographic Hardware and Embedded Systems (CHES), 2007. - pp. 209-226.

6. Svetlin A. Manavski. CUDA compatible gpu as an efficient hardware accelerator for AES cryptography. - In IEEE International Conference on Signal Processing and Communication, ICSPC, 2007. - pp. 65-66.

7. Andrea Di Biagio, Alessandro Barenghi, Giovanni Agosta and Gerardo Pelosi. Design of a parallel AES for graphics hardware using the CUDA framework. - Parallel and Distributed Processing Symposium, International, 2009. -pp. 1-8.

8. Naoki Nishikawa, Keisuke Iwai and Takakazu Kurokawa. Granularity optimization method for AES encryption implementation on CUDA. - In IEICE technical report. VLSI Design Technologies (VLD2009-69), Kanagawa, Japan, January 2010. - pp. 107-112.

© Р. Ф. Гибадуллин - к.т.н., доц. каф. компьютерных систем КНИТУ им. А.Н. Туполева - КАИ (КНИТУ-КАИ), landwatersun@mail.ru; А. С. Яковлев - магистрант, асс. той же кафедры; А. А. Новиков - асс. той же кафедры; М. Ю. Перухин - к.т.н., доц. каф. автоматизированных систем сбора и обработки информации КНИТУ, perukhin@inbox.ru.

© R. Gibadullin - PhD associate professor of computer system department of KNRTU named after A.N.Tupolev - KAI (KNRTU-KAI), leonov.artem.d@gmail.com; А. Yakovlev - master student; assistant of the same Department; А. Novikov- assistant of the same Department; M. Perukhin - PhD, associate professor of automated systems for the collection and processing of information department of KNRTU, perukhin@inbox.ru.