Математические модели
С.А. Желтов
АДАПТАЦИЯ МЕТОДА ШЕРМАНА-ЛЕМАНА
РЕШЕНИЯ ЗАДАЧИ ФАКТОРИЗАЦИИ К ВЫЧИСЛИТЕЛЬНОЙ АРХИТЕКТУРЕ СТОА
Статья посвящена некоторым аспектам организации параллельных вычислений и использования технологии ОРОРИ для решения задач факторизации целых чисел. Основные разделы посвящены обзору вычислительной архитектуры CUDA, ее особенностей и адаптации метода Шермана-Лемана к параллельным вычислениям на графических устройствах.
Ключевые слова: параллельные вычисления, факторизация целых чисел, архитектура CUDA.
К числу актуальных задач характеризуемых высокой вычислительной сложностью, относятся задачи, используемые в приложениях информационной безопасности (ИБ).
Задача факторизации целых чисел1 лежит в основе целого ряда асимметричных криптографических систем, используемых в самых различных областях социально-экономической деятельности. Наиболее известной криптосистемой такого рода является система RSA2, используемая для защиты программного обеспечения в схемах цифровой подписи, в открытой системе шифрования PGP и других системах шифрования, например в DarkCryptTC и формате xdc.
Формально задачу факторизации целых чисел можно сформулировать следующим образом: для заданного числа n е Z надо найти его разложение на простые множители pieN, такие что
n = ПрА a eN.
i=i
© Желтов С.А., 2012
Адаптация метода Шермана-Лемана решения задачи факторизации...
Задача относится к классу NP и на сегодняшний день не известны методы ее решения полиномиальной сложности.
Наряду с разработкой новых эффективных методов и алгоритмов общим магистральным направлением снижения практических временных затрат на решение задач указанного класса остается выбор эффективной модели вычислений на существующих классах архитектур вычислительных систем, что требует соответствующей адаптации методов и алгоритмов к выбранной модели вычислений3. В рамках классической модели вычислений А. Тью-ринга-Дж. Неймана основным направлением снижения временных затрат является распределение требуемого объема информационно-вычислительной работы по совокупности параллельно работающих вычислителей.
Организация параллельных вычислений базируется на совокупности различных подходов. Принципиально важными решениями в повышении производительности параллельных вычислительных систем являются: введение конвейерной организации выполнения команд; включение в систему команд векторных операций, позволяющих одной командой обрабатывать целые массивы данных; распределение вычислений на множество процессоров. Все больше развитие в настоящее время получает и параллельное программирование на графических процессорах современных видеокарт. Наиболее удобный инструмент для организации параллельных вычислений предлагает компания Nvidia.
1. Архитектура CUDA
В статье будем использовать следующие определения и понятия.
Параллельные вычисления (параллельная обработка) - это использование нескольких или многих вычислительных устройств для одновременного выполнения разных частей одной программы.
Задача параллельных вычислений - создание ресурса параллелизма (распараллеливания алгоритмов) в процессах решения задач и управление реализацией этого параллелизма с целью достижения наибольшей эффективности использования многопроцессорной техники.
Параллельный алгоритм - алгоритм, операции которого могут выполняться одновременно4.
GPGPU - технология использования графического процессора видеокарты для расчетов в приложениях для общих вычислений.
GPU-устройство - видеоадаптер, поддерживающий технологию GPGPU и драйвер CUDA или другое специализированное ус-
С.А. Желтов
тройство, предназначенное для исполнения программ, использующих CUDA (например, Nvidia Tesla).
Host-код - часть программы для архитектуры CUDA, выполняемая на центральном процессоре (CPU).
Kernel-код - часть программы для архитектуры CUDA, выполняемая на GPU- устройстве5.
Первый комплект инструментов для доступа к инструкциям графического ускорителя был представлен Nvidia в 2007 г.
Nvidia CUDA - это архитектура, т. е. совокупность программных и аппаратных средств, которые позволяют производить на GPU компании Nvidia, поддерживающих технологию GPGPU, вычисления общего назначения.
GPU-устройства имеют свою собственную оперативную память, доступ к которой осуществляется посредством шины PCIExpress. Программа для такой архитектуры состоит из host-кода, написанного на языке С, и kernel-кода, который пишется на специальном языке.
Вычислительная архитектура CUDA основана на концепции «одна команда на множество данных» (Single Instruction Multiple Data, SIMD) и понятии мультипроцессора.
При использовании SlMD-устройств надо сформировать последовательность команд, сконфигурировать вычислительные устройства (мультипроцессоры) и передать данные на обработку. Эта последовательность действий для CUDA SDK представлена на рис. 1. Программист пишет kernel-код, который будет обрабатывать множество данных, и задает конфигурацию GPU.
Особенностью архитектуры CUDA является блочно-сеточная организация, необычная для многопоточных приложений. GPU представляет собой массив из отдельных вычислительных ядер.
Использование CUDA предполагает разбиение задачи на независимые части (блоки), которые могут выполняться параллельно. Далее каждый блок разбивается на множество параллельно выполняющихся потоков (thread). CUDA обеспечивает средства расширения языка C для параллельного запуска множества потоков на GPU, выполняющих одну и ту же функцию (ядро). Теоретически максимальный размер ядра - 2 млн инструкций PTX. Потоки объединяются в блоки (до 512 потоков), блоки объединяются в сетки, или решетки (grid). Потоки внутри блока запускаются на одном мультипроцессоре (далее - MP), имеют общую разделяемую память и могут (должны) синхронизовать ход выполнения задачи.
Адаптация метода Шермана-Лемана решения задачи факторизации...
Рис. 1. Элементы конфигурации ОРИ
МР состоит из «простых» процессоров, пула регистров, разделяемой памяти и планировщика команд. Планировщик команд последовательно разбивает потоки активного блока на порции (шагр), по 4 на каждый «простой» процессор и выполняет по одной простой команде одновременно для всех потоков порции за 4 цикла. Для исполнения одной команды порции потоков МР должен загрузить операнды для всех потоков порции, выполнить команду (одновременно), записать результат. По завершению всех потоков блока, ресурсы МР освобождаются, и на него может быть распределен следующий блок.
Количество потоков в блоке и количество блоков в решетке выбирается программистом исходя из максимизации загрузки ресурсов МР и с учетом аппаратных ограничений (количество регистров, разделяемой памяти и т.д.). Блоков должно быть больше числа МР, чтобы не было простоя во время чтения из памяти. Количество потоков в блоке должно быть кратно размеру порции.
При реализации многих алгоритмов на технологической платформе CUDA без их адаптации к архитектуре прироста производительности, как правило, не происходит. Одна из причин этого
С.А. Желтов
в том, что ветвление, выполняемое внутри порции, сильно замедляет работу ядра. Стоит отметить, что не все задачи подходят для SIMD- архитектур. GPU предназначен для вычислений с большим параллелизмом и интенсивной арифметикой. Для эффективного использования графических процессоров нужно стараться разбить алгоритм на такие части, чтобы они могли эффективно выполняться в стиле SIMD. При программной реализации алгоритма необходимо особое внимание уделять выбору и использованию памяти. Например, если все задачи одного блока обращаются к одному и тому же участку памяти или близко расположенным участкам, то следует помещать данные в текстурную или константную память. Для двухмерных данных лучше использовать текстурную память, она специально оптимизирована под двухмерную выборку.
2. Адаптация метода Шермана-Лемана
к вычислительной архитектуре CUDA
Для успешной адаптации алгоритма метода Шермана-Лема-на6 надо, во-первых, определить количество вычислительных ядер используемого GPU. Во-вторых, алгоритм метода Шермана-Лемана надо проанализировать на предмет разделения его операций на два класса: выполняемые на CPU и выполняемые на GPU. Выполнять алгоритм целиком на GPU заведомо нецелесообразно, так как без использования CPU не осуществить ввод-вывод данных для обработки GPU, и некоторые операции ветвления быстрее выполнить на CPU. Алгоритм состоит из нескольких этапов7, поэтому анализ операций и их разбиение на классы придется проводить для каждого этапа.
Алгоритм Шермана-Лемана (модифицированный)
Шаг 1. Проверить делимость числа n на все числа из множества {ai} = {3, ..., |_VnJ}, все операции этого шага попадают во второй класс и выполняются параллельно для всех чисе ai. Определим число вычислительных ядер через k. Возможны две ситуации:
h > k или h > k, где h = | {ai}| = | {3, ..., LVn J}| - количество чисел. Первый случай тривиален, время выполнения первого этапа сократится в k раз. Во втором потребуется организация нескольких шагов, на каждом из которых будет проверяться делимость числа n на очередные k экземпляров ai. Вообще говоря, количество таких
шагов может быть равно l = + 1. По окончании каждого шага 88
Адаптация метода Шермана-Лемана решения задачи факторизации...
необходимо делать вывод о переходе к следующему шагу алгоритма или завершении работы алгоритма. Время реализации первого этапа алгоритма будет равно времени выполнения l операций деления. При последовательном выполнении алгоритма число проверок равнялось количеству операций деления, т. е. 1ЛП J.
Шаг 2.
2.1. Для всех пар чисел (k, d) k = 1, 2,. \StnJ, d = 0, 1,. L4 4\ + 1 проверить выполнение условия
d(4Vkn + d) = с2, с e Z. (1)
Последнее осуществляется параллельным образом.
2.2. Вычислить величины A = \?Jkn J + d и в = -vA - 4kn ), соответствующие парам чисел (k, d).
2.3. Для значений A и B, для которых выполнилось условие (1), проверить условие A2 = B2 (mod(n)).
Шаг 3. Для значений A и B, прошедших проверку пункта 2.3., проверить выполнение условия 1<(A ± B, n) < n. Если оно выполнено, то делитель найден.
Последнее двойное неравенство целесообразно выполнять на CPU, так как таких проверок мало, а проверка ветвлений на GPU выполняется достаточно медленно.
3. Вычислительный эксперимент
Для экспериментальной оценки эффективности вычислений в архитектуре GPU были задействованы следующие технологические платформы:
- AMD Phenom II (x3) 720 2.80 ГГц, оперативная память 2 Гб;
- Nvidia GeForce GT 240 96 вычислительных ядер CUDA, оперативная память 512 Мб;
- Nvidia GeForce GTX 560 336 вычислительных ядер CUDA, оперативная память 1024 Мб.
Результаты вычислительных экспериментов приведены в таблице.
Как видно, время вычислений при использовании параллельных вычислений на GPU в несколько раз меньше, чем на CPU. Эффективность вычислений зависит от способа распараллеливания алгоритма, при этом время вычислений зависит еще и от технологической платформы GPU.
Как видно из таблицы, при увеличении вычислительных ядер GPU-устройства в 3,5 раза время вычислений сокращается в 2 раза
С.А. Желтов
Таблица
Результаты вычислительных экспериментов
Факторизуемое число (n = pq) Размер- Время решения t, ms
ность числа (бит) CPU, 2,8 Гц, 2048 Мб GPU, 96 ядер CUDA, 512 Мб GPU, 336 ядер CUDA, 1024 Мб
223550209643=524287 х426389 38 9 2,17 0,95
35785968397=2124679 х 16843 36 4 1,9 0,95
17549235333121=16769023 х 1046527 44 11 4,40 2,02
и даже больше. Стоит отметить, что стоимость увеличения производительности в данном случае составляет чуть более 100 долл., что несравнимо со стоимостью любого CPU. При использовании более мощных GPU-устройств или специализированных решений Nvidia следует ожидать прироста производительности в несколько раз и снижения временных затрат на несколько порядков.
Выводы
Результаты проведенных вычислительных экспериментов показывают, что адаптация метода Шермана-Лемана к архитектуре CUDA позволяет снизить практические временные затраты на решение задачи факторизации целых чисел от нескольких раз до нескольких порядков в зависимости от сомножителей разлагаемого числа. Учитывая, что стоимость простейшей кластерной системы на основе стандартных комплектующих в несколько десятков раз больше, чем стоимость аналогичного по вычислительной мощности СРи-устройства, эффективность и целесообразность использования технологии СРСРи при решении задач факторизации целых чисел очевидна.
Автор выражает глубокую благодарность проф. А.Е. Барано-вичу за ценные рекомендации и помощь при проведении исследований.
Адаптация метода Шермана-Лемана решения задачи факторизации...
Примечания
1 См.: Коблиц Н. Курс теории чисел и криптографии / Пер. с англ. М.А. Михайлов-
ской и В.Е. Тараканова; под ред. A.M. Зубкова. М.: Научное издательство ТВП (Теория вероятностей и ее применения), 2001.
2 См: Смарт Н. Криптография. М.: Техносфера, 2006.
3 См.: Баранович А.Е. Введение в предметно ориентированные анализ, синтез
и оптимизацию элементов архитектур потоковых систем обработки данных: Электронное учебно-метод. изд. [Электрон. ресурс] = Introduction in the object-oriented analysis, synthesis and optimization of elements of architecture data flow processing systems. 3-е изд., стереотип., испр. [М.: Информрегистр, 2010].
4 См.: Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб.: БХВ-Петер-
бург, 2002.
5 См.: Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. М.: ДМК
Пресс, 2010.
6 См.: Баранович А.Е., Желтов С.А. Организация параллельных вычислений
в задачах факторизации на базе архитектуры CUDA // Тр. III Междунар. конгресса по интеллект. системам и информ. технол. / XI Междунар. научн.-техн. конф. «Интеллектуальные системы»(А!8'11). М.: Физматлит, 2011. Т. 1. C. 481-485.
7 См.: Василенко О.Н. Теоретико-числовые алгоритмы в криптографии. М.:
МЦНМО, 2003.