Способ работы регистра сдвига с линейной обратной связью
OPERATING METHOD OF SHIFT REGISTER WITH LINEAR FEEDBACK

Область техники, к которой относится изобретение
Предлагаемое изобретение относится к области вычислительной техники, в к использованию регистров сдвига с линейной обратной связью на вычислительных платформах с SIMD-архитектурой.
Уровень техники
Регистры сдвига с линейной обратной связью (РСЛОС) используются в различных сферах информационных технологий, в том числе в криптографии, сетевых технологиях и цифровой передаче данных. РСЛОС позволяют генерировать линейные рекуррентные последовательности и могут применяться, например, для выработки псевдослучайных последовательностей, вычисления линейных отображений или получения множества различных значений определенной длины.
РСЛОС определяется полем, которому принадлежат элементы входной и выходной последовательности регистра, а также линейной функцией над этим полем, которая задает обратную связь РСЛОС. Различают два типа РСЛОС: РСЛОС в конфигурации Галуа и РСЛОС в конфигурации Фибоначчи. Два этих типа являются эквивалентными, то есть для каждого РСЛОС в конфигурации Галуа может быть построен РСЛОС в конфигурации Фибоначчи (и наоборот), порождающий ту же самую линейную рекуррентную последовательность, возможно, с некоторым сдвигом. В дальнейшем будем рассматривать только РСЛОС в конфигурации Фибоначчи.
n
Рассмотрим принцип работы РСЛОС, определенного над конечным полем Р и имеющего линейную функцию обратной связи РСЛОС ƒ : P → Р вида
n-1
n-2
0
n-1
п-1
n-2
n-2
0
0
ƒ(x, x, …, х) = (c ⊗ х) ⊕ (c ⊗ x) ⊕…⊕ (c ⊗ x),
где n - натуральное число,
i;
c ∈ Р, i=0, 1, …, n-1, - константные элементы поля Р,
i
x ∈ P, i=0, 1, …, n-1, - аргументы функции,
«⊗» и «⊕» - операции умножения и сложения в поле Р:
• в качестве входной последовательности РСЛОС берут последовательность из n элементов:
a
a
a
a
0
1
n-1
i
, , …, ,  ∈ P, i=0, 1, …, n-1;
• формируют начальное состояние РСЛОС, представляющее собой вектор длины n:
n-1
n-2
0
(q, q, …, q),
i
где q ∈ Р, i=0, 1, …, n-1,
в виде:
i
i
a
q=, i=0, 1, …, n-1;
• задают количество тактов работы РСЛОС - m, где m - натуральное число;
• выполняют m тактов работы РСЛОС, причем на s-м такте, 1 ≤ s ≤ m:
вычисляют новое состояние РСЛОС, представляющее собой вектор длины n:
n+s-1
n+s-2
s
(q, q, …, q),
n+s-1
n+s-2
n+s-3
s-1
где q=ƒ(q, q, …, q)∈P,
вычисляют элемент выходной последовательности РСЛОС
s-1
s-1
b = q ∈ P:
• в качестве выходной последовательности РСЛОС берут последовательность из m элементов:
0
1
m-1
b, b, …, b.
Повсеместное использование РСЛОС делает актуальной задачу получения его высокопроизводительных реализаций. Одним из базовых способов повышения производительности программных и аппаратных реализаций является использование параллельных вычислений.
n
Обозначим класс линейных функций, определенных над полем Р и имеющих n переменных, через L:
n
r,i
0, n-1
0, n-2
0, 0
1, n-1
1, n-2
1, 0
k-1, n-1
k-1, n-2
k-1, 0
k
Рассмотрим вычислительную систему, выполненную с возможностью для любой линейной функции h ∈ L и любых элементов x ∈ P, r=0, 1, …, k-1, i=0, 1, n-1, осуществлять параллельное вычисление k значений h(x, x, …, x), h(x, x, …, x), …, h(x, x, …, x), где k - натуральное число. Обозначим эту вычислительную систему через S.
k
k
Согласно своему свойству, система S позволяет вычислять одновременно k одинаковых линейных функций от разных аргументов. Данное требование является более слабым по сравнению с требованием о возможности параллельного вычисления k произвольных линейных функций от разных аргументов. Это позволяет использовать в качестве вычислительной системы S не только системы с возможностью параллельного вычисления k произвольных линейных функций, но и системы, не имеющие данной возможности, но допускающие параллельное вычисление k одинаковых линейных функций.
k
n
n
n
Примером вычислительной системы S может являться вычислительная система с поддержкой SIMD-технологий (Single Instruction, Multiple Data - одна инструкция, несколько блоков данных). В основе SIMD-технологий лежит возможность одновременного выполнения одного и того же преобразования сразу для нескольких фрагментов данных. Таким образом, вычислительная система с поддержкой SIMD-технологий, позволяющая выполнять каждую операцию, применяющуюся при вычислении функции из L, одновременно для k фрагментов данных, обеспечивает возможность параллельного вычисления k одинаковых функций из L. При этом, в общем случае, такая система не обязана обеспечивать возможность параллельного вычисления k произвольных функций из L, поскольку преобразования, используемые при вычислении различных функций, могут отличаться друг от друга, что не позволит или крайне затруднит использование SIMD-технологий для одновременного вычисления этих функций.
Известен способ работы РСЛОС в конфигурации Фибоначчи (патент РФ №2598781, приоритет от 31.07.2015 г.), предусматривающий использование вспомогательных таблиц. Данный способ позволяет на каждом шаге вычислять сразу несколько новых элементов состояния РСЛОС.
Недостатком данного способа является необходимость хранения и использования таблиц, размер которых пропорционален количеству одновременно вычисляемых элементов состояния.
Известен способ работы РСЛОС в конфигурации Фибоначчи в соответствии с традиционным определением РСЛОС, приведенным выше (Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии. 2-е изд., М., Гелиос АРВ, 2002). Способ позволяет на каждом шаге вычислять один новый элемент состояния РСЛОС посредством вычисления одной линейной функции.
Известный способ принят за прототип.
k
k
1
Недостатком данного способа является неэффективное использование возможностей вычислительной системы S, выражающееся в том, что способ подразумевает вычисление только одной линейной функции в произвольный момент времени. В результате, производительность способа на вычислительной системе S не зависит от значения k, соответствующего количеству линейных функций, которые могут быть вычислены параллельно на этой системе, и равна производительности способа на вычислительной системе S, то есть системе без возможности осуществления параллельных вычислений.
Раскрытие изобретения
Техническим результатом является повышение производительности работы РСЛОС типа Фибоначчи при использовании вычислительной системы, позволяющей параллельно вычислять k одинаковых линейных функций от разных аргументов. При этом предлагаемый способ не требует хранения и использования вспомогательных таблиц.
Предлагаемый способ работы регистра сдвига с линейной обратной связью (РСЛОС) в вычислительной системе, заключается в том, что
• задают конечное поле Р с операцией сложения ⊕, операцией умножения ⊗, нулевым элементом θ и единичным элементом е;
• выбирают вычислительную систему, имеющую процессор с SIMD-архитектурой и выполненную с возможностью
преобразования элементов поля Р в интерпретируемый вычислительной системой вид и обратного преобразования элементов вида, интерпретируемого вычислительной системой, в элементы поля Р;
выполнения операций с преобразованными элементами поля Р, эквивалентных операциям сложения и умножения в поле Р;
• задают натуральное число n;
• задают натуральное число k, k≤n;
• задают РСЛОС в конфигурации Фибоначчи, в котором
входные и выходные элементы РСЛОС являются элементами поля Р;
количество элементов вектора состояний РСЛОС равно n;
n
линейная функция обратной связи РСЛОС ƒ : P → Р имеет вид
n-1
n-2
0
n-1
n-1
n-2
n-2
0
0
ƒ(x, x, …, x) = (c ⊗ x) ⊕ (c ⊗ x) ⊕…⊕ (c ⊗ x),
i
где c ∈ Р, i=0, 1, …, n-1, - константные элементы поля Р,
i
x ∈ Р, i=0, 1, …, n-1;
причем
при подаче на вход РСЛОС последовательности из n элементов
а
а
a
a
0
1
n-1
i
, , …, , где  ∈ Р, i=0, 1, …, n-1,
начальное состояние РСЛОС, представляющее собой вектор длины n:
n-1
n-2
0
i
(q, q, …, q), где q ∈ P, i=0, 1, …, n-1,
формируется в виде:
i
i
a
q=, i=0, 1, …, n-1;
в результате выполнения s-го такта работы РСЛОС, s≥1:
новым состоянием РСЛОС становится вектор длины n:
n+s-1
n+s-2
s
(q, q, …, q),
n+s-1
n+s-2
n+s-3
s-1
где q=ƒ(q, q, …, q)∈Р,
выходным элементом РСЛОС становится элемент
s-1
s-1
b=q ∈ P;
• задают входную последовательность РСЛОС, состоящую из n элементов поля Р:
а
а
a
а
0
1
n-1
i
', ', ', где ' ∈ Р, i=0, 1, …, n-1;
• задают количество тактов работы РСЛОС - m, где m≥1, m=kν+w, где ν, w - целые неотрицательные числа, 0 ≤ w ≤ k-1;
• осуществляют m тактов работы РСЛОС, выполняя следующие действия
формируют начальное состояние РСЛОС, представляющее собой вектор длины n:
n-1
n-2
s
i
(q', q', …, q'), где q' ∈ P, i=0, 1, …, n-1,
в виде:
i
i
а
q'=', i=0, 1, …, n-1;
вычисляют j=0;
если ν=0, то переходят к этапу (В);
n+jk
n+jk+1
n+jk+k-1
(А) вычисляют с использованием SIMD-инструкций процессора параллельно k элементов u, u, …, u ∈ P:
n+jk+t
n+jk-1
n+jk-2
jk+t
u=ƒ(θ, θ, …, θ, q', q', …, q'), t=0, 1, …, k-1;
n+jk
n+jk+1
n+jk+k-1
вычисляют с использованием SIMD-инструкций процессора параллельно k элементов q', q', …, q' ∈ P:
n+jk+t
n+jk
n+jk+1
n+jk+t
q'=g(θ, θ, …, θ, u', u, …, u'), t=0, 1, …, k-1;
k
где функция g : P → Р имеет вид
k-1
k-2
0
k-1
k-1
k-2
k-2
0
0
g(x, x, …, x) = (d ⊗ x) ⊕ (d ⊗ x) ⊕…⊕ (d ⊗ x),
i
где d ∈ Р, i=0, 1, …, k-1, - константные элементы поля Р, для которых справедливо соотношение
i
n-1+i
d=F (е, θ, θ, …, θ), i=0, 1, …, k-1,
i
n
где функции F : P → Р, i=0, 1, …, имеют вид
i
n-1
n-2
0
i
F(x, x, …, x)=x, i=0, 1, …, n-1;
i
n-1
n-2
0
i-1
n-1
n-2
0
n-1
n-2
1
F((x, x, …, x)=F(ƒ(x, x, …, x), x, x, …, x), i=n, n+1, …;
формируют новое состояние РСЛОС, представляющее собой вектор длины n:
n+jk+k-1
n+jk+k-2
n+jk
n+jk+-1
jk+k
(q',q', …, q', q', …, q' );
вычисляют k элементов выходной последовательности РСЛОС
jk
jk+1
jk+k-1
b', b', …, b' ∈ P:
i
i
b'=q', i=jk, jk+1, …, jk+k-1;
вычисляют j=j+1;
если j<ν, то переходят к этапу (A);
если w=0, то переходят к этапу (С);
n+jk
n+jk+1
n+jk+w-1
(В) вычисляют с использованием SIMD-инструкций процессора параллельно w элементов u, u, …, u ∈ Р:
n+jk+t
n+jk-1
n+jk-2,
jk+t
u=ƒ(θ, θ, …, θ, q', q' …, q'), t=0, 1, …, w-1;
n+jk
n+jk+1
n+jk+w-1
вычисляют с использованием SIMD-инструкций процессора параллельно w элементов q', q', …, q' ∈ Р:
n+jk+t
n+jk
n+jk+1
n+jk+t
q'=g(θ, θ, …, θ, u, u, …, u), t=0, 1, …, w-1;
формируют новое состояние РСЛОС, представляющее собой вектор длины n:
n+jk+w-1
n+jk+w-2
n+jk
n+jk-1
jk+w
(q', q', …, q', q', …, q');
вычисляют w элементов выходной последовательности РСЛОС
jk
jk+1
jk+w-1
b', b', …, b' ∈ P:
i
i
b'=q', i=jk, jk+1, …, jk+w-1;
• (С) получают выходную последовательность РСЛОС за m тактов работы:
0
1
m-1
b', b', …, b' ∈ Р.
Результат достигается за счет изменения хода вычисления элементов состояния РСЛОС с целью организации возможности их параллельного вычисления.
Рассмотрим вопросы корректности предлагаемого способа. Заметим, что процедура формирования выходных элементов РСЛОС из элементов состояния РСЛОС в предлагаемом способе идентична соответствующей процедуре в способе, выбранном в качестве прототипа. Таким образом, для обоснования корректности предлагаемого способа достаточно показать, что для одной и той же входной последовательности РСЛОС справедливы равенства:
i
i
q'=q, i=0, 1, …, n+m-1,
i
где q' - элементы состояния РСЛОС при использовании предлагаемого способа,
i
q - элементы состояния РСЛОС при использовании способа, выбранного в качестве прототипа.
i
n
n
j
j
Используемые в предлагаемом способе функции F, i=0, 1, …, определяются через композицию функций из L и, следовательно, сами принадлежат L. Это значит, что для любых x, y, c ∈ Р, j=0, 1, …, n-1, справедливы следующие тождества:
n+s-1
n+s-2
s
Кроме того, для любых q, q, …, q ∈ P - элементов состояния РСЛОС при использовании способа, выбранного в качестве прототипа, и любых неотрицательных целочисленных значений s, i, таких что i+s ≤ n+m-1, выполняется:
Заметим, что процедура формирования начального состояния РСЛОС из входных элементов РСЛОС в предлагаемом способе идентична соответствующей процедуре в способе, выбранном в качестве прототипа. Отсюда следует, что для одной и той же входной последовательности РСЛОС справедливы равенства:
i
i
q'=q, i=0, 1, …, n-1.
Примем данный факт за базу индукции. Осуществим шаг индукции, показав, что если для некоторого j, 0 ≤ j< ν, выполняется
i
i
q'=q, i=0, 1, …, n+jk-1,
то справедливы равенства:
i
i
q'=q, i=n+jk, n+jk+1, n+jk+k-1.
Для этого заметим, что любого t=0, 1, …, k-1 выполняется:
Первое слагаемое данной суммы можно представить в виде
Прибавляя к полученному значению второе слагаемое, имеем
Прибавляя к полученному значению третье слагаемое, имеем
Действуя аналогичным образом, на этапе прибавления последнего слагаемого получаем:
Таким образом, для любого t=0, 1, …, k-1:
n+jk+t
n+jk+t
q'=q,
то есть
i
i
q'=q, i=n+jk, n+jk+1, …, n+jk+k-1.
Последовательно осуществляя приведенный шаг индукции для всех j, 0 ≤ j ≤ ν, получаем, что
i
i
q'=q, i=0, 1, …, n+νk-1.
Обоснование равенства оставшихся w элементов состояния РСЛОС
i
i
q'=q, i=n+νk, n+ν+1, …, n+νk+w-1.
выполняется аналогично очередному шагу индукции с тем отличием, что вместо k элементов состояния рассматриваются w элементов состояния.
В результате имеем, что все элементы состояния, получающиеся в процессе работы РСЛОС при использовании предлагаемого способа, равны соответствующим элементам состояния, получающимся в процессе работы РСЛОС при использовании способа, выбранного в качестве прототипа. С учетом идентичности алгоритмов вычисления выходных значений из элементов состояния в рассматриваемых способах, это доказывает корректность предлагаемого способа работы РСЛОС.
Рассмотрим вопросы эффективности предлагаемого способа.
n
r,i
Выберем вычислительную систему, выполненную с возможностью для любой линейной функции h∈L и любых элементов x ∈ P, r=0, 1, k-1,
i=0, 1, n-1, осуществлять параллельное вычисление k значений
0, n-1
0, n-2
0, 0
1, n-1
1, n-2
1, 0
k-1,n-1
k-1, n-2
k-1, 0
h(x, x, …, x), h(x, x, …, x), …h(x, x, …, x),
где k - натуральное число.
*
*
s
n
Возможность параллельного вычисления k функций h подразумевает, что для любого р, 1 ≤ р ≤ k, время параллельного вычисления р функций h равно времени вычисления одной функции h. Обозначим это время через Т. Необходимо отметить, что описанная вычислительная система, в том числе, позволяет осуществлять параллельное вычисление k функций h ∈ L, 1 ≤ s ≤ n-1, ввиду возможности представления функции h как функции из L путем добавления n-s несущественных переменных.
Оценим время выполнения m последовательных тактов работы РСЛОС, m ≥ 1, на данной вычислительной системе в случае использования способа, выбранного в качестве прототипа, и в случае использования предлагаемого способа. При использовании способа, выбранного в качестве прототипа, данное время составит
old
T=mT,
поскольку в этом случае выполнение каждого такта работы РСЛОС потребует одного вычисления функции ƒ.
При использовании предлагаемого способа рассмотрим три возможных варианта значений параметров:
• k=1;
• k ≥ 2, w=1;
• k ≥ 2, w≠1,
где m=kν+w.
При k=1 время выполнения m последовательных тактов работы РСЛОС составит
поскольку в этом случае для вычисления каждого нового элемента состояния РСЛОС согласно предлагаемому способу достаточно одного вычисления функции ƒ:
n+jk
n+jk
0
n+jk
n+jk
n+jk-1
n+jk-2
jk
q' = g(θ, θ, …, θ, u) = d ⊗ u = u = ƒ(q', q', …, q'),
0
n-1
так как d=F(е, θ, θ, …, θ)=е.
При k ≥ 2, w=1 время выполнения m последовательных тактов работы РСЛОС составит:
поскольку в этом случае для вычисления последнего элемента состояния РСЛОС согласно предлагаемому способу достаточно одного вычисления функции ƒ:
а для вычисления остальных элементов состояния потребуется вычисление функций ƒ и g на каждые k элементов. В результате, при k ≥ 2, w=1:
При k ≥ 2, w ≠ 1 время выполнения m последовательных тактов работы РСЛОС составит:
поскольку для вычисления каждых k элементов состояния (w элементов состояния на последнем шаге) потребуется вычисление функций ƒ и g. Причем, если w=0, то
В случае же w ≥ 2, имеем
Таким образом, производительность предлагаемого способа больше или равна производительности способа, выбранного в качестве прототипа во всех трех рассмотренных случаях. Более того, при k ≥ 2 и достаточно больших значениях m предлагаемый способ позволяет увеличить производительность работы РСЛОС приблизительно в  раз по сравнению со способом, выбранным в качестве прототипа.
На практике весьма вероятна ситуация, при которой вычисление линейной функции g, зависящей от k аргументов, k ≤ n, может оказаться быстрее вычисления линейной функции ƒ, зависящей от n аргументов. В этом случае разница в производительности способов лишь увеличится.
k
n
k
n
Обозначим время вычисления функции от k переменных через T, а время вычисления функции от n переменных через T, T ≤ T.
Рассмотрим в данных обозначениях третий вариант значений параметров: k ≥ 2, w ≠ 1, как наиболее общий из всех. В этом случае время выполнения m последовательных тактов работы РСЛОС, m ≥ 1,
• при использовании способа, выбранного в качестве прототипа, составит
• при использовании предлагаемого способа составит:
Таким образом, при k ≥ 2 и достаточно больших значениях m производительность предлагаемого способа превысит производительность способа, выбранного в качестве прототипа, приблизительно в
раз.
k
n
Сделаем еще одно практическое предположение о том, что T/T=k/n. Тогда отношение производительностей способов примет следующий вид:
Рассмотрим несколько вариантов значений k и соответствующих значений отношения производительности способов:
• при k ≤ n:
• при k=n/t, где t - натуральное число:
• при k=n:
В рамках сделанных предположений, производительность предлагаемого способа превысит производительность способа, выбранного в качестве прототипа, в приблизительно от k/2 до k раз. При этом эффективность повышения производительности будет определяться тем, насколько близко значение k к значению n:
Осуществление изобретения
Рассмотрим пример реализации предлагаемого способа.
Предлагаемый способ может быть реализован в виде прикладной программы, предназначенной для выполнения на вычислительной системе. В качестве вычислительной системы может использоваться компьютер с процессором, поддерживающим SIMD-вычисления, например, процессор Intel Core i7-2600 с поддержкой SSE-инструкций (Streaming SIMD Extensions) [статья по адресу: https://ark.intel.com/content/www/ru/ru/ark/products/52213/intel-core-i7-2600-processor-8m-cache-up-to-3-80-ghz.html].
Прикладная программа, реализующая работу РСЛОС в конфигурации Фибоначчи согласно предлагаемому способу, может быть составлена специалистом по программированию (программистом).
4
4
4
3
2
3
2
3
2
1
0
i
3
2
1
0
Рассмотрим поле Р с операциями умножения ⊗ и сложения ⊕, состоящее из 16 элементов и заданное над неприводимым многочленом Х ⊕ Х ⊕ 1, X ∈ {0, 1}: Р = GF(2) = GF(2)[X] / (X ⊕ X ⊕ 1). Для удобства записи будем обозначать элементы поля Р целыми числами, предполагая, что элементу поля (z ⊗ X) ⊕ (z ⊗ X) ⊕ (z ⊗ X) ⊕ z ∈ Р, z ∈ {0, 1}, i=0, 1, 2, 3, соответствует целое число z ⋅2+z ⋅2+z ⋅2+z ∈ Z.
3
2
1
0
i
s
3
2
Для возможности представления элементов поля Р в виде, интерпретируемом вычислительной системой, можно использовать взаимно однозначное преобразование элементов поля в двоичные строки, которое сопоставляет элементу поля (z ⊗ X) ⊕ (z ⊗ X) ⊕ (z ⊗ X) ⊕ z ∈ Р, z ∈{0, 1}, i=0, 1, 2, 3, двоичную строку , где V - множество всех двоичных строк длины s,  - операция конкатенации двоичных строк.
4
Для реализации на вычислительной системе операции сложения в поле Р можно использовать SSE-инструкцию «pxor», предназначенную для выполнения побитовой операции «исключающее ИЛИ» двух двоичных строк длиной 128. Для реализации на вычислительной системе операции умножения в поле Р можно использовать, например, классический алгоритм умножения в столбик без переноса значимого бита с последующим приведением результата умножения по модулю поля X ⊕ X ⊕ 1, или алгоритм, основанный на табличном задании результатов умножения и осуществлении поиска по этим таблицам. В первом случае можно использовать SSE-инструкции «pxor», «pand», предназначенные для выполнения побитовых операций «исключающее ИЛИ», «И» двух двоичных строк длиной 128, и SSE-инструкции «psrlw», «psllw», предназначенные для выполнения битовых сдвигов двоичных строк длиной 128 вправо и влево. Во втором случае можно использовать SSE-инструкцию «pshufb», предназначенную для осуществления поиска по заранее вычисленным таблицам.
Зададим значения параметров n=8 и k=4.
7
6
0
8
Вычисление значения h(x, x, …, x), где h ∈ L - произвольная линейная функция вида:
7
6
0
7
7
6
6
0
0
h(x, x, …, x) = (h ⊗ x) ⊕ (h ⊗ x) ⊕ … ⊕ (h ⊗ x),
i
i
h, x ∈ Р, i=0, 1, …, 7,
0, 7
0, 6
0,
0
1, 7
1, 6
1, 0
3, 7
3, 6
3, 0
r, i
7
6
0
0, i
1, i
2, i
3, i
на вычислительной системе можно осуществлять с использованием упомянутых выше реализаций операций сложения и умножения в поле Р посредством SSE-инструкций. Параллельное вычисление четырех значений h(x, x, …, x), h(x, x, …, x), …, h(х, х, …, х), где x ∈ P, r=0, 1, 2, 3, i=0, 1, …, 7, на вычислительной системе можно осуществлять аналогично вычислению одного значения h(x, x, …, x) с предварительной группировкой элементов x, x, x, x на одном 128-битном SSE-регистре с целью одновременного выполнения операций, требуемых при вычислении функции h, сразу для четырех этих элементов.
8
Рассмотрим РСЛОС в конфигурации Фибоначчи, входные и выходные элементы которого принадлежат конечному полю Р, а линейная функция обратной связи ƒ:Р →Р задается в виде
4
Заданные РСЛОС и значение k однозначно определяют функцию g:Р →Р:
i
где элементы d ∈ P, i=0, 1, …, 3, вычисляются следующим образом
0
7
d = F(1, 0, 0, …, 0) = 1,
1
8
7
d = F(1, 0, 0, …, 0) = F(ƒ(1, 0, 0, …, 0), 1, 0, 0, 0) = ƒ(1, 0, 0, …, 0) = 8 ⊗ 1 = 8,
2
9
8
8
7
d = F(1, 0, 0, …, 0) = F(ƒ(1, 0, 0, …, 0), 1, 0, 0, …, 0) = F(8, 1, 0, 0, …, 0) = F(ƒ(8, 1, 0, 0, …, 0), 8, 1, 0, 0, …, 0) = ƒ(8, 1, 0, 0, …, 0) = (8 ⊗ 8) ⊕ (1 ⊗ 1) = 12 ⊕ 1 = 13,
3
10
9
9
8
8
7
d = F(1, 0, 0, …, 0) = F(ƒ(1, 0, 0, …, 0), 1, 0, 0, …, 0) = F(8, 1, 0, 0, …, 0) = F(ƒ(8, 1, 0, 0, …, 0), 8, 1, 0, 0, …, 0) = F (13, 8, 1, 0, 0, …, 0) = = F (ƒ(13, 8, 1, 0, 0…, 0), 13, 8, 1, 0, 0, …, 0) = ƒ(13, 8, 1, 0, 0, …, 0) = (8 ⊗ 13) ⊕ (1 ⊗ 8) ⊕ (10 ⊗ 1) = 2 ⊕ 8 ⊕ 10 = 0.
а
а
а
а
0
1
7
i
Зададим входную последовательность РСЛОС, состоящую из 8 элементов ', ', …, ', где ' ∈ Р, i=0, 1, …, 7:
а
а
a
a
0
1
2
3
'=0, '=2, '=4, '=6,
а
а
а
а
4
5
6
7
'=9, '=11, '=13, '=15.
Зададим количество тактов работы РСЛОС m=11. Тогда m=kν+w=4⋅2+3, то есть ν=2, w=3.
Осуществим 11 тактов работы РСЛОС, для чего выполним следующие действия:
• сформируем начальное состояние РСЛОС, представляющее собой вектор длины 8:
7
6
0
i
(q', q', …, q'), где q' ∈ Р, i=0, 1, …, 7,
в виде
7
6
0
7
6
0
а
а
а
(q', q', …, q') = (', ', …, ') = (15, 13, 11, 9, 6, 4, 2, 0);
• вычислим j=0; поскольку ν=2 ≠ 0, то
вычислим с помощью SIMD-инструкций параллельно 4 элемента
8
9
11
u, u, u, ∈ P:
8
7
6
0
u = ƒ(q', q', …, q') = ƒ(15, 13, 11, 9, 6, 4, 2, 0) = 0,
9
7
6
1
u = ƒ(0, q', q', …, q') = ƒ(0, 15, 13, 11, 9, 6, 4, 2) = 2,
10
7
6
2
u = ƒ(0, 0, q', q', …, q') = ƒ(0, 0, 15, 13, 11, 9, 6, 4) = 3,
11
7
6
0
u = ƒ(0, 0, 0, q', q', …, q') = ƒ(0, 0, 0, 15, 13, 11, 9, 6) = 6;
вычислим с помощью SIMD-инструкций параллельно 4 элемента
8
9
10
11
q', q', q', q', ∈ P
8
8
q' = g(0, 0, 0, u) = g(0, 0, 0, 0) = 0,
9
8
9
q' = g(0, 0, u, u) = g(0, 0, 0, 2) = 2,
10
8
9
10
q' = g(0, u, u, u) = g(0, 0, 2, 3) = 0,
11
8
9
10
11
q' = g(u, u, u, u) = g(0, 2, 3, 6) = 4;
сформируем новое состояние РСЛОС, представляющее собой вектор длины 8:
11
10
8
7
4
(q', q', …, q', q', q') = (4, 0, 2, 0, 15, 13, 11, 9);
0
1
2
3
вычислим 4 выходных элемента РСЛОС b', b', b', b' ∈ P:
0
0
1
1
2
2
3
3
b'=q'=0, b'=q'=2, b'=q'=4, b'=q'=6;
• вычислим j=j+1=1; поскольку j=1<2=ν, то
вычислим с помощью SSE-инструкций параллельно 4 элемента
12
13
14
15
u, u, u, u ∈ P:
12
11
10
4
u = ƒ(q', q', …, q') = ƒ(4, 0, 2, 0, 15, 13, 11, 9) = 7,
13
11
10
5
u = ƒ(0, q', q', …, q') = ƒ(0, 4, 0, 2, 0, 15, 13, 11) = 10,
11
11
10
6
u = ƒ(0, 0, q', q', …, q') = ƒ(0, 0, 4, 0, 2, 0, 15, 13) = 5,
15
11
10
7
u = ƒ(0 , 0, 0, q', q', …, q') = ƒ(0, 0, 0, 4, 0, 2, 0, 15) = 13;
вычислим с помощью SSE-инструкций параллельно 4 элемента
12
13
14
15
q', q', q', q', ∈ P
12
12
q' = g(0, 0, 0, u) = g(0, 0, 0, 7) = 7,
13
12
13
q' = g(0, 0, u, u) = g(0, 0, 7, 10) = 7,
14
12
13
14
q' = g(0, u, u, u) = g(0, 7, 10, 5) = 15,
15
12
13
14
15
q' = g(u, u, u, u) = g(7, 10, 5, 13) = 8;
сформируем новое состояние РСЛОС, представляющее собой вектор длины 8:
15
14
12
11
8
(q', q', …, q', q', …, q') = (8, 15, 7, 7, 4, 0, 2, 0);
4
5
6
7
вычислим 4 выходных элемента РСЛОС b', b', b', b' ∈ P:
4
4
5
5
6
6
7
7
b'=q'=9, b'=q'=11, b'=q'=13, b'=q'=15;
• вычислим j=j+1=2; поскольку j=2 ≥ 2=ν, то проверим равенство w=0; поскольку w=3 ≠ 0, то
вычислим с помощью SSE-инструкций параллельно 3 элемента
16
17
18
u, u, u ∈ P:
16
15
14
8
u = ƒ(q', q', …, q') = ƒ(8, 15, 7, 7, 4, 0, 2, 0) = 3,
17
15
14
9
u = ƒ(0, q', q', …, q') = ƒ(0, 8, 15, 7, 7, 4, 0, 2) = 6,
18
15
14
10
u = ƒ(0, 0, q', q', …, q') = ƒ(0, 0, 8, 15, 7, 7, 4, 0) = 10;
вычислим с помощью SSE-инструкций параллельно 3 элемента
126
17
18
q' q', q', ∈ P
16
16
q' = g(0, 0, 0, u) = g(0, 0, 0, 3) = 3,
17
16
17
q' = g(0, 0, u, u) = g(0, 0, 3, 6) = 13,
18
16
17
18
q' = g(0, u, u, u) = g(0, 3, 6, 10) = 11;
сформируем новое состояние РСЛОС, представляющее собой вектор длины 8:
18
17
16
15
11
(q', q', q', q', …, q')=(11, 13, 3, 8, 15, 7, 7, 4);
8
9
10
вычислим 3 выходных элемента РСЛОС b', b', b' ∈ Р:
8
8
9
9
10
10
b'=q'=0, b'=q'=2, b'=q'=0.
0
1
10
В результате получим выходную последовательность РСЛОС за 11 тактов работы b', b', …, b' ∈Р : 0, 2, 4, 6, 9, 11, 13, 15, 0, 2, 0.
7
Практическое измерение производительности работы рассмотренного РСЛОС, выполненное при больших значениях m (m≈10) в одном потоке одного ядра процессора Intel Core i7-2600, показало, что
6
• в случае осуществления работы РСЛОС согласно способу, выбранному в качестве прототипа, производительность работы РСЛОС составляет порядка 85⋅10 тактов работы РСЛОС в секунду;
6
• в случае осуществления работы РСЛОС согласно предлагаемому способу, производительность работы РСЛОС составляет порядка 185⋅10 тактов работы РСЛОС в секунду.
Таким образом, производительностей способов отличается приблизительно в 2,18 раз, что соответствует приведенным теоретическим оценкам, согласно которым предлагаемый способ позволяет увеличить производительность работы РСЛОС в приблизительно от k/2 до k раз.
Рассмотренный РСЛОС и используемые значения параметров выбраны для наглядной демонстрации работы предлагаемого способа. Следует отметить, что предлагаемый способ может быть по аналогии осуществлен и при реализации других РСЛОС в конфигурации Фибоначчи, в том числе РСЛОС, используемых на практике, например, при выработке псевдослучайных последовательностей, вычислении линейных отображений или получении множества различных значений определенной длины.