Научная статья на тему 'Вычисление совершенной нелинейности булевой функции на графическом процессоре'

Вычисление совершенной нелинейности булевой функции на графическом процессоре Текст научной статьи по специальности «Математика»

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

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

The algorithm for calculating the absolute nonlinearity of Boolean function on CUDA-enabled GPUs is proposed. Experiments showed that computation on GPU is 106 times faster than on one core of CPU.

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

Boolean function absolute nonlinearity calculation on GPU

The algorithm for calculating the absolute nonlinearity of Boolean function on CUDA-enabled GPUs is proposed. Experiments showed that computation on GPU is 106 times faster than on one core of CPU.

Текст научной работы на тему «Вычисление совершенной нелинейности булевой функции на графическом процессоре»

ЛИТЕРАТУРА

1. Зубков А. М. Рекуррентные формулы для распределений функционалов от дискретных случайных величин // Обозр. прикл. промышл. математики. 1996. Т. 3. Вып. 4. С.567-573.

2. Зубков А. М. Методы расчета распределений сумм случайных величин // Труды по дискретной математике. М.: Физматлит, 2002. Т. 5. С. 51-60.

3. Зубков А. М. Вычисление распределений чисел компонент и циклических точек случайного отображения // Математические вопросы криптографии. 2011. Т. 1. №2. С. 5-18.

4. Filina M. V. and Zubkov A. M. Exact computation of Pearson statistics distribution and some experimental results // Austrian J. Statistics. 2008. V. 37. No. 1. P. 129-135.

5. Filina M. V. and Zubkov A. M. Tail properties of Pearson statistics distributions. // Austrian J. Statistics. 2011. V. 40. No. 1&2. P. 47-54.

УДК 004.432.2

ВЫЧИСЛЕНИЕ СОВЕРШЕННОЙ НЕЛИНЕЙНОСТИ БУЛЕВОЙ ФУНКЦИИ НА ГРАФИЧЕСКОМ ПРОЦЕССОРЕ

А. В. Медведев

Для криптографических приложений представляют интерес функции с высокими показателями «нелинейности», потому что они труднее поддаются анализу. Существует несколько характеристик нелинейности функции, одна из них — совершенная нелинейность [1], которая показывает, насколько функция удалена от класса функций с линейной структурой. Разработан алгоритм вычисления совершенной нелинейности произвольной булевой функции для параллельной реализации на видеокартах NVIDIA, поддерживающих технологию CUDA [2].

Обозначим через P2 (n) множество всех булевых функций от n ^ 1 переменных и X — область их определения, X = {0,1}n.

Определение 1. Для функции f £ P2(n) и набора a £ X функция f (x) = = f (x) ® f (x ® a) называется производной функции f по направлению a.

Определение 2. Говорят, что булева функция f имеет линейную структуру, если существует вектор a £ X \ {0n}, что f = const, т. е. f = fa либо —f = fa. Множество всех функций в P2(n), имеющих линейную структуру, обозначается LS(n).

Определение 3. Число CNf = d(f,LS(n)) = min d(f, g) называется совершен-

gELS(n)

ной нелинейностью функции f. Здесь d(f, g) —расстояние между функциями f и g, равное количеству наборов, на которых они различаются.

Существует ряд способов вычисления CNf; наиболее подходящим для параллельной реализации оказался следующий:

CNf = гmin(w(f),2n - w(f ))/2,

aeX\{0n}

где w(.) —вес булевой функции. Основную трудность здесь представляет вычисление функции f (x ф a). Проблема состоит в том, что CUDA предполагает запуск большого числа нитей параллельно [3], но их совокупная память ограничена (3 Гб для Tesla C2050), поэтому невозможно хранить значения f (x ф a) для каждой нити, и вес производной вычисляется «по частям» (алгоритм 1).

Вектор значений булевой функции от n переменных представляется в памяти массивом 2N-битных ячеек — элементов базового типа языка C/C+—+ (в реализации используется 32-битный тип long int, N = 5). Количество ячеек определяется по формуле m = 2n-N. Далее будем обозначать i-ю ячейку функции f через /¿.

Алгоритм 1. Алгоритм вычисления w(f)

Вход: f, a Выход: w(f)

w ^ 0

Для i = 0,..., m — 1

w ^ w + weight(fi(x) ® fi(x ® a))

Вернуть w = w(f)

Данный алгоритм не требует вычисления f (х ф а) в явном виде, но надо уметь получать і-ю ячейку функции f (хфа). Заметим, что вектор значений f (хфа) получается из вектора значений функции f (х) перестановкой бит по определённому закону. Например, если аі = 1, то меняются местами половины вектора значений исходной функции, иначе ничего не меняется; если а2 = 1, то меняются между собой половины внутри половин всего вектора, иначе они не меняются, и т. д. рекурсивно.

Алгоритм 2 принимает на вход вектор а и номер і, а на выходе выдает номер і ячейки f (х), который соответствует ячейке с номером і в f (х ф а).

Алгоритм 2. Алгоритм вычисления номера ячейки для функции f (х ф а) Є Р2(п) Вход: і, а = а1 ... ап, т — количество ячеек

Выход: і, такой, что /¿(х) = fj (х ф а) (без учета перестановки бит внутри ячейки)

I ^ 0 // инициализация левой границы интервала і' ^ і

іи> ^ т>> 1 // половина длины текущего интервала Для к = 1,... , п Если і < I + ш, то Если ак = 1, то і ^ і' + ш иначе I ^ I + іи>

Если ак = 1, то і' ^ і' - га іи> ^ іи> >> 1 Конец цикла.

Вернуть і

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

Ниже приведены результаты экспериментов по вычислению CNf при разной степени распараллеливания. Испытания проводились на компьютере Intel(R) Core(TM)2 Quad Q6700 2,66 ГГц с установленной видеокартой NVIDIA Tesla C2050. На CPU алгоритм реализован в двух вариантах — последовательном и с использованием библиотеки

ОрепМР, которая позволяет задействовать все ядра центрального процессора (в нашем случае 4 ядра). В таблице показано время работы (в секундах) соответствующих реализаций.

CPU GPU

n Посл. алг. OpenMP CUDA

15 1,02 0,25 0,01

16 4,13 1,03 0,04

17 16,9 4,22 0,15

18 69,9 17,4 0,65

Таким образом, реализация для видеокарты с использованием технологии CUDA оказалась быстрее, чем последовательный алгоритм, примерно в 106 раз, а в сравнении с параллельной реализацией на центральном процессоре — примерно в 26,5 раз.

ЛИТЕРАТУРА

1. Агибалов Г. П. Избранные теоремы начального курса криптографии. Томск: Изд-во НТЛ, 2005.

2. http://developer.download.nvidia.eom/compute/DevZone/docs/html/C/doc/CUDA_C_ Programming_Guide.pdf

3. http://developer.download.nvidia.eom/eompute/DevZone/does/html/C/doe/CUDA_C_ BestPraetiees.pdf

УДК 519.7

О СХОДИМОСТИ ГИБРИДНОГО SAT+ROBDD-ЛОГИЧЕСКОГО ВЫВОДА1

А. А. Семенов, А. С. Игнатьев

Проблема обращения дискретных функций возникает во многих теоретических и прикладных областях современной кибернетики. Пусть f : {0, 1}* ^ {0, 1}* — вычислимая детерминированным образом за полиномиальное от длины входа время дискретная функция. Если A(f) — некоторый полиномиальный алгоритм, вычисляющий f, то A(f) задает семейство функций вида fn : {0,1}n ^ {0,1}* , n £ N. Задача обращения произвольной функции fn из данного семейства состоит в следующем: известно у £ Range fn, требуется, зная текст программы A(f), найти произвольный x £ {0,1}n, такой, что fn(x) = у. Описанная задача является вычислительно трудной в общей постановке — она не может быть решена за полиномиальное время в предположении, что P = NP. Поскольку различные практические задачи могут рассматриваться как частные случаи сформулированной, разработка вычислительных алгоритмов для её решения является актуальной областью.

Описанную проблему можно сводить к SAT-задачам [1], используя эффективные алгоритмы трансляции программ в булевы уравнения (см., например, [2]). Для решения получаемых SAT-задач можно использовать различные методы, лучшие из которых базируются на алгоритме DPLL. В КНФ, получаемой в процессе трансляции алгоритма A(fn), можно выделить множество Xn, состоящее из n так называемых «переменных входа» рассматриваемой функции. Мощность данного множества равна n. В [3] говорится о том, что Xn является «сильной формой» множества-лазейки для алгоритма DPLL, который применяется к КНФ C(fn), кодирующей задачу обращения fn

хРабота выполнена при поддержке гранта РФФИ № 11-07-00377-a.

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