Научная статья на тему 'ВЕКТОРИЗАЦИЯ И РАСПАРАЛЛЕЛИВАНИЕ ПОЛНОСЛОВОВОГО ДЛИННОГО СЛОЖЕНИЯ'

ВЕКТОРИЗАЦИЯ И РАСПАРАЛЛЕЛИВАНИЕ ПОЛНОСЛОВОВОГО ДЛИННОГО СЛОЖЕНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
90
8
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
длинная арифметика / полнослововая арифметика / сумматоры с опережающим переносом / параллелизм / векторизация / SIMD / SMP / CUDA / GMP / AVX-512 / регистры масок / высокопроизводительные вычисления / long arithmetics / full-word arithmetics / carry-loookahead adders / SIMD / CUDA / parallel arithmetics / vectorization / AVX-512 / high-performance computing

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

В статье предложены алгоритмы для параллельного и векторного полнословового сложения длинных беззнаковых целых с переносом разрядов. Вследствие необходимости переносов, распараллеливание и векторизация программного обеспечения для неполиномиального сложения длинных целых традиционно считались непрактичными из-за зависимостей по данным между разрядами операндов. Представленные алгоритмы основаны на параллельном и векторном обнаружении источников переноса в частях векторных операндов с формированием битовых масок, которые в последующем скалярно прибавляются к векторной сумме исходных длинных операндов для получения их скалярной суммы методом, который является обобщением сумматора Когге-Стоуна на произвольную длину и гранулярность данных. Это отличает предложенные алгоритмы от существующих: действительно, известные и описанные в источниках сумматоры ориентированы на битовое представление данных ограниченной битовой длины, признается проблема отсутствия обобщенного описания сумматоров для операндов произвольной длины и используемого для их представления машинного слова. Поэтому в работе представлено формальное теоретическое и экспериментальное обоснование параллельной и векторной реализации сумматоров с опережающим переносом, применённой к произвольной гранулярности и произвольному размеру данных. Теоретически и экспериментально показано, что описанные алгоритмы обеспечивают заметный прирост производительности аддитивных операций с переносом при их реализации для многоядерных, многопроцессорных и векторных параллельных платформ, включая CUDA, что особенно заметно при использовании длинных векторных регистров, таких как AVX-512 с масочными регистрами и операциями над ними, а также в сравнении с существующими реализациями, такими как сумматор библиотеки GNU Multiprecision Library, построенной с включением флагов, задающих соответствующую векторизацию.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Чусов Андрей Александрович, Лычев Михаил Станиславович, Гайда Максим Алексеевич

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

PARALLELIZATION AND VECTORIZATION OF FULL-WORD ADDERSCRITERIA

The paper proposes parallel and vector algorithms for performing full-word addition of long unsigned integers with carry propagation. Due to the latter, parallel and vectorized addition have long been considered impractical because of data dependencies between elements of two long addends. The presented algorithms are based on parallel and vectorized detection of carry origins within the digits of the addends, consequent construction of corresponding bit masks which, in turn, are added up to yield an adjustment to add to the vector sum of the addends using a generalization of the Kogge-Stone method upon arbitrary granularity of data as well as size of the problem. This solves the problem of poor generality of adders presented in literature which is well-known and described in multiple sources. Unlike the existing adders, the algorithms described in this paper are based upon a machine word based representation of data, rather than bit representation, and are agnostic to a definition of a word as well as size of addition. Therefore, the paper presents a formal theoretical and experimental justification of parallel and vectorized implementation of carrylookahead adders applied to an arbitrary granularity of data of arbitrary size. The described approach is noticeably beneficial for implementation of high-performance adders using manycore, CUDA and SIMD-based parallelism, particularly using AVX-512 mask registers and the respective instructions, it significantly outperforms existing adders such as one implemented in the GNU Multiprecision Library built with the respective vectorization flags.

Текст научной работы на тему «ВЕКТОРИЗАЦИЯ И РАСПАРАЛЛЕЛИВАНИЕ ПОЛНОСЛОВОВОГО ДЛИННОГО СЛОЖЕНИЯ»

ИНФОРМАТИКА, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И УПРАВЛЕНИЕ

МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ, ЧИСЛЕННЫЕ МЕТОДЫ И КОМПЛЕКСЫ ПРОГРАММ

DOI 10.54398/20741707_2022_4_9 УДК 004.421.2

ВЕКТОРИЗАЦИЯ И РАСПАРАЛЛЕЛИВАНИЕ ПОЛНОСЛОВОВОГО ДЛИННОГО СЛОЖЕНИЯ

Статья поступила в редакцию 10.09.2022, в окончательном варианте — 29.09.2022.

Чусов Андрей Александрович, Дальневосточный федеральный университет, 690922, Российская Федерация, г. Владивосток, о. Русский, п. Аякс, 10,

кандидат технических наук, доцент департамента электроники, телекоммуникации и приборостроения Политехнического института, ORCID: 0000-0002-7931-5368, e-mail: chusov.aa@dvfu.ru

Лычев Михаил Станиславович, Дальневосточный федеральный университет, 690922, Российская Федерация, г. Владивосток, о. Русский, п. Аякс, 10,

студент, ORCID: 0000-0001-9120-5463, e-mail: lychev.ms@ students.dvfu.ru Гайда Максим Алексеевич, Дальневосточный федеральный университет, 690922, Российская Федерация, г. Владивосток, о. Русский, п. Аякс, 10,

студент, ORCID: 0000-0003-3362-5253, e-mail: gayda_m@mail.ru

В статье предложены алгоритмы для параллельного и векторного полнословового сложения длинных беззнаковых целых с переносом разрядов. Вследствие необходимости переносов, распараллеливание и векторизация программного обеспечения для неполиномиального сложения длинных целых традиционно считались непрактичными из-за зависимостей по данным между разрядами операндов. Представленные алгоритмы основаны на параллельном и векторном обнаружении источников переноса в частях векторных операндов с формированием битовых масок, которые в последующем скалярно прибавляются к векторной сумме исходных длинных операндов для получения их скалярной суммы методом, который является обобщением сумматора Когге-Стоуна на произвольную длину и гранулярность данных. Это отличает предложенные алгоритмы от существующих: действительно, известные и описанные в источниках сумматоры ориентированы на битовое представление данных ограниченной битовой длины, признается проблема отсутствия обобщенного описания сумматоров для операндов произвольной длины и используемого для их представления машинного слова. Поэтому в работе представлено формальное теоретическое и экспериментальное обоснование параллельной и векторной реализации сумматоров с опережающим переносом, применённой к произвольной гранулярности и произвольному размеру данных. Теоретически и экспериментально показано, что описанные алгоритмы обеспечивают заметный прирост производительности аддитивных операций с переносом при их реализации для многоядерных, многопроцессорных и векторных параллельных платформ, включая CUDA, что особенно заметно при использовании длинных векторных регистров, таких как AVX-512 с масочными регистрами и операциями над ними, а также в сравнении с существующими реализациями, такими как сумматор библиотеки GNU Multiprecision Library, построенной с включением флагов, задающих соответствующую векторизацию.

Ключевые слова: длинная арифметика, полнослововая арифметика, сумматоры с опережающим переносом, параллелизм, векторизация, SIMD, SMP, CUDA, GMP, AVX-512, регистры масок, высокопроизводительные вычисления

PARALLELIZATION AND VECTORIZATION OF FULL-WORD ADDERSCRITERIA

The article was received by the editorial board on 10.09.2022, in the final version — 29.09.2022.

Chusov Andrei A., Far-Eastern Federal University, FEFU Campus 10 Ajax Bay, Russky Island, Vladivostok, 690922, Russian Federation,

Cand. Sci. (Engineering), Associate Professor, ORCID: 0000-0002-7931-5368, e-mail: chusov.aa@dvfu.ru

Lychev Mikhail S., Far-Eastern Federal University, FEFU Campus 10 Ajax Bay, Russky Island, Vladivostok, 690922, Russian Federation,

student, ORCID: 0000-0001-9120-5463, e-mail: lychev.ms@students.dvfu.ru Gaida Maksim A., Far-Eastern Federal University, FEFU Campus 10 Ajax Bay, Russky Island, Vladivostok, 690922, Russian Federation,

student, ORCID: 0000-0003-3362-5253, e-mail: gayda_m@mail.ru

The paper proposes parallel and vector algorithms for performing full-word addition of long unsigned integers with carry propagation. Due to the latter, parallel and vectorized addition have long been considered impractical because of data dependencies between elements of two long addends. The presented algorithms are based on parallel and vectorized detection of carry origins within the digits of the addends, consequent construction of corresponding bit masks which, in turn, are added up to yield an adjustment to add to the vector sum of the addends using a generalization of the Kogge-Stone method upon arbitrary granularity of data as well as size of the problem. This solves the problem of poor generality of adders presented in literature which is well-known and described in multiple sources. Unlike the existing adders, the algorithms described in this paper are based upon a machine word based representation of data, rather than bit representation, and are agnostic to a definition of a word as well as size of addition. Therefore, the paper presents a formal theoretical and experimental justification of parallel and vectorized implementation of carry-lookahead adders applied to an arbitrary granularity of data of arbitrary size. The described approach is noticeably beneficial for implementation of high-performance adders using manycore, CUDA and SIMD-based parallelism, particularly using AVX-512 mask registers and the respective instructions, it significantly outperforms existing adders such as one implemented in the GNU Multiprecision Library built with the respective vectorization flags.

Keywords: long arithmetics, full-word arithmetics, carry-loookahead adders, SIMD, CUDA, parallel arithmetics, vectorization, AVX-512, high-performance computing

Введение. Использование длинной арифметики востребовано во многих областях науки и технологий, таких как криптография, обработка цифровых сигналов и высокоточные научные вычис -ления. Операции сложения предоставляют основание для большинства других операций длинной целочисленной арифметики. Вместе с тем аддитивные операции с переносом известны слабой рас-параллеливаемостью вследствие наличия зависимостей по данным, обусловленным переносами между разрядами длинных сумм. В частности, это препятствует векторизации сложения и реализа -ции длинного сложения (например, библиотеки произвольной точности GNU Multiple Precision Arithmetic Library версии 6.2.0) предпочитают скалярное последовательное сложение (например, инструкции ADD/ADC в случае x86 и x86-64 архитектур) в пользу SIMD. Количество операций, требующихся, чтобы правильно переносить разряд и учитывать флаг переноса после сложения каждого элемента слагаемых, как минимум равно количеству элементов в слагаемых, и таким образом векторизация и распараллеливание могут не давать никаких улучшений производительности.

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

Подробный обзор методов создания сумматоров, основанных на битовой логике, приведен в [1]. Наиболее простой способ реализации сложения длинных целых основан на сумматоре с последовательным переносом, который складывает разряды слагаемых, поочерёдно перенося разряды. Большое количество реализаций полагаются на этот метод, потому что он простой, его легко реализовать как в виде программы, так и в виде системы логических элементов с минимальным количеством связей и соответствующих задержек. Этот сумматор легко может обойти по произво -дительности другие более сложные методы, особенно при малых размерах операндов.

Однако обнаружение разрядов, которые оказываются источниками установленных бит переноса, распараллеливается относительно просто. Общий подход к такой операции показан в [2] и [3], в обеих работах приведены алгоритмы, широко известные как сумматоры с опережающим переносом. Эти сумматоры заранее вычисляют суммы без переноса разрядов, а затем выполняют параллельное уменьшение, циклически корректируя результат, чтобы учесть перенос разрядов. Такой подход широко используется в реализации сложения, когда важны производительность и энергоэффективность [4-6].

Недостатком методов с опережением переноса является сложность их реализации. Например, в [8] авторы совмещают два подхода, т.е. Когге - Стоуна [2] и Брент - Кунга [3], чтобы сбалансировать разреженность первого подхода с задержками второго, вызванными увеличенным количеством последовательных операций. Другим способом поиска баланса между производительностью и сложностью реализации сложения является использование древоподобной структуры алгоритма сложения, который при условии создания младшими разрядами ненулевого переноса исправляет соответствующие разряды суммы, полученной без учета переносов; если младшие разряды не создают такую необходимость, то исправление можно пропустить [6], и в этом случае может иметь место прирост производительности. Сумматоры с переключением переноса работают подобным образом, осуществляя параллельное вычисление суммы и ее инкрементированное значение и затем выбор одного из двух значений на основе значения вовремя поступившего бита переноса. В работах [9] и [10] предлагается метод реализации таких сумматоров с основной целью снижения схемотехнической сложности сумматоров.

Другим подходом к реализации параллельного сложения является выражение суммы в избыточной системе счисления, в которой данное значение может быть представлено больше, чем одним способом. Такими являются сумматор с сохранением переноса [1] и сумматор с сохранением заёма

[12] , оба похожи с точки зрения производительности. Они позволяют выполнять сложение без взаимосвязи между разрядами при условии, что представление хотя бы одного слагаемого и суммы остаётся в соответствующей избыточной системе счисления. Хотя они сами по себе быстрые и масштабируемые, преобразование между избыточной и неизбыточной системами счисления в лучшем случае сделает их производительность равной одному из сумматоров с последовательным сложением, потому что преобразование требует корректировки разрядов в неизбыточной системе счисления, что имеет сложность О (п), а также дополнительной памяти (и операций ввода/вывода) для хранения значений в избыточной системе счисления.

Сумматоры, описанные в литературе, реализуются аппаратно с помощью логических вентилей, и для повышения производительности/энергоэффективности используют битовый параллелизм. Кроме этого, описанные в литературе существующие сумматоры работают с операндами достаточно (до 1 КиБ) ограниченной битовой длины, а реализации для данных произвольной длины описаны скудно [11]. Представленные в настоящей статье алгоритмы, напротив, не привязаны ни к длине, ни к машинному слову нижележащей вычислительной архитектуры, таким образом предоставляя возможность реализации параллельных и векторных полнослововых сумматоров с опережающим переносом для широкого набора вычислительных систем, используя набор распространенных арифметических инструкций, выполняемых над скалярами размером в машинное слово или векторными операндами фиксированного размера.

Для этого данная статья формализует и представляет два алгоритма параллельного сложения длинных полнослововых беззнаковых целых, используя широко распространённые скалярные многоядерные процессоры и векторизацию. Результатом является обобщение сумматоров с опережением переноса, в особенности сумматора Когге - Стоуна, чтобы складывать числа, представленные векторами произвольной длины, состоящими из машинных слов при допущении того, что пара слов может быть сложена аппаратно за постоянное время. Также исследованы функциональные требования к век -торному процессору, чтобы реализовать такое сложение с приростом производительности.

На протяжении всей статьи использованы следующие обозначения. Векторы, которые представляют длинные целые длиной в п слов, находятся в группе (Zw, +), изоморфной (Ew, +). В частности, каждый скаляр v(0 < i < п) может быть либо беззнаковым целым из (Ew, +), либо знаковым целым в дополнении до W. Также представлен алгоритм без ветвлений, с помощью которого возможно обнаружение переноса для целых со знаком, который опирается на битовое представле -ние Vi. В этом (и только в этом) случае предполагается, что W является степенью числа два.

Дополнительно представленными алгоритмами использованы раздельные ¿-битовые скаляры для выполнения переносов. Следовательно, предполагается, что лежащая в основе платформа предоставляет способы реализации целочисленной ¿-битовой арифметики, т. е. сложения в (Ев, +), где В = 2Ь.

В этой статье использованы три операции сложения: обычное скалярное сложение «+», определённое в аддитивной группе (E, +); побитовое исключающее «или», обозначенное как ф, элементов в (%2п,ф) (т. е. сложение, гомоморфное полиномиальному сложению в {р Е E2[x] | deg(p) < п}) и векторное сложение Ш векторов длины n в (с соответствующими скалярами, складываемыми по модулю W), образующее аддитивную группу

Обнаружение источников переноса. Началом алгоритма сложения является получение битовой маски, содержащей набор флагов переноса в результате сложения элементов векторов. Обнаружение легко выполняется путём сравнения значений векторов. Для этого необходимо рассмотреть два случая с учётом знакового и беззнакового сравнений, предоставляемых векторными процессорами. Например, SIMD расширения Intel AVX-512 и ARM предоставляют инструкции (к примеру, VPCMPUD и CMHS) для беззнакового сравнения. С другой стороны, некоторые процессоры позволяют сравнивать только знаковые целые, как в случае с SSE-SSE4.2 и AVX2.

Сложение двух беззнаковых скаляров x и y вызывает переполнение тогда и только тогда, когда Vx, у Е Zw: х + у < х (где сложение выполняется по модулю W). Так как нет никаких других зависимостей кроме зависимости между x и y, то обнаружение, применённое к многослововым целым, может быть выполнено параллельно с применением поэлементного беззнакового сравнения. То есть, имея пару n-элементных векторов Y = (v0 ••• vn-1)T и U = (и0 ••• ип-1)т, а также функцию CMPGT(7, U) = ((v > и ) ••• (v > и )) , которая отображает (Zn )2 ^ En, обнаружение флага переноса выпол-

0 0 п— 1 п— 1 W 2

няется с помощью вызова C(V, U) = CMPGT(7, V + U) (или C(V, U) = CMPGT(U, U + 7)).

В случае сравнения знаковых векторов, обнаружение немного более сложное, так как оно требует рассмотрения трёх случаев (рис. 1). Как указано выше, далее в настоящем разделе предполагается, что элементы векторов представлены в виде набора битов. При выполнении этого условия можно поступить следующим образом. Во-первых, если самые старшие биты обоих слагаемых x и y сбрасываются, то их сложение никогда не даст установленного флага переноса, потому что сложе -ние младших разрядов даст перенос не более 1. Будучи добавленной к нулю самого старшего бита

суммы, эта единица никогда не даст нового ненулевого переноса. Во-вторых, если самые старшие биты обоих слагаемых установлены, то их арифметическая сумма всегда будет или 2 (двоичное 10), или 3 (двоичное 11) с левым битом, становящимся значением бита переноса, и с правым битом, равным значению переноса, получаемого в результате сложения младших бит. В противном случае, т. е. когда старшие биты x и у отличаются, получаемый флаг переноса всегда будет равен флагу, получаемому в результате сложения младших разрядов, а также противоположен сумме старших бит по модулю 2. Действительно, если самый старший бит одного из операндов установлен, а самый старший бит другого операнда сброшен, то результат арифметической суммы будет равен единице плюс флаг переноса более младших битов, т. е. 1 (двоичное 01) или 2 (двоичное 10) с левым битом, становящимся новым флагом переноса, значение которого противоположно правому биту. Полагая, что самый старший бит является битом знака, последняя проверка может быть совершена арифметическим сравнением суммы с нулём. Чтобы избежать ветвления, это обнаружение может быть представлено битовыми операциями над x и у: для знаковых целых x и y значение флага переноса равно ((0 > х) А (0 > у)) V ((0 > х) А (х + у > 0)) V ((0 > у) А (х + у > 0)) = (0 > хА 0 > у) V

(—(0 > х + у) А ((0 > х) V (0 > у))). Аналогично случаю с беззнаковым целым, эти битовые операции не создают зависимостей данных и таким образом могут быть применены к векторам SIMD. В этом случае, имея аналогично заданное векторное сравнение CMPGT (но для целых со знаком),

C(V, U) = (ci VAND с2) VOR (cs VANDN(c1 VOR c2)), (1)

где c1 = CMPGT(0, V); c2 = CMPGT(0, U); cs = CMPGT(0, V + U); O - нуль-вектор; VAND, VOR и VANDN - соответственно, поразрядные битовые И, ИЛИ и И-НЕ. И-НЕ дополняет первый операнд и вычисляет побитовую конъюнкцию результата со вторым операндом.

Рисунок 1 - Обнаружение флага переноса во время выполнения сложения целых со знаком в дополнении до двух

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

Тем не менее как только переносы, вытекающие из сложения элементов векторов (а также, возможно, перенос, возникший в результате предыдущего сложения младших частей исходных длинных целых, части которых представлены векторно) определены, можно использовать следующий подход, чтобы заменить п проверок и приращений элементов векторов на [п/Ь] операций накопления битов, созданных функцией С (V, и) (дана выше) в целочисленное значение, хранящееся в регистрах размером Ь бит, позволяющих выполнять арифметическое сложение и вычитание. Для этого могут быть использованы любые регистры общего назначения (или регистры битовых масок К0-К7 из ЛУХ-512).

Для краткости в этом разделе предполагается, что [п/Ь] = 1, что справедливо для многих векторных процессоров. В противном случае, например, в параллельной реализации сложения, может быть использован метод Когга - Стоуна [2] для параллельной редукции Ь-битовых значений, как показано в разделе «Распараллеливание».

Так как результат сложения любого количества более младших разрядов числа никогда не даст значение больше, чем 1 (доказательство этого факта может быть найдено во многих классических источниках, например, в [13]), то битовая маска, созданная функцией С(V, и), никогда не будет иметь биты, установленные в тех же позициях, что и элементы векторной суммы, которые нужно

инкрементировать в процессе учета переноса. Это позволяет объединить (используя битовое ИЛИ) маску, получаемую от С(У, и), побитово сдвинутую на один бит влево, с маской, соответствующей позициям элементов суммы, которые создают флаги переноса в результате переноса разрядов, и при этом не будет возникать потеря данных.

Для этого нужно сначала определить те элементы векторной суммы У + и, разряды которой получены в результате целочисленного переполнения, то есть которые могут создать переносы. Так как максимальное значение переноса равно единице, такие элементы имеют значение Ш — 1. Следовательно, векторизованное сравнение суммы с вектором I = (Ш — 1 ■■■ Ш — 1) с использованием подхода, аналогичного использованному выше, может быть применено здесь, чтобы получить маску

ч и) = СМРЕ0(У + и, I), (2)

где ЧУ, V Е гп: СМРЕд(У, и) = ((V = и) ■■■ (V = и ) Т п w

Ш 0 0 п—1 п—1 ) Е

В целях задания формальной связи между скалярными значениями и их векторными эквивалентами мы вводим биекцию V" : Ъп ^ Ъ п (вместе с ее инверсией V-п) между соответствующими

натурально изоморфными множествами, а также инъекцию у": Ъп ^ ГЪп .

Теорема 1. Сумма 5 = двух беззнаковых целых = и уП(Ю =

У!1-1 щШк, заданных векторами"0/, и Е Ъп с Ъп+1, где Шк - степень оснований0 системы счисле-

к=0 Ш Ш

ния, задающая значимость разряда длинного скаляра, а также бита ( Е Ъг, равна

5 = V" (V) + Vй (и) + ( = уп+1 (У Ш и ЕВ (Уп+1 ° У—(п+1))(е)), (3)

ш ш ш ш г

где

= О + 2с + О 0 1Е Ъгп+1, (4)

I = уп(1(У, и)) и с = уп(С(У, и)).

г г

Доказательство. Положим в качестве базы индукции п = 1. Тогда, чтобы учесть возможный флаг переноса, положим, что V1 (7) = р0 и V1 (и) = и0 находятся во множествах Ъ^ х {0} с Ъ^ X Ъг.

Тогда сложение v1 (7) и v^(U) даёт сумму

и

W W

Vn + ш (vo + ио) mod W

S' = v1 (У) + v1 (U) = v0 + u0 = (v0 + u0) mod W + [ ~-°J W == v2 ( vo + uo )

WW w w I-1

W

2 0 = vw(vm um (c)),

в которой вектор (0 c)T = (у2 ° v-2) (2V1 (С(У, U))).

W 2 W

Тогда прибавление ( к сумме даёт

' 2 0 С

5 = 5 + $ = vw (УШ Um (с) Ш (f,)), (5)

где i' является битом переноса, получаемого при прибавлении ( к первому элементу s'0, Е Ew из S' и равно ( A (s = W — 1) = ( A i. Здесь с + i Е Ъ2, так как или с = 1, т. е. s < v0 и s < и0, или

i = 1, т. е. С A(s' = W — 1), потому что в Ew не существует значений больших, чем s = W — 1,

0 0

т. е. с A i = с A i = 0.

Следовательно,

д , 0 11 (

(0) Ш Ф = (сф = (сф «А0)- , (6)

Фиксируя имеющиеся значения s^ и W (и таким образом i = (s = W — 1)), рассмотрим аддитивную группу G\ с множеством

{t|(3<T, с Е %2)b(i А с) A (t = (i + 2с + О ф ¿)]} с ъгг, дополненным групповой операцией - битовой суммой по модулю 2. Заметим, что

Vc I 1Е Иг с): (i + 2с + О 0 i = f+^+^j . 2 + ((i + 2с + О ф i) mod 2 =

22 i+c+j . 2 + (Ц ф о ф i) = (Сф <Ai) . 2 + £

2

Поэтому операция замыкает Gr. ((i + 2с + О ф 0 ф ((i + 2с + О ф 0 = ((С1 ф h Ai) ■ 2+fr) ф ((С2 ф С2 АО • 2+Ы = ((С1 ф С2) ф (Z1 ф С2) А 0 ■ 2 + (Z1 ф (2) = (i + 2(С1 ф С2) + (Z1 ф С2)) ф ¿, где (—(i Ас{) A—(i А с2)) ^ —(i А (с1 ф с2)), и таким образом G1 изоморфна группе G2 линейных полиномов из E2[x] с множеством

{t|(3<T, с Е E2)[—(iAc) A (t = (сф (A i)x + С)]} С Е2Ы и отображением G1 ^ G2: а ■ 2 + b ^ ах + Ъ, которое является биективным гомоморфизмом, потому что (а-^х + Ъ1) + (а2х + Ь2) = (а1 ф а2)х + (Ь1 ф b2) ^ 2(а1 ф а2) + (Ь1 ф Ь2), а нули

возможны только, когда c и Z оба равны нулю, потому что (с ф ( A i)x + ( = 0 О (( = 0) А ((с ф ((Ai)) = 0) о (С = 0) А ((с ф 0) = 0) о (С = 0) А (с = 0) и (2с + £ + i) 0 i = 0 О

2с + 2(iA0 + С = 0 О С = 0 Ас = 0.

Следовательно, применение биекции v-2 = у2 ° v-2 к г в (4) даёт (5), и таким образом (3) справедливо для п = 1.

Тогда из (5) и (6) ,г следует, что S mod W = (v0 + и0 + О mod W = vKV Ш U Ш (), и [S/Wi = с ф ((Ai) = Г2с+Ч 6 L .

2 2

Теперь, если п > 1, доказательство может быть получено с помощью индукции: если (3) и (4)

справедливы для n, то они также справедливы для п + 1.

Представление слагаемых vn+i(V) и vn+1(u), соответственно, как v1W + v0 и u1W + и0 (где

w w

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

v0, и0 6 Lw и v\, и1 6 LWn), даёт сумму S = (v1 + щ)W + (v0 + и0 + () = (v1 + и1 +

[£o±uo±ii) w + (v + и + ^ mod w = (v + u + [ ¡0+2c0+^i) w + (v + u + q mod w, где i =

Ш 1 1 2 00 0

V1(/'(V0, M0)) и C0 = V!(C(V0, U0)).

22 n 0 0

n n n+1 0 0 n+1 0

Заметим, что Vv 6 Lw [vw(v) ■ W = vw ф], и Ve 6 Ljn. ((уП 0 v-«)(e)) = Yw ( v-"( v)) =

(yn+1 0 y-("+1))(2e). ш 2 2

w 2

Тогда, на основании индукционного предположения и доказательства начального случая при n = 1,5 = W ■ vn+1 ^^(v ) Ш v-(n+1)(u ) Ш (Yn+1 0 v-(n+1) ¡0+2с0+^ ф

ww 1 ^ 1 w 2) ((i1 + 2c1 + [ " i)

¿1)) + v1 (v-1(vq) Ш v-1(uq) Ш (y1 0 v-1) (((¿0 + 2C0 + 0 mod 2) ф ¿0)) =

WW W W 2

v-i(v ) v-i(u ) v-i (((¿0 + 2cq + О ф i0) mod 2)

n+2 l( W q ) _ ( W q ) _ „+2 2 ) =

Vw (v-(n+D(v )) _ (у-(п+1)(и )) _ ( -("+1) ¡q+2CQ+< )

. w 1 W 1 V2 ((¿1 + 2C1 + [---i) ф h)

h 2 )

vn+2 (V_ и _ (r+2 0 v-("+2)) (2 ((i + 2 + |'q+2cq+^i) ф i ) + ( + 2 + О ф

W W 2 1 1 9 1 q Q

io) mod 2))). (7)

Так как Va, b, к 6 M0: (a ф b) ■ 2k = a ■ 2k ф b ■ 2k и Va, b 6 M0, Vd, с 6 12n, Vk > n: (а ф b) ■ 2k + (с ф d) = (a ■ 2k + с) ф (b ■ 2k + d), последняя часть (7) может быть перегруппирована:

((i + 2с + |'q+2cq+^|) ф i ) ■ 2 + ((i + 2с + О ф i ) mod 2 = (2i + 2 ■ 2с +

1 1 2 1 00 0 11

? .¿0+2С0+Л . + 2 -2 f) mod 2) ф 2 + i ) = 2 + i ) + 22t + с ) + О ф 2 + i ) =

2 1 2 1 + (0 0 10 10 10 10

(i + 2с + С) ф ¿.

Подстановка этого результата в (7) даёт (3).

Вычисление (3) предоставляет способ распараллеливания сложения, как описано в следующих разделах. Это может дать прирост производительности, если, во-первых, вычисление ненакладно (например, когда отображение является простым (пере-)представлением тех же данных и не включает, например, копирований и операций ввода-вывода, что может быть накладно, например, как в случае с CUDA), и, во-вторых, если вычисления £ и (уп+1 0 у-о+Ц) (g) эффективны. Влияние этих вычисле-

W 2

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

Распараллеливание. Используя (3), можно следующим образом сложить два длинных целых параллельно.

Сложение двух целых X, Y 6 Z^n при W > 2 и п > 0, включает в себя параллельное сложение без переносов v-n(X) Ш v-^(Y) с использованием T потоков со временем выполнения 0(п/Т). Далее перенос разрядов должен быть выполнен с применением (4). Вычисление £ 6 IL-g (где В = 2й) также требует возможно длинного сложения битовых масок i и 2 с + ( с последующим битовым суммированием по модулю два с i. Последнее является сложением двоичных цифр без переносов, которое не требует отдельных усилий для распараллеливания. Сумма 2 с + ( также не требует переноса, потому что ( является однобитовой, а вычисление 2 с достигается простым битовым сдвигом влево (по направлению к самому старшему разряду) на одну позицию, следовательно, 2 с + ( = (с << 1) ф (. Но вычисление суммы i + (2с + £) опять-таки требует переноса, что, в свою очередь, тоже может быть выполнено с помощью (3). Получается, что исходное сложение чисел размера п

уменьшено до сложения чисел i и 2с + ( размера \п logw 2]. Аналогично этому сложение i и 2с + ( уменьшено до сложения \n(logw 2)2] = 1. Это уменьшение продолжается до тех пор, пока размер сложения не достигнет 1, что требует одного скалярного сложения в Lw, то есть \n(logw 2)max = 1 для max к 6 Mo. Следовательно, общее количество слов, представленных в системе счисления по основанию W, которые нужно сложить, равно

^ \Л7 Л

(8)

n у max k-f-

2 Lk=o W

w)k

Для всех к таких, что к < max к, то есть f

_V _ q ,-п log2_W-1

1 = ( log2 w-1 ).

t| > 1, поэтому

(log 2 W)k1

, _ r log2 n -.

max к = ilog.o„ wn] = I ]

1 g2 W log2log2 W

Рисунок 2 - Сложение X и Y из Lwn по модулю Wn с использованием (3) и параллельной редукции

Так как параллельное сложение (без учета е) может быть выполнено параллельно Т потоками, и один и тот же алгоритм параллельного сложения выполняется для слагаемых для каждого к. то общее время, требуемое для выполнения сложения Г^пртоками, может быть оценено как

£шах к [ п ] = О (_ ),

потому что

у max к г ^к=0 1

r(log2

W)k

] = О (ymaxfc

к=0

(9)

T(log2 W)k

T(log2 W-1)

ч _ 0 (n (log^ 2)max k+1-1 (log2 W)max _ > = ( logw 2-1 (log2 W)max k+V

-(logv. ж)"3" k+1

О (T (log2 IT)™* k(1-log2 W)

r(log2

W)k

) = О (n l-Clog^) |loglog2 W Ч+1 __

T Tloglog wn1 ) = U ( т (log W)loglog2 wn(1-log w)

(log2 W) 2 (1-log2 W) 2 2

1-(log2 W)logl°g2 W

n+1

) =

0 <n 1-mogiw л _ 0 rn log2 "-1 \ (T n(1-log2 W)) = (T(log2 W-1)).

Следует заметить, что для достижения (9) следует исключить состояние гонки и ограничить использование блокирующей синхронизации потоков, получающих доступ к различным частям сгенерированных i и с. Это может быть достигнуто выбором (возможно увеличением) значений [——и—-J, кратных размеру слов, из которых составлены i и с. В частности, если i и с реализованы

в виде векторов из Ln , то . " i должно быть кратно flog W] для каждого потока, устанавли-

W [T(log2 W)k 2

вающего биты в наборе его собственных слов.

Изложенный выше вывод также может быть применён к (8) с Т = 1 для оценки требований к памяти. Конкретнее, пространство, требуемое этим алгоритмом, исключая 3п слов слагаемых и суммы (то есть пространство, требуемое для хранения значений i, си е mod 2n), может быть оценено верхней границей

п

п

п

max к n max k n + (log W)k - ! max к n- 1

3 V r_1 = 3 V L-2-J 3 (max к + V \_I)

3 V r(\og2 W)k (\og2 W)k J ' (\og2 J)

k=l k=l k=l

max к n — 1 n — 1 (\og 2)max k— 1

< 3 (max к + V -) = 3 (max к + ---—-)

' kZ1(\og2 wyJ y \og2 W \ogw 2 - 1

<3 (max к + rJlZl (°gw k- 11) \og2 W \ogw 2 - 1

(Oogw 2)maxk- 1)(n- 1) - 1

= 3 (max к + L1 +-J)

v L 1 - \og2 W

((\og2 W)maxk - 1)(n- 1) - (\og2 W)maxk

= 3 (maX к + L1 + (\og2 W)max k+1 - (\og2 ^^ k D

n-2 n-1

= 3 (max к + \1 + --——- ----J)

\og2 W- 1 (\og2 w) ^g^ wn1(\og2 W - 1) — 2 n-1 n2 - 3n +1

< 3 (max к + L1 + - n(\og2 w- 1)J) = 3 (max к + L1 + ^2 w- вJ).

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

Это зависит от способности параллельной (векторной) платформы эффективно реализовывать

оба отображения, использованных в утверждении теоремы, т. е. vjfr (и инверсию v-р) и /"^или композицию у^ о v-n). Так обстоит дело с новыми масочными регистрами и инструкциями расширения AVX-512, которые обеспечивают прирост в производительности сумматоров с опережением переноса, благодаря использованию (3).

Уравнение (3) также может быть использовано для улучшения производительности векторного сложения, если, помимо сложения, отображения vn и уп также могут быть реализованы эффективно

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

т т

с помощью векторного процессора. В то время как поддержка vj^, применяемая к результатам сравнения (1) и (2), широко распространена (например, PCMPEQ/PCMPGT в SSE2 и CMEQ/CMHI в ARM), поддержка последнего заметно ограничена, и в то время как его реализация возможна с применением таблиц поиска, она требует обращения к внешней памяти и таким образом может быть неэффективна. Экспериментальным путём значительного увеличения производительности получилось достичь только применением масочных операций Intel AVX-512 над регистрами K0-K7. Реализация критического цикла с использованием AVX-512 в синтаксисе Microsoft Assembly (MASM) представлена на рисунке 3. В этой реализации 512-битные векторные величины находятся

в Йб4, и значения масок - в ТЪхуь (чтобы учитывать дополнительный бит переноса из (4)).

В других случаях реализация отображений vn(I(V, U)) и vn(C(V, U)) довольно проста с при-

2 2

менением широко распространённых инструкций для сравнения векторов (см. раздел 2). Такими являются, например, (V)PCMPEQ и (V)PCMPU у Intel [14, раздел 5.2] (том 2C) и CMEQ и CMHI у ARM [15], которые устанавливают биты частей регистра-приёмника в зависимости от того, как соответствующие части операндов соотносятся с предикатом сравнения.

С другой стороны, обратное преобразование, (У^о v-"), использованное в (3), не является широко

распространённым, что делает его реализацию менее эффективной. Так как длины векторов регистров обычно малы, преобразование во многих случаях может быть реализовано с помощью таблицы поиска, которая отображает короткие скалярные целые в соответствующие векторные величины. Очевидным недостатком этого способа является потребность в структуре данных во внешней памяти, доступ к которой может быть дорогостоящим, хотя такая таблица может быть достаточно небольшой, чтобы находиться в кэш-памяти. Такая реализация для 256-битных векторов AVX-2 (с п = 4) показала уменьшение производительности (рис. 8) по сравнению с последовательным сумматором.

Наиболее выгодным путём совмещения параллельного алгоритма, показанного на рисунке 2, с векторизацией показала себя редукция подвектора до множества одиночных битов с (полученного из £ суммой наиболее значащих частей подвекторов) и i (которое может быть получено из накопленного поразрядного И значений v%(I(vi, щ)) элементов Vi и щ подвекторов, в результате дающее 2п - 1, если результирующий бит i установлен), записать с и i в соответствующие векторы слов так, что каждое слово занято одним битом, а затем, используя параллельную редукцию, упаковать эти биты в слова: Ъп ^ Ъп ^ Ъ ^2 . Элементы результата затем могут быть объединены для получе-

w 2 w

ния £ с использованием параллельного алгоритма (рис. 2) и/или векторного алгоритма (рис. 3). Если

использован последний, потребуется найти способ удвоения значения целых чисел, представляющих биты с, которое может быть выполнено с помощью инструкций битовых сдвигов (например, (V)PSLL из x86-64 или SHL из ARM) и горизонтальной перестановкой элементов (соответственно, (V)PSHUF и VEXT).

лог raKj ras г memory index

jустановить асе биты 2гпгп2 upternlogq г mm 2, imm2r zmm2, 0FFK-

vmnvdquS4 ZmmO, [V + Г3к) ¡zmml := {Ju Ui iuj Uj iii u= ub ur) vmovdqu64 zmml, [U + гак] ; векторное сложен не: ;zrnmO :■ zmmO =нггптi vpaddq ггптО, zmmO, zmml :kO := vHa{CMPGT(znril, immO]) = с upcmpuq kOr znnfriD, imml, 1 Kaddw kO, kOF kO ; kO ;= kO + kO korw <0, kOr kl ; kO ЬО + ^ ;kl :- vrtE(CMPEQ(zrnmO, zmm2)J ■= , vpcmpeqq kl, zrnmOr :mm2 kaddw kO, kO, kL ; kO := kO - kl ккогш kl, kQ, kl ; hi kD ь kl = г ;zmmo := zmmo в ItíSí) ^¡"'Xe mod 2") vpsubq zmmQ {kl}, zmmO, zrnmZ

umovdqu64 [S + гак], irníinD

Рисунок 3 - Векторное сложение X и Y, принадлежащих Zwn, по модулю Wn, основанное на (3) с использованием инструкций AVX-512 для векторов и масок

Эксперименты. Измерения производительности алгоритмов были выполнены на компьютере с процессором Intel Core Í9-10980XE с 18 физическими ядрами и включённой многопотоковостью ядер, с видеокартой NVIDIA Tesla K40m CUDA под управлением Ubuntu Workstation 20.04.3 LTS.

Измерения были выполнены в виде разницы между двумя значениями счётчика тактов процессора, получаемыми с помощью инструкции RDTSC.

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

Измерения производительности параллельного алгоритма (рис. 2) демонстрируют увеличение производительности длинного сложения (рис. 4).

Однако измерения показывают низкую масштабируемость параллельных алгоритмов как с век -торизацией, так и без векторизации (рис. 5), достигающих соответственно ускорений около 2,1 и 2,2, когда алгоритмы выполнялись для сложения двух 8-гигабайтных величин 11 потоками выполнения на компьютере с 18 физическими ядрами. Тем не менее показан устойчивый прирост производительности, когда используется параллельный сумматор по сравнению с производительностью последовательного сумматора и аналогично, когда используется параллельное сложение с векторизацией AVX-512 по сравнению со всеми другими сумматорами.

0 2 4 6 8

Размер в байт 1е9

Рисунок 4 - Время, затраченное на выполнение сложения двух длинных величин с использованием параллельного алгоритма, показанного на рисунке 2, выполненного 36 логическими ядрами (пунктирная линия), сравнённое со временем, затраченным тем же алгоритмом, но таким, что каждый поток выполнял векторизованное сложение (рис. 3), создавая пару битов i и с для рекурсивного сложения с применением (4) (точка-пунктир), и со временем выполнения последовательного сложения с использованием инструкции ADC (сплошная линия)

О 5 10 15 20 25 30 35

Потоки

Рисунок 5 - Ускорения, достигнутые с использованием параллельного сумматора без векторизации (сплошная линия) и с (пунктирная линия) векторизацией AVX-512 на компьютере с 18 физическими (36 логическими) ядрами процессора

Что касается векторизации на одном процессоре, прирост производительности заметен до тех пор, пока потери времени на взаимодействие с памятью не начинают превосходить прирост произ -водительности, что происходит на отметке около 8 Мб на каждое слагаемое (рис. 6).

Кроме того, реализация параллельного сложения для СиБА даёт прирост производительности, показанный на рисунке 7, который не учитывает время, требуемое на передачу данных через шину РС1-Е. Однако как только начинается передача данных через шину, например, когда у CUDA устройства недостаточно памяти для хранения всех данных сразу (т. е. обоих слагаемых, суммы, а также наборов бит ¿, с и е из (4) на каждой итерации параллельного алгоритма (рис. 2)), производительность сложения быстро падает.

Рисунок 6 - Время, затраченное на выполнение сложения двух длинных величин, до 8 МБ случайных данных на слагаемое с использованием AVX-512 реализации векторного алгоритма из рисунка 3 (пунктирная линия), сравнённое со временем выполнения последовательного сложения с использованием инструкции ADC (сплошная линия)

Следует отметить, что все исследованные реализации длинного сложения значительно превзошли в производительности сложение библиотеки GNU Multiprecision Library (GMP) версии 2.6.0 [16], собранной с соответствующими флагами поддержки AVX-512, даже если измерения не учитывают обмен данными, выполняемый вызовами mpz_import и mpz_export. Это показано на рисунке 8.

1е8

0 1 2 3 4 5

Размер в байт 1е8

Рисунок 7 - Измеренная производительность CUDA реализации (пунктирная линия) сложения с использованием NVIDIA Tesla K40m, сравнённая с последовательным сложением на процессоре с использованием инструкции ADC (сплошная линия). Времена для CUDA не учитывают обмен данными между хостом и устройством

le9

0 2 4 6 8

Размер в байт le9

Рисунок 8 - Производительность длинного сложения с помощью библиотеки GNU Multiple Precision (GMP) [16] в сравнении с производительностью других реализаций. Показательна производительность ADC и SMP в сравнении с другими результатами

Заключение. Широко распространено мнение, что сложение полнослововых длинных целых параллельно, и в особенности с использованием векторизации, непрактично из-за необходимости переноса, который создаёт взаимосвязи между разрядами слагаемых и суммы. С одной стороны, это может быть справедливо, потому что распараллеливание и векторизация может быть применена только частично и ценой увеличения сложности алгоритма. Тем не менее существуют различные применения, например, в высокоточных научных вычислениях, включая те, которые основаны на вещественной арифметике, обработке цифровых сигналов и криптографии, где сложение может стать критичным для производительности и энергоэффективности. В этом случае сложность реализации может стать приемлемой или может быть снижена, как показано в [3, 6, 7].

Однако существующие источники концентрируются на аппаратной реализации сумматоров и используют распараллеливание на уровне бит, требуя специализированного аппаратного обеспечения для выполнения сложения с малой задержкой. Представленная статья, с другой стороны, фокусируется на использовании неспециализированных скалярных и векторных процессоров, которые обладают минимальным набором обычных арифметических инструкций для достижения похожих приростов производительности. Поэтому предложены алгоритмы и их формальный анализ. В частности, если длина слова равна 1 бит, т. е. W = 2, тогда из утверждения теоремы 1 можно легко вывести полнослововые сумматоры, выполняющие векторизацию на уровне бит, с опережением переноса (описанные, например, в [5]). Представленный параллельный алгоритм, показанный на рисунке 2, соответствует одному из них [2] и [7].

Эксперименты, проведённые для измерения производительности результатов подтверждают про -гноз (9) из статьи. В особенности AVX-512 с его аппаратной реализацией щ через операции над битовыми масками помогает значительно увеличить производительность сложения, особенно когда сложение реализовано на многоядерном процессоре. Параллельная реализация без использования векторизации, хоть и не очень масштабируема, предоставляет значительный прирост производительности по сравнению с последовательным скалярным сложением, реализующим алгоритм с последовательным переносом, даже если к последнему применены методы оптимизации, такие как развёртка циклов.

Приросты производительности также имеют место, когда сложение выполняется на устройстве CUDA, пока отсутствуют передачи параметров между хостом и устройством. Все реализации значительно превзошли в производительности сложение, реализованное в библиотеке GNU Multiple Precision (версия 6.2.0), даже если импорт и экспорт операндов и результата не учитывались при измерении времени. Поверхностный анализ исходного кода GMP, а также его дизассемблированного представления показал, что много времени занимает реструктуризация и перераспределение данных с выполнением сложения в нескольких разных циклах с последовательным переносом.

Библиографический список

1. Awasthi, V. Hybrid Signed Digit Arithmetic in Efficient Computing: A Comparative Approach to Performance Essay / V. Awasthi, K. Raj // Novel Perspectives of Engineering Research. - 2021. - Vol. 2, № 10. - P. 47-58.

2. Kogge P. M. A Parallel Algorithm for the Efficient Solution of a General Class of Recurrence Equations / P. M. Kogge, H. S. Stone // IEEE Transactions on Computers. - 1973. - Vol. C-22, no. 8. - P. 786-793.

3. Brent. A Regular Layout for Parallel Adders / Brent, Kung // IEEE Transactions on Computers. - 1982. - Vol. C-31, № 3. - P. 260-264.

4. Paci, G. Exploration of Low Power Adders for a SIMD Data Path / G. Paci, P. Marchal, L. Benini // 2007 Asia and South Pacific Design Automation Conference. - 2007. - P. 914-919.

5. Srikanth, S. Low Power Array Multiplier using Modified Full Adder / S. Srikanth, I. T. Banu, G. V. Priya,

G. Usha // 2016 IEEE International Conference on Engineering and Technology (ICETECH). - 2016. - P. 1041-1044.

6. Kumar, S. High-Speed, Low Area and Energy Efficient 32bit Carry Skip Adder using Verilog HDL / S. Kumar, B. P. Konduru // International Conference on Emerging Trends in Engineering, Science and Technologies (ICETEST 2017). - 2017. - № 03.

7. Jafarzadehpour, F. A New Energy-Efficient Hybrid Wide-Operand Adder Architecture / F. Jafarzadehpour, A. Sabbagh Molahosseini, A. Emrany, L. Sousa // IET Circuits, Devices & Systems. - 2019. - Vol. 13, № 11.

8. Ahammed, M. J. Fast Performance of Parallel Adders using VLSI / M. J. Ahammed, M. M. Parvez // International Journal of Engineering Research & Technology (IJERT). - 2014. - Vol. 3, № 10. - P. 356-360.

9. Sarabdeep, S. Design of Area and Power Efficient Modified Carry Select Adder / S. Sarabdeep, K. M. Dilip // International Journal of Computer Applications. - 2011. - Vol. 33. - P. 14-18.

10. Mohanty, B. Area-Delay-Power Efficient Carry-Select Adder / B. Mohanty, S. Patel // IEEE Transactions on Circuits and Systems II: Express Briefs. - 2014. - Vol. 61, № 06. - P. 418-422.

11. Langhammer, M. High Precision, High Performance FPGA Adders / M. Langhammer, B. Pasca, G. Baeckler // 2019 IEEE 27th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM). -2019. - P. 298-306. - DOI: 10.1109/FCCM.2019.00047.

12. Selsi Aulvina, C. Low Power and Area Efficient Borrow Save Adder Design / C. Selsi Aulvina, R. Kabilan // 2018 International Conference on Smart Systems and Inventive Technology (ICSSIT). - 2018. - pp. 339-342.

13. Knuth, D. E. The Art of Computer Programming, Seminumerical Algorithms / D. E. Knuth. - 3rd ed. - Boston, MA, USA : Addison-Wesley Longman Publishing Co., Inc., 1997. - Vol. 2.

14. Intel Corporation. Intel® 64 and IA-32 Architectures Software Developer's Manual. - Intel Corporation, 2022. -Режим доступа: https://www.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4.html.

15. Arm Limited. Arm® Architecture Reference Manual Armv8, for A-profile architecture. - ARM Limited, 2021. - Режим доступа: https://developer.arm.com/documentation/ddi0487/gb/, свободный. - Заглавие с экрана. -Яз. англ. (дата обращения: 10.09.2022).

16. Free Software Foundation. (2020) Integer Arithmetic (GNU MP 6.2.1). - Режим доступа: https://gmplib.org/manual/Integer-Arithmetic, свободный. - Заглавие с экрана. - Яз. англ. (дата обращения: 10.09.2022).

References

1. Awasthi, V., Raj, K. Hybrid Signed Digit Arithmetic in Efficient Computing: A Comparative Approach to Performance Essay. Novel Perspectives of Engineering Research, 2021, vol. 2, no. 10, pp. 47-58.

2. Kogge, P. M., Stone, H. S. A Parallel Algorithm for the Efficient Solution of a General Class of Recurrence Equations. IEEE Transactions on Computers, 1973, vol. C-22, no. 8, pp. 786-793.

3. Brent and Kung. A Regular Layout for Parallel Adders. IEEE Transactions on Computers, 1982, vol. C-31, no. 3, pp. 260-264.

4. Paci, G., Marchal, P., Benini, L. Exploration of Low Power Adders for a SIMD Data Path. 2007Asia and South Pacific Design Automation Conference, 2007, pp. 914-919.

5. Srikanth, S., Banu, I. T., Priya, G. V. and Usha, G. Low Power Array Multiplier using Modified Full Adder. 2016IEEE International Conference on Engineering and Technology (ICETECH), 2016, pp. 1041-1044.

6. Kumar S. and B. Konduru, P. High-Speed, Low Area and Energy Efficient 32bit Carry Skip Adder using Verilog HDL. International Conference on Emerging Trends in Engineering, Science and Technologies (ICETEST 2017), 2017, no. 03.

7. Jafarzadehpour, F. Molahosseini, Sabbagh A., Emrany, A. and Sousa, L. A New Energy-Efficient Hybrid Wide-Operand Adder Architecture. IET Circuits, Devices & Systems, 2019, vol. 13, no. 11.

8. Ahammed, M. J. and Parvez, M. M. Fast Performance of Parallel Adders using VLSI. International Journal of Engineering Research & Technology (IJERT), 2014, vol. 3, no. 10, pp. 356-360.

9. Sarabdeep, S. and Dilip, K. M. Design of Area and Power Efficient Modified Carry Select Adder. International Journal of Computer Applications, 2011, vol. 33, pp. 14-18,

10. Mohanty, B. and Patel, S. Area-Delay-Power Efficient Carry-Select Adder. IEEE Transactions on Circuits and Systems II: Express Briefs, 2014, vol. 61, no. 06, pp. 418-422.

11. Langhammer, M., Pasca, B. and Baeckler, G. High Precision, High Performance FPGA Adders. 2019 IEEE 27th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM), 2019, pp. 298-306. DOI: 10.1109/FCCM.2019.00047.

12. Aulvina Selsi C. and Kabilan, R. Low Power and Area Efficient Borrow Save Adder Design. 2018 International Conference on Smart Systems and Inventive Technology (ICSSIT), 2018, pp. 339-342.

13. Knuth, D. E. The Art of Computer Programming, Seminumerical Algorithms. 3rd ed. Boston, MA, USA, Addison-Wesley Longman Publishing Co., Inc., 1997. Vol. 2.

14. Intel Corporation, Intel® 64 and IA-32 Architectures Software Developer's Manual. Intel Corporation, 2021. Available: https://www.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-com-bined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4.html.

15. Arm Limited, Arm® Architecture Reference Manual Armv8, for A-profile architecture. ARM Limited, 2021. Available: https://developer.arm.com/documentation/ddi0487/gb/ (acessed 10.09.2022).

16. Free Software Foundation. (2020) Integer arithmetic (GNU MP 6.2.1). Available: https://gmplib.org /manual/Integer-Arithmetic (acessed 10.09.2022).

УДК 004.052

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

Статья поступила в редакцию 30.09.2022, в окончательном варианте - 14.10.2022.

Таныгин Максим Олегович, Юго-Западный государственный университет, 305004, Российская Федерация, г. Курск, ул. Челюскинцев, 19,

кандидат технических наук, доцент, ORCID: 0000_0002_4099_1414, e-mail: tanygin@yandex.ru Чеснокова Алина Андреевна, Юго-Западный государственный университет, 305004, Российская Федерация, г. Курск, ул. Челюскинцев, 19,

аспирант, ORCID: 0000_0003_1183_4572, e-mail: chesnokova.50@yandex.ru Ахмад Али Айед Ахмад, Юго-Западный государственный университет, 305004, Российская Федерация, г. Курск, ул. Челюскинцев, 19,

аспирант, ORCID: 0000_0002_6031_9414, e-mail: aliayid2013@gmail.ru

Исследованы особенности практической реализации методов аутентификации и опознавания источника сообщений, основанные на использовании кодирования в режиме сцепления блоков. Приёмник выполняет обработку кодов поступающих сообщений и формирование структурированной их последовательности на основе известных статистических характеристик потока сообщений от отправителя и посторонних источников. При этом из обработки исключается часть сообщений, исходя из характеристик сформированной к текущему моменту времени структурированной последовательности и значения специального индексного поля, являющегося неотъемлемой частью кода аутентификации сообщения. Реализация метода требует формирования и хранения во внутренней памяти получателя динамических списочных структур, описывающих формируемые множества сообщения. Создана оригинальная математическая модель заполнения внутренней памяти получателя, позволившая оценить сложность формируемой динамической структуры. Полученные на основе математического моделирования результаты показали, что исключение из обработки части поступающих сообщений позволяет снизить затраты памяти приёмника в 3-4 раза, сохраняя достоверность аутентификации на уровне, приемлемом для протоколов связи, используемых в энергоэффективных сетях передачи данных с большим радиусом действия.

Ключевые слова: аутентификация, сообщение, кодирование в режиме сцепления блоков, ресурсная сложность

REDUCING RESOURCE COSTS FOR PROCESSING MESSAGE AUTHENTICATION CODES BY LIMITING THE NUMBER OF MESSAGES PROCESSED

The article was received by the editorial board on 30.09.2022, in the final version — 14.10.2022.

Tanygin Maxim O., Southwest State University, 19 Chelyuskintsev St., Kursk, 305004, Russian Federation,

Cand. Sci. (Engineering), Associate Professor, ORCID: 0000_0002_4099_1414, e-mail: tanygin@yandex. ru

Chesnokova Alina A., Southwest State University, 19 Chelyuskintsev St., Kursk, 305004, Russian Federation,

postgraduate student, ORCID: 0000_0003_1183_4572, e-mail: chesnokova.50@yandex.ru, Ahmad Ali Ayed Ahmad, Southwest State University, 19 Chelyuskintsev St., Kursk, 305004, Russian Federation,

postgraduate student, ORCID: 0000_0002_6031_9414, e-mail: aliayid2013@gmail.ru

The features of the practical implementation of authentication methods and identification of the source of messages based on the use of coding in the mode of block coupling are investigated. The receiver processes the codes of incoming messages and forms a structured sequence based on the known statistical characteristics of the message flow

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