Научная статья на тему 'Сравнение эффективности CPU и GPU реализаций некоторых комбинаторных алгоритмов на задачах обращения криптографических функций'

Сравнение эффективности CPU и GPU реализаций некоторых комбинаторных алгоритмов на задачах обращения криптографических функций Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
883
98
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КРИПТОАНАЛИЗ / GPU / CUDA / DPLL / SAT / SIMD / CRYPTOANALYSIS

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

Проводится сравнение эффективности CPU и GPU реализаций некоторых комбинаторных алгоритмов, используемых в криптоанализе. В частности, анализируются причины, по которым не удается эффективно реализовать на GPU алгоритмы, осуществляющие «интеллектуальный перебор». Показывается, что применение специальных техник трансформации потока управления позволяет существенно компенсировать потери производительности, возникающие из-за неэффективного исполнения условных переходов на SIMD-устройстве. Однако ограничения, которые накладывают механизмы работы с памятью, применяемые в современных GPU, для рассматриваемых алгоритмов оказываются непреодолимыми. В качестве тестовых задач рассматриваются задачи обращения криптографических функций DES и A5/1.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Булавинцев Вадим Германович

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

AN EVALUATION OF CPU VS. GPU PERFORMANCE OF SOME COMBINATORIAL ALGORITHMS FOR CRYPTOANALYSIS

In this work we assess performance of CPU and GPU implementations of some widely-used cryptanalytic combinatorial algorithms. In particular, we analyze obstacles for effective GPU im-plementation of “smart” combinatorial algorithms. Next, to alleviate performance problems arising from inefficient processing of conditional expressions in SIMD-devices we devise some special control flow graph transformation techniques. Finally, we demonstrate that contemporary GPU’s memory access schemes are incompatible with typical memory access patterns of “smart” combinatorial algorithms studied. We use DES and A5/1 cryptographic functions as test cases.

Текст научной работы на тему «Сравнение эффективности CPU и GPU реализаций некоторых комбинаторных алгоритмов на задачах обращения криптографических функций»

Вычислительная математика УДК 004.272.32, 004.832.25 DOI: 10.14529/cmsel50306

СРАВНЕНИЕ ЭФФЕКТИВНОСТИ CPU И GPU РЕАЛИЗАЦИЙ НЕКОТОРЫХ КОМБИНАТОРНЫХ АЛГОРИТМОВ НА ЗАДАЧАХ ОБРАЩЕНИЯ КРИПТОГРАФИЧЕСКИХ ФУНКЦИЙ1

В.Г. Булавинцев

Проводится сравнение эффективности CPU и GPU реализаций некоторых комбинаторных алгоритмов, используемых в криптоанализе. В частности, анализируются причины, по которым не удается эффективно реализовать на GPU алгоритмы, осуществляющие «интеллектуальный перебор». Показывается, что применение специальных техник трансформации потока управления позволяет существенно компенсировать потери производительности, возникающие из-за неэффективного исполнения условных переходов на SIMD-устройстве. Однако ограничения, которые накладывают механизмы работы с памятью, применяемые в современных GPU, для рассматриваемых алгоритмов оказываются непреодолимыми. В качестве тестовых задач рассматриваются задачи обращения криптографических функций DES и А5/1.

Ключевые слова: GPU, CUD А, криптоанализ, DPLL, SAT, SIMD.

Введение

Современные GPU предоставляют выгодное соотношение цены, производительности и энергопотребления. Многие суперкомпьютерные кластеры имеют высокий рейтинг в ТОП500, благодаря использованию GPU [1]. Однако, будучи специализированными устройствами, рассчитанными на потоковую обработку однотипных данных, GPU на многих алгоритмах не показывают значимого преимущества перед процессорами традиционной архитектуры [2]. Это обусловлено тем, что современные GPU используют SIMD-архитектуру [3] и специально рассчитанные на работу с ней контроллеры памяти [4]. GPU являются «массивно-параллельными» процессорами, т.е. вычислительными устройствами, на которых одновременно выполняется большое (по сравнению с CPU) количество вычислительных потоков. Многие алгоритмы, применяемые в криптографии и криптоанализе, имеют возможность почти неограниченного масштабирования на параллельных вычислительных архитектурах. Криптоанализ методом прямого перебора, обслуживание криптовалют [5], построение rainbow-таблиц [6] — популярные алгоритмы демонстрирующие высокую эффективность на GPU. В то же время перспективным направлением в криптоанализе является применение алгоритмов, основанных на различных подходах к «интеллектуальному» сокращению перебора. В частности, в последние годы появился ряд работ, в которых для решения задач криптоанализа используются современные SAT-решатели [7, 8]. При реализации таких алгоритмов на GPU обнаруживается, что эта архитектура совершенно не приспособлена для их эффективного выполнения: малый объем кэш-памяти, проблемы с условными переходами, узкоспециальные механизмы работы с памятью — все эти факторы приводят к тому, что, даже

1 Статья рекомендована к публикации программным комитетом Международной научной конференции «Параллельные вычислительные технологии - 2015»

после тщательной адаптации алгоритма в соответствии с рекомендациями производителя, GPU сильно проигрывают CPU в скорости и эффективности их исполнения.

До сих пор основное внимание исследователей (за редким исключением, [2]) было сосредоточено на положительных аспектах применения GPU. Настоящая работа посвящена исследованию основных причин низкой производительности «интеллектуальных» комбинаторных алгоритмов на GPU на примере алгоритма DPLL.

Статья организована следующим образом. В первом разделе приводятся сведения о исследуемых в работе криптоалгоритмах DES и А5/1, и реализации атак на них методом полного перебора и при помощи SAT-подхода (алгоритма DPLL). Во втором и третьем разделах рассматриваются основные аппаратные особенности CPU, препятствующие эффективной реализации алгоритма DPLL. Демонстрируется метод, позволяющий частично преодолеть одно из этих препятствий — проблему неэффективной обработки условных переходов на SIMD-архитектурах. В четвертом разделе приведены результаты вычислительных экспериментов, исследующих эффективность рассмотренных алгоритмов. В заключении кратко описаны выводы, следующие из работы, обсуждаются перспективы развития платформы CPU.

1. Описание использованных алгоритмов

В качестве модельных задач для исследования мы выбрали криптоалгоритмы DES и А5/1. На сегодняшний день эти алгоритмы широко распространены и хорошо изучены. Мы реализовали атаку на них двумя способами: во-первых, классическим методом «прямого перебора» (т.н. brute-force, метод «грубой силы»), во вторых — с применением SAT-подхода. Многие задачи криптоанализа можно рассматривать в контексте более общей задачи обращения дискретных функций. Последняя задача эффективно сводится к задаче поиска выполняющего набора булевой формулы (т.н. SAT-задача). Далее приведем описание реализаций на CPU брутфорс-атаки на DES и А5/1, а также реализации алгоритма DPLL, используемого для решения SAT-задач.

1.1. Криптоанализ генератора А5/1 на GPU методом полного перебора

Генератор потокового шифра А5/1 является стандартным для применения в современных сетях мобильной связи GSM. Он представляет собой [9] три независимых друг от друга регистра сдвига с линейной обратной связью (РСЛОС) длиной 19, 22 и 23 бит (всего 64 бит). РСЛОСы тактируются условно, по т.н. функции большинства («majority function»), взятой от одного бита из каждого регистра. Для получения ключевого потока выходы РСЛОСов смешиваются друг с другом. Секретным ключом является начальное заполнение РСЛОСов. Шифрование осуществляется побитовым смешиванием ключевого потока, порожденного генератором, с открытым текстом с помощью функции XOR. Протокол шифрования А5/1 продолжает использоваться, несмотря на то, что различными исследовательскими группами были продемонстрированы практические атаки на него [6, 9].

Далее мы рассматриваем задачу криптоанализа А5/1 на основе известного фрагмента ключевого потока [10]. Простейший метод криптоанализа в этом случае — полный перебор: для каждого из всех возможных вариантов секретного ключа генерируется соответствующий фрагмент ключевого потока, который сравнивается с заранее известным

образцом. Для генератора А5/1, чтобы однозначно определить секретный ключ достаточно фрагмента ключевого потока длиной 64 бит [10]. Таким образом, в худшем случае требуется для каждого из 264 ключей-кандидатов получить 64 бита выхода генератора и сравнить их с известным образцом ключевого потока. Поскольку шифр является потоковым, нет необходимости генерировать сразу все 64 битов выхода. Достаточно генерировать ключевой поток по 1 биту и, в случае его несовпадения с образцом, прерывать проверку текущего ключа-кандидата.

Мы использовали специальную реализацию алгоритма А5/1. Поскольку РСЛОСы независимы друг от друга и их длина невелика (19-23 бит), для каждого из них можно сгенерировать соответствующую непериодическую часть порождаемой ими двоичной последовательности (т.н. М-последовательность). Для используемых в А5/1 РСЛОС получаемые последовательности занимают в сумме около 2 Мбайт оперативной памяти. Затем состояние любого бита РСЛОСа для любого его такта при любом начальном заполнении может быть получено выборкой n-ого значения из соответствующей последовательности по формуле: n=(S+t+b), где S— смещение от начала последовательности, кодирующее начальное заполнение РСЛОСа; t — номер такта; b — номер бита в РСЛОСе. В таком случае вместо перебора начальных заполнений РСЛОСов в лексикографическом порядке, перебор проходит в порядке, заданном М-последовательностью. Поскольку значения в М-последовательности не повторяются, лишняя работа не производится. Эта версия алгоритма может быть реализована как на CPU, так и на CPU. Она не предъявляет специальных требований к возможностям оборудования . При переносе на CPU ускорение достигается за счет одновременной проверки многих ключей-кандидатов. Каждый из тысяч вычислительных потоков CPU проверяет один вариант ключа. Данные по скорости реализации описанной атаки на CPU приведены табл 3.

1.2. Криптоанализ алгоритма DES на GPU методом полного перебора

Блочный шифр DES являлся федеральным стандартом США с 80-х годов и активно применялся вплоть до конца XX века. DES — симметричный шифр, построенный на сети Фейстеля. Длина ключа в DES составляет всего 56 бит, что и является главной его уязвимостью. С середины 90-х годов были неоднократно продемонстрированы практичные атаки на DES, использующие «метод грубой силы» (например, [11]).

Мы реализовали брутфорс-атаку на DES в условиях известного открытого текста. Для ускорения работы алгоритма мы применили технику bitslice, повышающую эффективность использования возможностей современных вычислительных архитектур [12].

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

2 Например, для эффективной реализации алгоритма А5 в технике ЬкэНсе требуется, чтобы устройство поддерживало аппаратную инструкцию Ьйвекс^ или аналогичную ей [6].

до сих пор работают над улучшением такой схемы для DES. В нашей работе мы использовали лучшую известную на данный момент схему для DES на стандартных вентилях (И, ИЛИ, НЕ, XOR) [13].

Как и в случае А5/1, при переносе на GPU ускорение достигается за счет одновременной проверки многих ключей. Однако в данном случае каждый вычислительный поток GPU проверяет 32 ключа — за счет использования техники bitslice (для удобства сравнения версия для CPU работает в 1 поток и проверяет на нем за счет техники bitslice одновременно также 32 ключа). Данные по скорости перебора пространства ключей DES на GPU, достигнутой в результате применения описанного подхода, приведены в конце табл. 3.

1.3. Реализация алгоритма DPLL на GPU

Наиболее эффективные программы-решатели SAT-задач построены на базе классического алгоритма DPLL [14]. Он представляет собой направленный обход дерева, дополненный правилом распространения булевых ограничений (Boolean constraint propagation, ВСР). Для ускорения процедуры ВСР, которая занимает до 95 % времени работы решателя, применяются специальные «ленивые» структуры данных, т.н. «watched literals» [15]. Также, в современных решателях используется стратегия Conflict-Driven Clause Learning (CDCL): обнаружив конфликт в присвоении переменных, решатель анализирует его причины и добавляет информацию о них к основной базе ограничений в виде т.н. «конфликтного дизъюнкта». Это позволяет ускорить обход дерева, пропустив проверку переменных, не имеющих отношения к конфликту («backjumping») [16]. В дальнейшем конфликтный дизъюнкт может ускорить вывод по ВСР.

Рассмотрев различные подходы к распараллеливанию алгоритма DPLL, мы пришли к выводу, что единственный способ полностью задействовать возможности GPU, не ориентируясь при этом на особенности SAT-задач, — это запускать в каждом вычислительном потоке отдельный экземпляр алгоритма. При этом общее дерево поиска расщепляется по значениям п отдельных переменных на 2" подзадач, и каждый вычислительный поток GPU решает одну такую подзадачу. Когда поток заканчивает работу над своей подзадачей, он ищет другой поток, у которого еще есть работа, и расщепляет его подзадачу, забирая часть работы себе (при этом используется техника «work stealing» [17]).

1.4. Адаптация структур данных, используемых в DPLL, для GPU

Малый объем памяти современных GPU является одним из препятствий для реализации полноценной стратегии CDCL. Размер КНФ в задачах криптоанализа может достигать 104-106 литералов [8]. В то же время, при 2048 запущенных на GPU потоках, на каждый поток приходится не более 512 Кбайт из 1 Гбайт памяти устройства. Поэтому мы реализовали ограниченную версию CDCL, с хранением только тех дизъюнктов, которые необходимы для корректной работы нехронологического бэктрекинга [16].

Для представления дизъюнктов в памяти GPU мы разработали новые структуры данных, сокращающие потребление памяти решателем с 32 бит до 1 бита на каждый литерал КНФ. Требования к памяти GPU в нашем решателе могут быть определены по формуле: М=Ма+ппМи, где Ма — общие для всех потоков данные, Ми — индивидуальные рабочие данные потоков, пп — число потоков. К примеру, для КНФ: А5/1 Мо=1160 Кбайт, Ми= 114 Кбайт (с учетом требований выравнивания памяти для работы

на GPU). Эти 2048 потоков и общие данные КНФ при решении А5/1 (119700 литералов, 7817 переменных) занимают в памяти устройства около 270 Мбайт. Если бы мы применили схему, в которой каждый поток хранит все данные КНФ полностью, для размещения данных тех же 2048 потоков понадобилось бы не менее 1200 Мбайт. Кроме того, при запуске большого числа потоков примененная нами схема хранения является более «дружественной» к использованию кэш-памяти, т.к. до 50 % запросов к памяти в алгоритме DPLL составляют обращения к литералам. Поскольку общие для всех потоков данные занимают около 1 Мб, они могут почти полностью разместиться в кэш-памяти, быстрым доступом к которым могут воспользоваться все потоки. В случае традиционной схемы ресурсы кэш-памяти устройства были бы распределены между всеми потоками, что привело бы к значительному снижению эффективности кэширования.

2. Особенности обработки условных переходов на GPU

Современные GPU NVIDIA состоят из нескольких SIMD-ядер, называемых «мультипроцессорами». Каждый мультипроцессор обладает собственным набором регистровой памяти, кэшем LI, общей памятью, несколькими АЛУ, диспетчером команд, контроллером условных переходов и т.д. Мультипроцессоры независимы друг от друга и подключены к основной памяти устройства через кэш L2.

Для выполнения на мультипроцессоре вычислительные потоки GPU объединяются в SIMD-группы размером в 32 потока, именуемые «варпами» («warp»). Потоки в варпе выполняются в режиме «lockstep», т.е. «1 шаг — 1 одинаковая инструкция для всех потоков».

Условные переходы в SIMD обрабатываются особым образом. Если во время исполнения оператора условного перехода возникает ситуация, когда часть потоков в варпе должна выполнить один блок инструкций, а оставшиеся потоки — другой, происходит последовательное выполнение этих блоков (сериализация). Вначале будет выполнен блок, назначенный наибольшему числу потоков, затем — назначенный остальным. При сериализации потоки, не получившие инструкции, простаивают в бездействии (рис. 1). Это явление называется «warp divergence», оно является следствием экономии на управляющей логике в SIMD-архитектурах. К примеру, в результате последовательности из 5 вложенных условных переходов может возникнуть ситуация, когда из всех 32 потоков варпа в каждый момент времени будет выполняться только 1. Производительность мультипроцессора на таком участке кода при этом ухудшается пропорционально сериализации, до 32 раз. Чтобы уменьшить потери производительности от этого «SIMD-эффекта», можно применять различные техники программирования, позволяющие сократить в коде количество условных переходов и/или степень их вложенности. Далее мы описываем соответствующие техники, использованные нами при реализации на GPU нехронологического алгоритма DPLL.

УУ

г 1 1

АЛУ АЛУ АЛУ АЛУ

Значение А

1 JJ 1 to

потоки

0 1 2 3

f1 fl «jm

Ш Ж me

АЛУ простаивают в ожидании инструкции от УУ

Рис. 1. Сериализация инструкций в результате условного перехода в SIMD

2.1. Увеличение эффективности обработки условных переходов в SIMD за счет реорганизации структуры вложенных циклов

Алгоритм DPLL можно условно рассматривать как конструкцию, состоящую из 4-х вложенных циклов:

1. цикл обхода дерева поиска;

2. цикл обработки очереди переменных в ВСР;

3. цикл обработки дизъюнктов одной переменной;

4. цикл обработки литералов в отдельном дизъюнкте (цикл нижнего уровня).

Цикл обхода дерева поиска включает в себя процедуры угадывания новых переменных и backjumping'a после обнаружения конфликтного присвоения. Однако по сравнению с процедурой ВСР эти процедуры используются редко — около 95 % всего времени занимает ВСР.

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

Рис. 2. Уменьшение степени вложенности циклов (на примере алгоритма DPLL)

Для того чтобы уменьшить потери производительности от SIMD-эффекта, можно реорганизовать вложенные циклы таким образом, чтобы уменьшить степень их вложенности. Пример такой трансформации для алгоритма DPLL приведен на рис. 2. Основная ее идея состоит в том, чтобы использовать обратную дугу внешнего цикла в качестве обратной дуги внутреннего цикла, тем самым оставив лишь одну обратную дугу и один естественный цикл. Проверка необходимости повтора внешнего цикла объединяется с той же проверкой для внутреннего цикла. Операции, относящиеся к циклу верхнего уровня, при этом переставляются под условный переход-предикат. Полученный в результате граф потока управления не будет эквивалентен исходному, но при выполнении алгоритма последовательность базовых блоков всегда будет совпадать с первоначальной. Эта трансформация должна положительно сказываться на производительности не только GPU, но и современных суперскалярных CPU (упрощается работа блока предсказания ветвлений).

В нашей реализации DPLL с помощью этой техники были объединены циклы обработки очереди переменных и цикл обработки дизъюнктов одной переменной. Это позволило повысить производительность DPLL на CPU на 30-50 %. В целом применение этой и других подобных техник реорганизации условных переходов позволило увеличить производительность DPLL на CPU в 2-5 раз (в зависимости от характера решаемой задачи).

2.2. Управление условными переходами в SIMD с помощью системы «голосований»

Объединение циклов может привести и к ухудшению производительности приложения на 81МО-архитектуре (рис. 3).

ф о. ш

потоки

0 1 2 3

VI V5 vз М1

VI <11 V5d1 V3d1 V7d1

VI с12 V5 d2 V3d2

V2

V2d1 V5 dЗ V3 dЗ

V2d2 V5 d4 V3d4

V2 dЗ V5d5 V3d5

V3d6

V3d7

V3d8

Новый Новый Новый Новый

уровень уровень уровень уровень

решения решения решения решения

Объединены 2 цикла: цикл обработки очереди и цикл обработки дизъюнктов.

Объединены 3 цикла: цикл обработки очереди,цикл обработки дизъюнктов и цикл обхода дерева.

ПОТОКИ

0 1 2 3

VI V5 V3 41

VI <11 V5d1 V3d1 V7d1

Новый уровень решения

V6

VI d2 V5d2 V3d2 V6d1

V2

V2d1 V5 dЗ V3 dЗ V6d2

V2d2 V5d4 V3d4 V6dЗ

Новый

решения

VI0

V2 dЗ V5d5 V3d5 VIСШ

16 простоев

21 простой

Рис. 3. Потери производительности из-за избыточного объединения циклов

(на примере БРЬЬ)

Преимущества от более полного использования АЛУ при обработке команд внутреннего цикла могут быть нивелированы простоями при обработке стоящих под предикатом команд внешнего цикла, если их выполнение требует слишком много времени. Выясним, в каких случаях одной Э1МВ-группе выгодно перейти к обработке внешнего цикла. Введем следующие обозначения:

Та — время, выполнения инструкций внешнего цикла (цикла «а»), необходимых для

обеспечения потоков заданием для внутреннего цикла;

Ть — время, необходимое для выполнения инструкций одной итерации внутреннего

цикла (цикла «Ь»);

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

N — общее число потоков (в большинстве случаев равно размеру варпа); п — число остановившихся потоков, закончивших задания во внутреннем цикле и готовых перейти ко внешнему циклу, чтобы получить новые задания;

Рцег ) — наиболее вероятное число итераций внутреннего цикла, после которого хотя бы у одного из N потоков закончится задание;

Тъ = ТьРиег (р,Ы) — среднее время которое проведут потоки на внутреннем цикле, если у всех N потоков будут задания;

(N — п)Та — цена получения новых заданий остановившимися потоками (т.е. простои

при переходе ко внешнему циклу тех потоков, у которых работа еще есть).

Прерывать обработку внутреннего цикла и выходить на внешний цикл имеет смысл только в том случае, если от этого будет выигрыш в работе:

пТ'ъ —(N — п)Гв> 0.

Преобразовав это выражение, получим:

п > Та

N>та+гь •

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

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

Поэтому мы реализовали «ручное» управление выходом в цикл обхода дерева из цикла ВСР в DPLL. Для этого мы применили стратегию «голосований» (рис. 4) с использованием встроенных инструкций GPU Fermi [4]. Результаты голосования внутри SIMD-группы сравниваются с пороговым значением, при достижении которого группа выходит на внешний цикл, чтобы простаивающие потоки могли получить новое задание. Голосование проводится каждый раз, когда в цикле ВСР у одного из потоков заканчивается работа. Эксперименты с различными классами задач и значениями порога голосования показали, что порог должен подбираться индивидуально, в зависимости от характера решаемой задачи. В наших экспериментах в отдельных случаях удачно подобранное значение порога позволяло добиться ускорения работы решателя до 15 %. Интересным развитием этой техники может стать реализация динамического изменения порога, в зависимости от накопленной во время решения задачи статистики. По сути, управление значением порога является формой механизма предсказания ветвлений. Важно заметить, что метод голосования не является специфическим для DPLL, он может применяться в любых алгоритмах со сложной структурой вложенных циклов.

Поток 3

завершил работу. Голосование: 1 голос — нет перехода

Потоки 0,1,3 завершили работу. Голосование: 3 голоса — переход

Поток 2

завершил работу. Голосование: 1 голос — нет перехода

Рис. 4. Стратегия «голосований» за условный переход в SIMD (на примере DPLL)

3. Особенности доступа к памяти в GPU

Каждый мультипроцессор CPU способен обрабатывать несколько SIMD-групп одновременно, динамически переключаясь между ними. Это позволяет компенсировать ла-тентность основной памяти устройства: в каждый момент времени обрабатывается та SIMD-группа, данные для исполнения команд которой уже доставлены из основной памяти устройства. Если данные для текущей группы еще не готовы, мультипроцессор переключается на обработку следующей группы, и т.д. Чем больше одновременно запущено на мультипроцессоре SIMD-групп — тем лучше удается скрыть латентность памя-

ф о.

ее

1

V1 V5 V3 V7

V1 d1 V5d1 V3d1 V7dlJ

нет V1 d2 нет V5 d2 нет V3 d2

V2

V2 d1 V5 d3 V3 d3

V2 d2 V5 d4 V3 d4

V2 d3 _V5d5 V3 d5

ДА ДА нет ДА

Новый уровень решения Новый уровень решения Новый уровень решения

V17 V41 V6

V17d1 V41d1 V3 d6 V6d1

V17d2 V41d2 V3 d7 V6d2

V17d3 V41d3 V3 d8 V6d3

нет нет ДА нет

ти, тем полнее используется доступная пропускная способность памяти (ПСП). Возможность работы нескольких SIMD-групп на одном мультипроцессоре ограничена его ресурсами: регистровой памятью («registry file») и общей памятью («shared memory») [4].

3.1. Группировка запросов к памяти

В случае SIMD-архитектур обработка данных производится пакетами, состоящими из нескольких одинаковых элементов, предназначенных различным выч. потокам одной SIMD-группы. При этом запросы к памяти от всех 32-х потоков SIMD-группы должны укладываться в границы одной кэш-линии кэша L2 (128 байт для Fermi) — тогда они будут доставлены мультипроцессору в виде единого пакета данных [4]. В противном случае происходит сериализация обращений к памяти, создающая до 32 запросов вместо одного (рис. 5). Этот «эффект разреженного доступа» («uncoalesced access») приводит к кратному уменьшению эффективной ПСП.

128 байт 128 байт 128 байт

ITTTT-J.LI i i i - i i I i i i - i rl

100% группировка, 1 пакет, эфф. использования ПСП 100%

Г

зарп

50% группировка, 2 пакета, эфф. использования ПСП 50%

0% группировка, 32 пакета, эфф. использования ПСП 3%

Рис. 5. Группировка запросов к памяти CPU

Для того чтобы запросы к памяти от одной SIMD-группы всегда выполнялись максимально эффективно, достаточно чтобы соблюдалось 2 условия:

Тип данных элементов массива должен быть выровнен в соответствии с требованиями устройства.

При выполнении инструкции потоки одной SIMD-группы должны обращаться к элементам массива, последовательно расположенным в памяти устройства.

Для описанных выше атак полного перебора (в применении к А5/1 и DES) эффект разреженного доступа не создает потерь эффективности, поскольку в этих алгоритмах рабочие данные потоков умещаются в регистрах и кэше L1, и не требуют хранения в основной памяти устройства.

В DPLL последовательность обращений к элементам массивов основной памяти заранее предсказать невозможно, поэтому разреженный доступ имеет вероятностный характер и может привести к весьма существенным потерям эффективности.

3.2. Сравнение характеристик кэш-памяти и основной памяти GPU и CPU

Для компенсации эффектов фон Неймановского ограничения [18] в современных CPU и CPU применяется кэш-память, расположенная непосредственно на кристалле

устройства. Объем, скорость и алгоритмы работы кэш-памяти в CPU и CPU сравнимы друг с другом, однако на практике кэш-память выполняет в них разные роли. Например, в GPU Nvidia, построенных на основе архитектуры Fermi, кэш-память 1-го уровня выделяется из расчета 16 Кбайт (или 48 Кбайт) на один блок (одну или несколько SIMD-групп, выполняемых на одном мультипроцессоре). Такой объем кэш-памяти 1-го уровня сравним с объемом кэш-памяти 1-го уровня в CPU Intel архитектуры Nehalem. Однако, в пересчете на 1 вычислительный поток (при 32 потоках в блоке) объем ее составит в лучшем случае 1,5 Кбайт. Этого достаточно лишь для того, чтобы частично компенсировать нехватку локальных регистров мультипроцессора, используемых для хранения промежуточных результатов вычислений (т.н. «registers spilling» [4]).

Кэш-память 2-го уровня в Fermi составляет 768 Кбайт и является общей для всего устройства. Ее объем сравним с объемом кэшей 2-го и 3-го уровней в Nehalem. Однако, в случае 2048 потоков, запущенных на GPU GTX 560Ti, на один поток придется всего 0,375 Кбайт этой кэш-памяти. Очевидно, что кэш-память 2-го уровня в архитектуре Fermi не может вместить «горячие» данные всех потоков. Она используется в основном для ускорения доступа к небольшому объему данных, одновременно используемых всеми потоками, и для обработки инструкций атомарного доступа к памяти. В случаях, когда обращения вычислительных потоков к глобальной памяти CPU не локализованы, наличие кэш-памяти L2 не дает почти никаких преимуществ.

Таблица 1

Сравнение подсистем памяти CPU и CPU

Уровень подсистемы памяти CPU (Intel Nehalem) GPU (Nvidia Fermi)

Объем (байт) ПСП 128 бит (байт/с) ПСП 32 бита (байт/с) Объем (байт) ПСП 32-1024 бита4 (байт/с)

Кэш Ы 32-Ю3 45-Ю9 11-Ю9 16/48-Ю3 «8-Ю12

Кэш Ь2 256-Ю3 31-Ю9 8-Ю9 768-Ю3 16-520-Ю9

Кэш ЬЗ 8-Ю6 26-Ю9 6-Ю9 - -

Основная память 1-24-109 20-Ю9 5-Ю9 1-2-Ю9 4-128-Ю9

Данные, представленные в табл. 1 показывают, что алгоритм, скорость которого ограничена ПСП в режиме передачи 32-битных слов и хранящий данные в основной памяти устройства, покажет 0,8-21-кратное ускорение при переносе с CPU Nehalem на GPU Fermi, в зависимости от того, насколько сгруппированными окажутся обращения к памяти при решении конкретной задачи. «Дружественность» структур данных к кэшпамяти и особенности конкретной задачи могут улучшить эту оценку.

До 95 % времени работы алгоритма DPLL занимает процедура ВСР. В основном она состоит из непредсказуемой последовательности обращений к массивам литералов, watched-флагов и состояний переменных. Поэтому скорость DPLL ограничена, как пра-

3 TT TT

Вместительность и ПСП кэшей и основной памяти CPU и GPU приведены на примере архитектур Intel Nehalem и GPU Nvidia Fermi. ПСП для CPU приведены для 1 потока/ядра [19], для GPU — для всего устройства целиком (оценены по материалам [4]).

4 В зависимости от степени выраженности описанного выше «эффекта разреженного доступа».

вило, латентностью памяти в режиме произвольного доступа. Если же латентность памяти не является сдерживающим фактором, производительность алгоритма будет зависеть от реальной ПСП устройства в режиме передачи коротких слов (1-32 бит).

В DPLL при 2048 потоках, запущенных на CPU занимаемый рабочими данными потоков, объем памяти устройств, составит около 300 Мбайт, в зависимости от числа литералов и переменных в КНФ. Поскольку «горячая область» памяти в каждой подзадаче/потоке будет разной, маловероятно, что наличие кэша L2 существенно повлияет на производительность устройства.

В описанных выше алгоритмах криптоанализа DES полным перебором кэш L1 активно используется для компенсации нехватки регистров. В случае же А5/1 наличие у CPU кэша L2 заметно влияет на производительность, поскольку он способен вместить большую часть данных, к которым обращаются все потоки во время работы.

4. Экспериментальная проверка производительности DPLL на GPU

Для того, чтобы сравнить эффективность механизмов использования памяти в CPU и CPU мы построили CPU-версию нашего CPU-решателя (с теми же структурами данных и алгоритмическими особенностями, которые были описаны выше). При его тестировании на SAT-задачах, кодирующих криптоанализ А5/1, было обнаружено, что все 100% запросов к памяти обслуживаются из кэша. Аналогичная картина наблюдается и для сторонних решателей (например, minisat [20]). При работе с памятью CPU на тех же самых тестовых задачах мы наблюдаем совершенно иную картину.

Основной мерой производительности для DPLL было выбрано число просмотров индивидуальных вхождений литералов в дизъюнкты. Эта мера совместима не только между различными аппаратными платформами, но и между различными решателями на базе DPLL и дает хорошее представление о базовой скорости работы алгоритма. Для обеспечения повторяемости результатов work stealing отключался. Чтобы обеспечить все потоки равномерной нагрузкой решатель принудительно выводился в область поиска, в которой ни одна из розданных потокам подзадач не решалась за время эксперимента.

В качестве меры производительности алгоритма прямого перебора было выбрано число ключей соответствующего шифра (DES или А5/1), проверяемых в секунду. Эта мера также является совместимой между различными аппаратными платформами и реализациями алгоритма прямого перебора.

4.1. Влияние SIMD-эффекта и эффекта разреженного доступа на производительность DPLL на GPU

Продемонстрируем, как группировка запросов к памяти и SIMD-эффект влияют на эффективность выполнения DPLL на CPU. Для этой цели мы специально построили различные тестовые версии решателя, в которых искусственно вводились негативные и позитивные факторы, влияющие на сериализацию запросов к памяти и инструкций в SIMD-группе, и, как следствие — на производительность приложения на CPU (табл. 2).

Опишем модификации, применявшиеся для получения тестовых вариантов приложения:

1) Нормальная/перемешанная индексация памяти. Если случайным образом перемешать номера вычислительных потоков между SIMD-группами, SIMD-группе при-

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

2) Одинаковые/разные подзадачи в SIMD-группе. Отдавая всем потокам внутри SIMD-группы на решение одну и ту же подзадачу, можно гарантировать отсутствие SIMD-эффекта, т.к. последовательность выполнения потоками инструкций при одинаковых начальных условиях строго детерминирована.

3) Параллельное/последовательное выполнение инструкций в SIMD-группе. Для гарантированного получения 100 % SIMD-эффекта, достаточно сделать так, чтобы внутри одной SIMD-группы алгоритм, выполнялся потоками последовательно: вначале код алгоритма полностью выполняется только одним потоком, затем полностью выполняется другим потоком и т.д.

В табл. 2 представлены 8 тестовых вариантов приложения, реализующих все возможные сочетания описанных выше модификаций нашей реализации DPLL для GPU. Тестирование производилось на КНФ кодирующей задачу криптоанализа DES. Обмены задачами между потоками (work stealing) были выключены. Порядок угадывания переменных в различных подзадачах выбирался случайным образом, что соответствует состоянию решателя после продолжительной работы. В качестве меры производительности использовалась скорость просмотра литералов решателем в процедуре ВСР.

Таблица 2

Производительность DPLL на GPU в зависимости от режима доступа к памяти и SIMD-

эффекта.

Тестовый вариант приложения № 1 № 2 № 3 № 4 № 5 № б5 № 7 № 8

Индексация памяти: (+) нормальная, (—) перемешанная. - + - + - + - +

Подзадачи в 81МО-группе: (+) одинаковые, (—) разные. - - + + - - + +

Обр. инструкций: (+) паралл., (—) последовательная. - - - - + + + +

(+) 100 % эффективность доступа к памяти. +

(+) 100 % отсутствие «81МО-эффекта». + +

Производительность ОРЕЕ, млн. просмотров в 17,5 17,5 17,0 15,6 28,9 31,2 37,6 471,3

Из данных табл. 2 видно, что только при 100 % эффективности доступа к памяти (вариант № 8) DPLL демонстрирует высокий уровень производительности на GPU. Вариант № 8 в десятки раз опережает другие тестовые варианты, включая № 6, соответствующий рабочему режиму решателя. 100 % эффективность доступа к памяти в варианте № 8 является следствием полного отсутствия сериализации обращений к памяти в результате эффекта разреженного доступа, SIMD-эффекта, или по иным причинам. Если бы на производительность DPLL на GPU негативно влиял только «SIMD-эффект», разница в производительности между вариантами № 7 и № 8 не была бы столь велика.

Тестовый вариант №6 соответствует рабочему режиму решателя.

Непредсказуемость пути поиска в DPLL, перемешанная индексация памяти, последовательное выполнение инструкций — любой из этих факторов приводит к 100 % сери-ализации обращений к памяти, что буквально обрушивает производительность GPU, снижая ее в десятки раз. Следует обратить внимание на то, что искусственное форсирование 100% сериализации описанными выше способами слабо влияет на скорость выполнения DPLL на CPU в рабочем режиме (переход от № 6 к № 7). Это говорит о том, что обращения к памяти в рабочем режиме DPLL совершенно хаотичны, вызывают сильнейший «эффект разреженного доступа» и, как следствие, обрабатываются почти на 100 % в серийном режиме. Фактически, это сводит на нет все преимущества SIMD-архитектуры.

Кроме того, в силу сложности алгоритма, скомпилированный для CPU код DPLL использует довольно много регистровой памяти. Из-за этого нам пришлось искать компромисс между запуском числа SIMD-групп, достаточного для компенсации латентно-сти памяти (высокий показатель «occupancy»), и эффектом переполнения регистровой памяти («register spilling») [4]. Это означает, что требования DPLL к числу регистров слишком велики для CPU поколения Fermi.

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

Таким образом, архитектура памяти современных CPU совершенно не подходит для выполнения сложных комбинаторных алгоритмов, таких как DPLL, в силу следующих причин:

1) Латентность доступа к основной памяти CPU высока.

2) Низкое число регистров в мультипроцессорах не позволяет запускать на них достаточно SIMD-групп, чтобы компенсировать латентность доступа к памяти за счет переключения между ними.

3) Контроллер доступа к памяти в CPU рассчитан на выборку сплошных диапазонов памяти, лежащих в пределах одной кэш-линии и передачу этой информации мультипроцессору целиком. Однако, при решении реальных задач с помощью алгоритма DPLL вероятность того, что хотя бы 2 потока одной SIMD-группы обратятся одновременно к одной кэш-линии, крайне мала. На практике это приводит к очень высокому эффекту разреженного доступа и падению эффективной ПСП в десятки раз.

4) Малый объем кэш-памяти CPU не позволяет компенсировать проблемы с ПСП и латентностью памяти.

4.2. Сравнение производительности алгоритмов полного перебора и DPLL на CPU и GPU

В табл. 3 приведены результаты тестирования скорости криптоанализа генератора А5/1 и блочного шифра DES на CPU и CPU, реализованного с помощью алгоритмов прямого перебора и SAT-подхода (алгоритм DPLL). Для алгоритмов прямого перебора скорость оценивалась как число ключей, проверяемых за единицу времени («кл/с»).

В силу применения алгоритма work stealing поведение решателя на CPU не является строго детерминированным. Поэтому в качестве показателя скорости работы алгоритма DPLL, совместимого между CPU и CPU, использовалось число просмотров литералов в дизъюнктах в процедуре ВСР за единицу времени («п/с»). При этом в версии DPLL для CPU число просмотров литералов суммировалось по всем потокам.

Для тестирования были использованы CPU Intel Core i7 930 и GPU Nvidia Geforce GTX560 Ti. Ha CPU многопоточность не использовалось.

Также, для оценки потенциальных вычислительных возможностей GPU, каждый алгоритм был протестирован в специальной версии, в которой все вычислительные потоки устройства выполняли одинаковую подзадачу, независимо друг от друга. В таком случае доступ к памяти организован полностью в соответствии с рекомендациями производителя, и потери производительности из-за условных переходов сведены к нулю (100 % «memory coalescence» и нулевой «warp divergence» в терминологии NVIDIA [4]).

Таблица 3

Сравнение скорости комбинаторных алгоритмов на CPU и GPU

Алгоритм CPU GPU Коэфф. ускорения GPU тест, одинак. подзадачи. Коэфф. ускорения

Брутфорс А5/1 48 млн. кл/с 9761 млн. кл/с 203,3 12271 млн. кл/с 255,6

Брутфорс DES 12 млн. кл/с 1493 млн. кл/с 124,4 1908 млн. кл/с 159,0

DPLL А5/1 21 млн. п/с 84 млн. п/с 4,0 650 млн. п/с 30,9

DPLL DES 25 млн. п/с 195 млн. п/с 5,0 1053 млн. п/с 42,1

Данные, представленные в табл. 3 показывают, что алгоритм DPLL не выигрывает от переноса на GPU, в отличие от более простых способов криптоанализа.

Заключение

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

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

Работа была поддержана грантом РФФИ № llr07-001h03-a. Литература

1. ТОР500 Supercomputer Site URL: http://www.top500.org (дата обращения:

01.01.2015).

2. Lee, V.W. Debunking the 100Х GPU vs. CPU myth: an evaluation of throughput computing on CPU and GPU / V.W. Lee et al // ACM SIGARCH Computer Architecture News. — ACM, 2010. — Vol. 38, No. 3. — P. 451-460. DOI: 10.1145/1816038.1816021.

3. Flynn, M. Some computer organizations and their effectiveness / M. Flynn // Computers, IEEE Transactions on. — 1972. — Vol. 100, No. 9. — P. 948-960. DOI: 10.1109/tc.l972.5009071.

4. CUDA С Best Practices Guide — CUDA SDK v.6.0 — NVIDIA corp. — 2014. URL: http://docs.nvidia.com/cuda (дата обращения: 15.07.2014).

5. Percival, С. The scrypt Password-Based Key Derivation Function. — IETF Draft -2012 / C. Percival, S. Josefsson URL: http://tools.ietf.org/html/josefsson-scrypt-kdf-OO.txt (дата обращения: 30.11.2012).

6. Nohl, К. Attacking phone privacy / K. Nohl // Black Hat USA. — 2010. URL: https://srlabs.de/blog/ wp-content/uploads/2010/07/

Attacking.Phone_.Privacy_Karsten.Nohl_l.pdf (дата обращения: 01.01.2015).

7. Mironov, I. Applications of SAT solvers to cryptanalysis of hash functions / I. Mironov, L. Zhang // Theory and Applications of Satisfiability Testing-SAT 2006. — Springer, 2006. — P. 102-115. DOI: 10.1007/11814948 13.

8. Semenov, A. Parallel logical cryptanalysis of the generator A5/1 in BNB-Grid system / A. Semenov et al. // Parallel Computing Technologies. — Springer, 2011. — P. 473-483. DOI: 10.1007/978-3-642-23178-0_43.

9 Biryukov, A. Real Time Cryptanalysis of A5/1 on a PC / A. Biryukov, A. Shamir, D. Wagner // Fast Software Encryption. — Springer, 2001. — P. 1-18. DOI: 10.1007/3-540-44706-7_l.

10 Golic, J.D. Cryptanalysis of alleged A5 stream cipher / J.D. Golic // Advances in Cryp-tology—EUROCRYPT'97. — Springer, 1997. — P. 239-255. DOI: 10.1007/3-540-69053-0_17.

11 Kumar, S. Breaking ciphers with COPACOBANA — a cost-optimized parallel code breaker / S. Kumar et al. // Cryptographic Hardware and Embedded Systems-CHES 2006. — Springer, 2006. — P. 101-118. DOI: 10.1007/11894063_9.

12 Kwan, M. Reducing the Gate Count of Bitslice DES / M. Kwan // IACR Cryptology ePrint Archive. — 2000. — Vol. 2000. — P. 51.

13 John the Ripper password cracker — 2013 URL: http://www.openwall.com/john (дата обращения: 02.07.2014).

14 Davis, M. A machine program for theorem-proving / M. Davis, G. Logemann, D. Love-land // Communications of the ACM. — 1962. — Vol. 5, No. 7. — P. 394-397. DOI: 10.1145/368273.368557.

15 Moskewicz, M.W. Chaff: Engineering an efficient SAT solver / M.W. Moskewicz et al. // Proceedings of the 38th annual Design Automation Conference. — ACM, 2001. — P. 530-535. DOI: 10.1109/dac.2001.935565.

16 Marques-Silva, J.P. GRASP: A search algorithm for propositional satisfiability / J.P Marques-Silva, K.A. Sakallah // Computers, IEEE Transactions on. — 1999. -Vol. 48, No. 5. — P. 506-521. DOI: 10.1109/12.769433.

17 Blumofe, R.D. Scheduling multithreaded computations by work stealing / R.D. Blumofe, C.E. Leiserson // Journal of the ACM (JACM). — 1999. — Vol. 46, No. 5. — P. 720748. DOI: 10.1145/324133.324234.

18 Backus, J. Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs / J. Backus // Communications of the ACM. — 1978.

-Vol. 21, No. 8. — P. 613-641. DOI: 10.1145/359576.359579.

19 Molka, D. Memory performance and cache coherency effects on an Intel Nehalem multiprocessor system / D. Molka et al. // PACT'09. 18th International Conference on Parallel Architectures and Compilation Techniques. — IEEE, 2009. — P. 261-270. DOI: 10.1109/pact.2009.22.

20 Een, N. MiniSat: A SAT solver with conflict-clause minimization / N. Een, N. Sorensson // Proceedings of the International Symposium on the Theory and Applications of Satisfiability Testing (2005). — 2005. — Vol. 5. — P. 55.

Булавинцев Вадим Германович, программист, лаборатория дискретного анализа, Институт динамики систем и теории управления им. В.М. Матросова СО РАН (Иркутск, Российская Федерация), [email protected].

Поступила в редакцию 10 апреля 2015 г.

Bulletin of the South Ural State University Series "Computational Mathematics and Software Engineering"

2015, vol. 4, no. 3, pp. 67-84

DOI: 10.14529/cmsel50306

AN EVALUATION OF CPU VS. GPU PERFORMANCE OF SOME COMBINATORIAL ALGORITHMS FOR CRYPTO ANALYSIS

V.G. Bulavintsev, Matrosov Institute for System Dynamics and Control Theory of Siberian Branch of Russian Academy of Sciences (Irkutsk, Russian Federation) [email protected]

In this work we assess performance of CPU and GPU implementations of some widely-used cryptanalytic combinatorial algorithms. In particular, we analyze obstacles for effective GPU implementation of "smart" combinatorial algorithms. Next, to alleviate performance problems arising from inefficient processing of conditional expressions in SIMD-devices we devise some special control flow graph transformation techniques. Finally, we demonstrate that contemporary CPU's memory access schemes are incompatible with typical memory access patterns of "smart" combinatorial algorithms studied. We use DES and A5/1 cryptographic functions as test cases.

Keywords: GPU, CUDA, cryptoanalysis, DPLL, SAT, SIMD.

References

1. TOP500 Supercomputer Site URL: http://www.top500.org (accessed: 01.01.2015).

2. Lee V.W. et al. Debunking the 100X GPU vs. CPU Myth: an Evaluation of Throughput Computing on CPU and GPU // ACM SIGARCH Computer Architecture News. ACM, 2010. Vol. 38, No. 3. P. 451-460. DOI: 10.1145/1816038.1816021.

3. Flynn M. Some Computer Organizations and Their Effectiveness // Computers, IEEE Transactions on. 1972. Vol. 100, No. 9 P. 948-960. DOI: 10.1109/tc.l972.5009071.

4. CUDA C Best Practices Guide CUDA SDK v.6.0 NVIDIA corp. 2014. URL: http://docs.nvidia.com/cuda (accessed: 15.07.2014).

5. Percival C., Josefsson S. The scrypt Password-Based Key Derivation Function. IETF Draft URL: http://tools.ietf.org/html/josefsson-scrypt-kdf-00.txt (accessed: 30.11.2012).

6. Nohl K. Attacking phone privacy // Black Hat USA. 2010. URL: https://srlabs.de/blog/ wp-content/uploads/2010/07/ Attacking.Phone_.Privacy_Karsten.Nohl_l.pdf (accessed: 01.01.2015).

7. Mironov I., Zhang L. Applications of SAT Solvers to Cryptanalysis of Hash Functions // Theory and Applications of Satisfiability Testing-SAT 2006. Springer, 2006. P. 102-115. DOI: 10.1007/11814948 13.

8. Semenov A. et al. Parallel Logical Cryptanalysis of the Generator A5/1 in BNB-Grid System // Parallel Computing Technologies. Springer, 2011. P. 473-483. DOI: 10.1007/978-3-642-23178-0_43.

9. Biryukov A., Shamir A., Wagner D. Real Time Cryptanalysis of A5/1 on a PC // Fast Software Encryption. Springer, 2001. P. 1-18. DOI: 10.1007/3-540-44706-7_l.

10. Golic J.D. Cryptanalysis of Alleged A5 Stream Cipher // Advances in Cryptology— EUROCRYPT'97. Springer, 1997. P. 239-255. DOI: 10.1007/3-540-69053-0_17.

11. Kumar S. et al. Breaking Ciphers With COPACOBANA — a Cost-Optimized Parallel Code Breaker // Cryptographic Hardware and Embedded Systems-CHES 2006. Springer, 2006. P. 101-118. DOI: 10.1007/11894063_9.

12. Kwan M. Reducing the Gate Count of Bitslice DES IACR Cryptology ePrint Archive. 2000. Vol. 2000. P. 51.

13. John the Ripper password cracker 2013 URL: http://www.openwall.com/john/ (accessed: 02.07.2014).

14. Davis M., Logemann G., Loveland D. A Machine Program for Theorem-Proving // Communications of the ACM. 1962. Vol. 5, No. 7. P. 394-397. DOI: 10.1145/368273.368557.

15. Moskewicz M.W. et al. Chaff: Engineering an Efficient SAT Solver // Proceedings of the 38th Annual Design Automation Conference. ACM, 2001. P. 530-535. DOI: 10.1109/dac.2001.935565.

16. Marques-Silva J.P., Sakallah K.A. GRASP: A Search Algorithm for Propositional Satisfiability // Computers, IEEE Transactions on. 1999. Vol. 48, No. 5. P. 506-521. DOI: 10.1109/12.769433.

17. Blumofe R.D., Leiserson C. E. Scheduling Multithreaded Computations by Work Stealing // Journal of the ACM (JACM). 1999. Vol. 46, No. 5. P. 720-748. DOI: 10.1145/324133.324234.

18. Backus J. Can Programming Be Liberated from the von Neumann Style?: a Functional Style and Its Algebra of Programs // Communications of the ACM. 1978. Vol. 21, No. 8. P. 613-641. DOI: 10.1145/359576.359579.

19. Molka D. et al. Memory Performance and Cache Coherency Effects on an Intel Nehalem Multiprocessor System // PACT'09. 18th International Conference on. Parallel Architectures and Compilation Techniques. IEEE, 2009. P. 261-270. DOI: 10.1109/pact.2009.22.

20. Een N., Sorensson N. MiniSat: A SAT Solver with Conflict-Clause Minimization // Proceedings of the International Symposium on the Theory and Applications of Satisfiability Testing (2005). 2005. Vol. 5. P. 55.

Received April 10, 2015.

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