Суммирование многократной точности на центральных и графических процессорах с использованием библиотеки MPRES

УДК 004.222 DOI 10.23683/2311-3103-2018-8-191-203

К.С. Исупов, В.С. Князьков, А.С. Куваев

СУММИРОВАНИЕ МНОГОКРАТНОЙ ТОЧНОСТИ НА ЦЕНТРАЛЬНЫХ И ГРАФИЧЕСКИХ ПРОЦЕССОРАХ С ИСПОЛЬЗОВАНИЕМ БИБЛИОТЕКИ MPRES*

В научных расчетах часто требуется вычислять суммы больших массивов чисел с плавающей точкой. Суммирование лежит в основе многих базовых алгоритмов, таких как скалярное произведение, разложение функции в ряд Тейлора и численное интегрирование. Однако, из-за ошибок округления при использовании стандартной арифметики IEEE 754 вычисленный результат суммирования может оказаться крайне неточным. Одним из способов уменьшения ошибок округления является использование библиотек многократной точности, предоставляющих структуры данных и подпрограммы обработки чисел, длина которых превышает форматы IEEE 754. В статье рассматриваются алгоритмы высокоточного суммирования, реализованные в библиотеке MPRES (Multiple-Precision Residue-Based Arithmetic Library), которая позволяет выполнять операции с числами произвольной длины на центральных процессорах (CPU) и CUDA-совместимых графических процессорах видеокарты (GPU). В MPRES для представления многоразрядных мантисс чисел используется система остаточных классов (СОК). В этой системе число представляется в виде остатков от деления исходной величины на выбранные модули, а операции над многоразрядными числами разбиваются на группы операций меньшей разрядности над остатками, которые могут выполняться параллельно и без распространения переноса между остатками. В работе рассматривается алгоритм сложения многоразрядных чисел в MPRES, а также три алгоритма редукции (суммирования) массива чисел: (1) классическое рекурсивное суммирование, (2) попарное суммирование, (3) гибридное CPU-GPU суммирование. Эксперименты показывают, что наибольшей производительностью обладает гибридный блочно-параллельный алгоритм. С другой стороны, параллельное вычисление цифр (остатков) многоразрядных мантисс в СОК позволяет сократить время вычислений.

Компьютерная арифметика; высокоточные вычисления; суммирование; система остаточных классов; программирование на графических процессорах.

K.S. Isupov, A.S. Kuvaev, V.S. Knyazkov

SUMMATION OF THE MULTIPLE ACCURACY ON CENTRAL AND GRAPHIC PROCESSORS USING THE MPRES LIBRARY

In many scientific applications, it is necessary to compute the sums of floating-point numbers. Summation is a building block for many numerical algorithms, such as dot product, Taylor series, polynomial interpolation and numerical integration. However, the summation of large sets of numbers in finite-precision IEEE 754 arithmetic can be very inaccurate due to the accumulation of rounding errors. There are various ways to diminish rounding errors in the floating-point summation. One of them is the use of multiple-precision arithmetic libraries. Such libraries provide data structures and subroutines for processing numbers whose precision exceeds the IEEE 754 floating-point formats. In this paper, we consider multiple-precision summation on hybrid CPU-GPU platforms using MPRES, a new software library for multiple-precision computations on CPUs and CUDA compatible GPUs. Unlike existing multiple-precision libraries based on the binary representation of numbers, MPRES uses a residue number system (RNS). In RNS, the number is represented as a tuple of residues obtained by dividing this number by a given set of moduli, and multiple-precision operations such as addition, subtraction and multiplication are naturally divided into groups of reduced-precision operations on residues, performed in parallel and without carry propagation. We consider the algorithm for the addition of multiple-precision floating-

* Работа выполнена при финансовой поддержке РФФИ (проект № 16-37-60003) и РНФ (проект № 18-71-00063).

point numbers in MPRES, as well as three summation algorithms: (1) recursive summation, (2) pairwise summation, and (3) block-parallel hybrid CPU-GPU summation. Experiments show that the hybrid algorithm allows the full utilization of the GPU's resources, and therefore demonstrates better performance. On the other hand, the parallel computation of the digits (residues) of multiple-precision significands in RNS reduces computation time.

Computer arithmetic; high precision; summation; residue number system; programming for graphics processors.

Введение. В научных расчетах часто возникает необходимость вычисления сумм чисел с плавающей точкой. Суммирование является ключевой операцией в умножении матриц, скалярном произведении, численном интегрировании, а также при оценке отклонений, средних значений и многих других функций [1]. По мере возрастания масштабов решаемых задач размеры вычисляемых сумм увеличиваются. При этом хорошо известно, что из-за ошибок округления результат суммирования, вычисленный в стандартной арифметике IEEE 754, может оказаться крайне неточным [2]. В связи с этим повышению точности и обеспечению воспроизводимости результатов суммирования посвящено множество работ, в том числе [1, 3-14].

Для уменьшения ошибок округления во многих случаях используются безошибочные преобразования (error-free transformations), в соответствии с которыми пара чисел с плавающей точкой (a, b) преобразуется в такую пару (x, y), что a + b = x + y, причем x является вычисленным результатом сложения, а y содержит информацию об ошибке. В случае n слагаемых такое преобразование называется алгоритмом дистилляции [7].

В 2013 г. Дж. Деммел и Х. Д. Нгуен представили алгоритмы для вычисления строго воспроизводимой суммы чисел с плавающей точкой, ориентированные на параллельные вычисления [10]. В дальнейшем эти алгоритмы были улучшены [11] и реализованы в пакете ReproBLAS [15].

В 2015 г. С. Колланж и др. предложили многоуровневый алгоритм для эффективного и точного вычисления корректно округленных сумм больших векторов с плавающей точкой [12]. В основе алгоритма лежит совместное использование разложений с плавающей точкой (floating-point expansions) и супераккумуляторов (superaccumulators). Супераккумулятор - это очень длинное число с фиксированной точкой, с помощью которого можно представить любое конечное число с плавающей точкой. Многоуровневый алгоритм суммирования использован в программном пакете воспроизводимых BLAS-подпрограмм для параллельных архитектур ExBLAS [16]. Вариации концепции супераккумуляторов также использованы в [13].

Другим распространенным подходом к уменьшению ошибок округления является использование арифметических библиотек многократной точности, предоставляющих структуры данных и подпрограммы для обработки чисел, разрядность которых превышает стандартные форматы IEEE 754. Такие библиотеки, как правило, медленнее специализированных методов суммирования, однако их использование является более универсальным подходом, так как позволяет не только вычислять точные суммы чисел с плавающей точкой, но и уменьшать ошибки округления в любых других численных алгоритмах. Высокоточные средства являются неотъемлемым компонентом современной крупномасштабной научной вычислительной среды [17].

Распространенные библиотеки арифметики многократной точности, такие как GMP, MPFR, QD и ARPREC, поддерживают вычисления только на универсальных процессорах (CPU). Вместе с тем, современные параллельные системы часто имеют гибридную архитектуру, объединяющую CPU и графические процес-

соры видеокарт (GPU). Для GPU существуют такие высокоточные библиотеки, как CAMPARY [18], GPUMP [19], GARPREC и GQD [20], MPRES [21]. Библиотека CAMPARY основана на разложениях с плавающей точкой и позволяет выполнять вычисления с числами длины несколько сотен бит; GPUMP поддерживает оптимизированные операции с целыми числами произвольной длины; GARPREC и GQD являются GPU-версиями известных библиотек QD [22] и ARPREC [23]. Библиотека MPRES позволяет выполнять операции с плавающей точкой многократной точности на системах с гибридной CPU-GPU архитектурой. В отличие от других библиотек, основанных на двоичном представлении длинных чисел, в MPRES используется система остаточных классов (СОК) [24-26]. В СОК операции над многоразрядными числами разбиваются на группы операций меньшей разрядности, выполняемых параллельно, что обеспечивает эффективное использование ресурсов современных параллельных архитектур.

В статье исследуется эффективность алгоритмов суммирования на системах, состоящих из CPU и CUDA-совместимых GPU, с использованием библиотеки MPRES. Рассматриваются высокоточные версии трех известных алгоритмов суммирования: классическое рекурсивное суммирование [2], попарное суммирование [27] и блочно-параллельное гибридное суммирование [28]. В этих алгоритмах операции с машинными числами заменены операциями с многоразрядными числами, реализованными в MPRES. Целью статьи является оценка быстродействия арифметики многократной точности, предоставляемой MPRES, при различной организации вычислительного процесса.

Представление данных. В MPRES число с плавающей точкой x представляется следующим образом:

где s - знак (0 при x > 0, 1 при x < 0), X - многоразрядная мантисса в СОК, e - двоичная экспонента (порядок числа) и I(X/M) - интервальная оценка относительной величины мантиссы, определяемая двумя округленными границами, XI M и XIM.

Мантисса X представлена набором остатков (xb x2,..., xn) относительно набора модулей СОК {mb m2,..., mn} и интерпретируется как целое число в диапазоне от 0 до M - 1, где м = П^ т.. Остатки x. = X mod щ являются целыми машинными

числами.

Интервальная оценка I(X/M), называемая интервально-позиционной характеристикой, необходима для эффективного вычисления трудоемких для СОК операций, таких как сравнение по величине, контроль переполнения, определение знака и др., без преобразования мантиссы в двоичную систему [29]. Для исключения потери значимости при большом M (~21000 и более), границы XIM и XIM представлены в двоичном формате с плавающей точкой с расширенной экспонентой (extended-range floating-point). Число в таком формате определяется парой (f i), где f - стандартное число с плавающей точкой (64 бит), а i - стандартное целое число (32 бит). Эта пара соответствует величине f х 2', причем на f накладываются ограничения: 1 < f < 2. В таком формате наименьшее положительное число равно 2-2147483648, что позволяет использовать I(X/M) даже при огромной разрядности M (~2 млрд. бит). Арифметические операции с числами в формате с расширенной экспонентой аналогичны стандартным операциям с плавающей точкой и легки в реализации [30].

Для (1) взвешенное представление вычисляется следующим образом:

x = (5, X, e, I (XIM)},

где Mi = M / mi и at - мультипликативная инверсия Mt по модулю m. Поскольку выражение (2) является затратным для вычисления, все промежуточные расчеты должны выполняться в формате (1) с преобразованием в двоичную систему лишь финального результата.

С учетом округления, точность арифметических операций в битах определяется следующим образом: p = |^log2 |_VM -1J J • Например, если требуются 1024-

битные вычисления, то набор модулей должен быть таким, что M > 22048. Библиотека MPRES позволяет использовать любые попарно взаимно простые целые числа в качестве модулей, что обеспечивает тонкую настройку точности вычислений. В [21] представлен алгоритм, который для заданного целого p генерирует модули {mb m2,..., mn}, такие что log2M>p.

В MPRES для обработки чисел, представленных в формате (1), объявлена структура данных mfstatict. Она состоит из следующих полей:

♦ sign - знак числа (short int);

♦ residue - мантисса (статический массив int размера n);

♦ exp - экспонента (int);

♦ ifc - интервальная оценка мантиссы (ifcstatict).

Интервальный тип данных ifc static t состоит из двух полей - low и upp, соответствующих границам X/М и X/М. Каждая из границ является числом с плавающей точкой с расширенной экспонентой (erstatict) и состоит из:

♦ frac - дробная часть числа (double);

♦ exp - экспонента числа (int).

На рис. 1 приведен фрагмент кода, выполняющий инициализацию и передачу числа с плавающей точкой многократной точности с CPU на GPU и обратно. Пользовательский тип mf_t является указателем на mfstatict.

Рис. 1. Инициализация многоразрядного числа в MPRES и обмен данными между

CPU и GPU

Сложение многоразрядных чисел. На рис. 2 представлен псевдокод алгоритмов uAdd и Add. Алгоритм uAdd выполняет сложение чисел одинаковых знаков x и y, представленных как , X, ex, I (X /М)} и (s , х, e , I (Y /М)}, где

X = (xi, Х2,., Xn) и Y = (yi,У2,Уп). Он возвращает результат z = (sz,Z,ez,I(Z/М)} c Z = (z1, z2,..., zn). Алгоритм Add выполняет сложение чисел со знаками путем простого выбора между uAdd и uSub. Алгоритм uSub (вычитание чисел с одинаковыми знаками) похож на uAdd и не рассматривается в этой статье.

Algorithm 1 uAdd

1 if х = 0 ог у — 0 then

2 return

3 end if

4 ALIGNMENT

5 foi" i = 0 to 71 do l> Возможна параллельная обработка

0 Щ <r- - Уг\гщ

7 end for

0 Sz <r- Sx е. <-{ex=0 ? еч :

111 KZ/M) <r- [Z/M = RÍ)(X/M + Y/M), Z/M = RUÍX/M н h Y/M) J

11 if Z/M > lim then

12 Round

13 end if

14 return z = {sz.Z,e„I{Z/M)}

Algorithm 2 Add

1 return

Рис. 2. Сложение чисел, представленных в виде

В алгоритме uAdd остатки мантисс вычисляются независимо друг от друга, что позволяет обрабатывать их параллельно. Обозначения RD() и RU() используются для обозначения операций с плавающей точкой (в формате er_static_t), выполняемых с округлением вниз и вверх, соответственно. Константа lim, являющаяся оценкой снизу для величины — 1 / M, служит для проверки необходимости округления результата.

Процедура Alignment выполняет выравнивание экспонент, а процедура Round - округление результата. В этих процедурах используется новый алгоритм масштабирования чисел в СОК степенью двойки [31].

Суммирование многократной точности. На рис. 3-5 представлены рассматриваемые алгоритмы вычисления суммы SN = 2N—1 с представлением слагаемых si в формате (1).

Алгоритм Reduce1 реализован для CPU (без шагов 2 и 7) и GPU. Для CPU реализована последовательная версия алгоритма с векторизацией вычисления цифр (остатков) многоразрядных мантисс с использованием SIMD-расширений.

Algorithm 3 Reducel

l Преобразование so, si, • • •, sn-i 13 формат

2 Копирование Sq,Si, ..., 5дг-1 в глобальную память GPU

3 SN .so

4 for i = 1 to N - 1 do

5 SN <- Add

С end for

7 Копирование Sn в оперативную память

8 Преобразование Sn в двоичную систему

9 return Sn

Рис. 3. Прямое рекурсивное суммирование [2]

Для GPU доступны две реализации алгоритма Reduce1:

1. Полностью последовательное суммирование, выполняемое только одним GPU потоком.

2. Последовательное суммирование с параллельным вычислением всех остатков многоразрядных мантисс в СОК. В этой реализации используется параллельная версия алгоритма сложения (Add), которая выполняется одновременно n потоками в рамках одного блока потоков, где n - размер набора модулей СОК. При этом каждый i-й поток назначен для вычислений по модулю m. Последовательные части вычислений (определение знака, экспоненты, проверка необходимости округления и пр.) выполняются потоком с индексом 0.

Алгоритм Reduce2 для промежуточных вычислений использует стек. Для вектора длины N размер стека составляет приблизительно log2 N. После окончания основного цикла редукции в стеке остаются еще не учтенные слагаемые (в случае, если длина вектора не является степенью двойки). Как и для рекурсивного суммирования, на базе MPRES реализованы однопоточные версии алгоритма Reduce2 для CPU (без шагов 2 и 19) и GPU, а также GPU версия с распараллеливанием вычисления остатков многоразрядных мантисс в СОК, в которой процедура Add выполняется одновременно n потоками GPU. По сравнению с рекурсивным суммированием, попарное суммирование обладает преимуществами, так как если порядок исходных данных одинаковый, то выравнивание экспонент выполняется реже. Необходимо отметить, что для чисел вида (1) выравнивание экспонент может быть довольно затратной операцией, так как предполагает в общем случае масштабирование мантиссы в СОК степенью двойки.

Рис. 4. Попарное суммирование [27]

Алгоритм Reduce3 соответствует блочно-параллельному варианту суммирования. В этом алгоритме используются следующие константы:

♦ bcount - число запускаемых блоков потоков CUDA;

♦ bsize - число потоков в блоке;

♦ bid - индекс блока в вычислительной сетке;

♦ tid - индекс потока в блоке;

♦ maxBsize - наименьшая степень двойки, большая или равная максимальному числу потоков в блоке.

Algorithm 5 Reduce3

1 Преобразование so, si,  - -, в формат

2 Копирование sb - - - ? SN-1 в глобальную память GPU

3 г bid x bsize x 2 4- tid

4 gsize <r- bsize x 2 x bcount

Первый этап:

5 sd-^ii — 0 D> sd — массив в разделяемой памяти каждого блока

6 while i < N do

7 S<kid «- ADD

8 if i 4- bsize < N then

9 Sdtid ADD

10 end if

11 г 4— i + gsize

12 end while

Второй этап:

13 г maxBsize

14 while i > 2 do

15 if (bsize > i) and (tid < г/2) then

16 sc^id «- ADDisrftid, sdtid+i/g)

17 end if

18 г г/2

19 end while

Третий этап:

20 if tid = 0 then

21 ¡?dbid ^— sdtid l> gd — массив в глобальной памяти GPU

22 end if

23 Копирование gd в оперативную память

24 SN gdo

25 for i = 1 to bcount — 1 do

26 Sn Add

27 end for

28 Преобразование Sn в двоичную систему

29 return Sn

Рис. 5. Гибридное CPU-GPUсуммирование [28]

На первом этапе алгоритма Reduce3 в каждом из bcount блоков потоков порции исходных данных суммируются до bsize элементов с сохранением промежуточных результатов в разделяемую память блока. Сложение чисел выполняется с использованием алгоритма Add. На втором этапе bsize потоков каждого блока выполняют параллельное суммирование по разделяемой памяти. На третьем этапе результаты всех блоков загружаются в глобальную память GPU с последующей записью в оперативную память хоста для завершения редукции на CPU. Далее на CPU выполняется последовательное суммирование частных сумм, вычисленных параллельными блоками. Вычисления цифр многоразрядных мантисс в СОК векторизуются с использованием SIMD-расширений.

Результаты экспериментов. Оценивалась точность и производительность представленных алгоритмов суммирования многократной точности по сравнению с алгоритмами, использующими стандартную арифметику IEEE 754. Эксперименты выполнялись на следующей вычислительной системе: Intel Core i5 4590 (3.30 GHz) / 16 GB DDR3 RAM / Ubuntu 18.04 LTS / GCC 7.3.0 / NVIDIA GeForce GTX 1050 Ti (1.47 GHz) / 4 GB GDDR5 / CUDA 9.2.

Для оценки точности и корректности алгоритмов вычислялась сумма

SN = 2NQ si для различных наборов исходных данных, подобно [32]. Исходные

данные для экспериментов, точные результаты (полученные с использованием библиотеки MPFR [33]), а также результаты, полученные с использованием стандартной арифметики одинарной (float) и двойной (double) точности представлены в табл. 1. Результаты приведены в табл. 2. В каждой ячейке табл. 2, а также в по-

следних двух столбцах табл. 1, представлены два числа: число в первой строке ячейки - это вычисленный результат SN (округленный до нескольких значимых цифр для отображения в таблицах); число во второй строке ячейке - относительная погрешность | £ — /S*N (не более 100), где S* - точная сумма, вычисленная в 4096-битной арифметике библиотеки MPFR.

Результаты в табл. 2 показывают, что библиотека MPRES позволяет получить результаты высокой точности уже при использовании 16 модулей СОК c M « 2240, обеспечивающих 120-битную разрядность арифметических операций. Полученные на CPU и GPU результаты полностью («бит-в-бит») совпадают для всех реализаций алгоритмов Reducel и Reduce2.

Таблица 1

Наборы данных для оценки точности алгоритмов суммирования

# Набор данных MPFR Float Double

#1 s0 = S1 =  = S2046 = 10, — — 1 Г)—18 S2047 = S2048 = 10 , S2049 = S2050 =  = S4095 = —10 2 -1018 0 100 0 10°

#2 s = 1,0, s = s =••• = s, = 10—16 0 '12 1.0000000001 1.0 io-10 1.0 10"10

#3 S = X /i!, где X = —4^, 0 < i < 63 3.48733745 -Ш"6 2.00600782-10"3 100 3.48733650 -10"6 3-10~7

Таблица 2

Точность алгоритмов суммирования, реализованных с использованием

MPRES

Точность в битах (модулей СОК) Алгоритм Набор #1 Набор #2 Набор #3

30 (4) Reduce 1 0 100 1.0 10-10 1.24597778 -10"5 100

Reduce 2 Reduce 3 1.31716952-Ш"5 100

60 (8) Reduce 1 0 100 1.0000000001 9 -10"13 3.48733745 -Ш"6 10"17

Reduce 2 3.48733745-10"6 10-10

Reduce 3 3.48733738-10"6 2-10"8

120 (16) Reduce 1 2 -10"18 5 -KT15 1.0000000001 6 -10-13 3.48733745 -10"6 0

Reduce 2 2 -10-18 0

Reduce 3 2 -10"18 5 -10-15 3.48733745 -10"6 6 -10"27

240 (32) Reduce 1 Reduce 2 Reduce 3 2 -10"18 0 1.0000000001 6 -10"13 3.48733745 -10"6 0

На рис. 6 и 7 представлены результаты оценки быстродействия алгоритмов при суммировании 106 чисел с плавающей точкой, равномерно распределенных в диапазоне от 0 до 1. Для алгоритмов рекурсивного суммирования двойной точности время вычислений составило 1 мс и 191 мс, для CPU и GPU (без распараллеливания), соответственно. На представленных графиках используются следующие обозначения:

♦ Reduce3 (x blocks) - реализация гибридного алгоритма Reduce3, выполняемая x параллельными блоками потоков GPU;

♦ Reduce1S и Reduce2S - полностью последовательные GPU-реализации алгоритмов Reduce1 и Reduce2, соответственно;

♦ Reduce1P и Reduce2P - GPU-реализации алгоритмов Reduce1 и Reduce2, в которых вычисление цифр многоразрядных мантисс (алгоритм Add) выполняется n потоками, где n - размер набора модулей СОК.

Рис. 6. Время суммирования многократной точности на CPU

Рис. 7. Время суммирования многократной точности на GPU

Среди рассмотренных алгоритмов наиболее быстрым является гибридный CPU-GPU алгоритм. Например, при bcount = 256 и p = 480 (n = 64) его скорость выше в 62 и 48 раз, по сравнению с Reduce1P и Reduce2P, соответственно, а также в 2 раза по сравнению с CPU-реализациями Reduce1 и Reduce2. Ускорение алго-

ритма Reduce3 возрастает пропорционально длине вектора исходных данных (не показано на графиках). При малой точности вычислений (n = 8) наблюдается снижение производительности, что связано с большим количеством округлений. В этом случае попарное суммирование оказалось существенно эффективнее классического (прямого) алгоритма. Распараллеливание арифметических операций по модулям СОК позволяет ускорить вычисления многократной точности. Например, при n = 64 производительность Reduce1P оказалась в 11 раз выше по сравнению с Reduce1S. В свою очередь, производительность Reduce2P оказалась в 13 раз выше по сравнению с Reduce2S.

Заключение. С использованием библиотеки MPRES реализованы и исследованы алгоритмы суммирования многократной точности для параллельных вычислительных систем с гибридной CPU-GPU архитектурой. В этих алгоритмах для представления многоразрядных мантисс используется многомодульная система остаточных классов, что позволяет реализовать параллельную обработку цифр мантисс, без необходимости затратной обработки цепочек переносов.

GPU-реализации алгоритмов Reduce1 и Reduce2, ввиду их низкого быстродействия, не представляют практического интереса и рассмотрены с целью исследования эффективности базовых подпрограмм высокоточной арифметики MPRES при различной организации вычислительного процесса. В свою очередь, гибридный CPU-GPU алгоритм обладает довольно высокой производительностью, так как позволяет наиболее полно задействовать имеющиеся ресурсы GPU. Реализация такого алгоритма стала возможной благодаря использованию унифицированных для CPU и GPU структур данных, обеспечивающих представление многоразрядных чисел, а также благодаря эффективному обмену данными посредством вызова стандартных функций из CUDA API.

Повышение эффективности представленных алгоритмов суммирования возможно за счет оптимизации параллельных вычислений с цифрами многоразрядных мантисс в библиотеке MPRES. В дальнейшем мы также планируем использовать OpenMP для ускорения CPU-версий алгоритмов и исследовать эффективность полностью параллельной реализации гибридного алгоритма, в которой, в дополнение к одновременной обработке элементов вектора слагаемых, параллельно вычисляются цифры многоразрядной мантиссы в каждой операции сложения, как в Reduce1P или Reduce2P. Сложности такой реализации в настоящее время связанны с возрастанием используемой разделяемой памяти GPU.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Kornerup P., Lefevre V., Louvet N., Muller J. On the Computation of Correctly Rounded Sums // IEEE Transactions on Computers. - 2012. - Vol. 61, No. 3. - P. 289-298.

2. Higham N.J. Accuracy and stability of numerical algorithms. - Philadelphia, USA: SIAM, 2002. - 680 p.

3. Priest D.M. Algorithms for arbitrary precision floating point arithmetic // Proceedings of the 10th IEEE Symposium on Computer Arithmetic. Grenoble, France: IEEE. - 1991.

- P. 132-143.

4. Higham N.J. The Accuracy of Floating Point Summation // SIAM Journal on Scientific Computing. - 1993. - Vol. 14, No. 4. - P. 783-799.

5. Anderson I.J. A Distillation Algorithm for Floating-Point Summation // SIAM Journal on Scientific Computing. - 1999. - Vol. 20, No. 5. - P. 1797-1806.

6. Zhu Y.-K., Yong J.-H., Zheng G.-Q. A New Distillation Algorithm for Floating-Point Summation // SIAM Journal on Scientific Computing. - 2005. - Vol. 26, No. 6. - P. 2066-2078.

7. Ogita T., Rump S.M., Oishi S. Accurate Sum and Dot Product // SIAM Journal on Scientific Computing. - 2005. - Vol. 26, No. 6. - P. 1955-1988.

8. Rump S.M. Ultimately Fast Accurate Summation // SIAM Journal on Scientific Computing.

- 2009. - Vol. 31, No. 5. - P. 3466-3502.

9. Goodrich M.T., Eldawy A. Parallel Algorithms for Summing Floating-Point Numbers // Proceedings of the 28th ACM Symposium on Parallelism in Algorithms and Architectures. - Pacific Grove, California, USA: ACM, 2016. - P. 13-22.

10. Demmel J., Nguyen H.D. Fast reproducible floating-point summation // Proceedings of the 21st IEEE Symposium on Computer Arithmetic (ARITH). - Austin, Texas: IEEE, 2013. - P. 163-172.

11. Demmel J., Nguyen H.D. Parallel reproducible summation // IEEE Transactions on Computers.

- 2015. - Vol. 64, No. 7. - P. 2060-2070.

12. Collange S., Defour D., Graillat S., Iakymchuk R. Numerical reproducibility for the parallel reduction on multi- and many-core architectures // Parallel Computing. - 2015. - Vol. 49.

- P. 83-97.

13. Neal R.M. Fast Exact Summation Using Small and Large Superaccumulators // Technical report, University of Toronto. - 2015. - URL: http://www.cs.toronto.edu/~radford/ftp/xsum.pdf (дата обращения 08.10.2018).

14. Kadric E., Gurniak P. and DeHon A. Accurate Parallel Floating-Point Accumulation // IEEE Transactions on Computers. - 2016. - Vol. 65, No. 11. - P. 3224-3238.

15. ReproBLAS: Reproducible BLAS. - URL: https://bebop.cs.berkeley.edu/reproblas/index.php (дата обращения 31.10.2018).

16. ExBLAS - Exact BLAS. - URL: https://exblas.lip6.fr/ (дата обращения 31.10.2018).

17. Bailey D.H., Barrio R., Borwein J.M. High-precision computation: Mathematical physics and dynamics // Applied Mathematics and Computation. - 2012. - Vol. 218, No. 20. - P. 10106-10121.

18. Joldes M., Muller J.M., Popescu V. Implementation and Performance Evaluation of an Extended Precision Floating-Point Arithmetic Library for High-Accuracy Semidefinite Programming // Proceedings of the 24th IEEE Symposium on Computer Arithmetic (ARITH).

- London, UK: IEEE, 2017. - P. 27-34.

19. Zhao K., Chu X. GPUMP: a Multiple-Precision Integer Library for GPUs // Proceedings of the 2010 10th IEEE International Conference on Computer and Information Technology (CIT 2010). - Bradford, UK: IEEE, 2010. - P. 1164-1168.

20. Lu M., He B., Luo Q. Supporting extended precision on graphics processors // Proceedings of the Sixth International Workshop on Data Management on New Hardware (DaMoN'10). - Indianapolis, Indiana, USA: ACM, 2010. - P. 19-26.

21. Isupov K., Kuvaev A., Popov M., Zaviyalov A. Multiple-Precision Residue-Based Arithmetic Library for Parallel CPU-GPU Architectures: Data Types and Features // Lecture Notes in Computer Science. - Springer, 2017. - Vol. 10421. - P. 196-204.

22. Hida Y., LiX.S., Bailey D.H. Algorithms for quad-double precision floating point arithmetic // Proceedings of the 15th IEEE Symposium on Computer Arithmetic. - Vail, CO, USA: IEEE, 2001. - P. 155-162.

23. Bailey D.H., Hida Y., Li X.S., Thompson B. ARPREC: An arbitrary precision computation package // Technical report, Lawrence Berkeley National Lab. - 2002. - URL: https://www.osti.gov/biblio/817634 (дата обращения 25.10.2018).

24. Акушский И.Я., Юдицкий Д.И. Машинная арифметика в остаточных классах. - М.: Сов. Радио, 1968. - 440 с.

25. Omondi A., Premkumar B. Residue number systems: theory and implementation. - London: Imperial College Press, 2007. - 312 p.

26. Mohan P.A. Residue Number Systems. Theory and Applications. - Cham: Birkhauser, 2016.

- 351 p.

27. Dalton B., Wang A., Blainey B. SIMDizing pairwise sums: a summation algorithm balancing accuracy with throughput // Proceedings of the 2014 Workshop on Programming Models for SIMD/Vector Processing (WPMVP'14). - Orlando, Florida, USA: IEEE, 2014. - P. 65-70.

28. Harris M. Optimizing parallel reduction in CUDA. - URL: https://developer.download.nvidia.com/assets/cuda/files/reduction.pdf (дата обращения: 04.11.2018).

29. Isupov K., Knyazkov V. Interval Estimation of Relative Values in Residue Number System // Journal of Circuits, Systems and Computers. - 2018. - Vol. 27, No. 1. - P. 1850004.

30. Hauser J.R. Handling Floating-Point Exceptions in Numeric Programs // ACM Transactions on Programming Languages and Systems. - 1996. - Vol. 18, No. 2. - P. 139-174.

31. Исупов К.С., Князьков В.С., Куваев А.С. Эффективное масштабирование в системе остаточных классов с использованием интервальных оценок // Вычислительные технологии.

- 2018. - Т. 23, № 3. -С. 39-57.

32. McNamee J.M. A comparison of methods for accurate summation // ACM SIGSAM Bull. - 2004. - Vol. 38, No. 1. - P. 1-7.

33. Fousse L., Hanrot G., Lefèvre V., Pélissier P., Zimmermann P. MPFR: a multiple-precision binary floating-point library with correct rounding // ACM Transactions on Mathematical Software. - 2007. - Vol. 33, No. 2. Article No. 13.

REFERENCES

1. Kornerup P., Lefèvre V., Louvet N., Muller J. On the Computation of Correctly Rounded Sums, IEEE Transactions on Computers, 2012, Vol. 61, No. 3, pp. 289-298.

2. Higham N.J. Accuracy and stability of numerical algorithms. Philadelphia, USA: SIAM, 2002, 680 p.

3. Priest D.M. Algorithms for arbitrary precision floating point arithmetic, Proceedings of the 10th IEEE Symposium on Computer Arithmetic. Grenoble, France: IEEE, 1991, pp. 132-143.

4. Higham N.J. The Accuracy of Floating Point Summation, SIAM Journal on Scientific Computing, 1993, Vol. 14, No. 4, pp. 783-799.

5. Anderson I.J. A Distillation Algorithm for Floating-Point Summation, SIAM Journal on Scientific Computing, 1999, Vol. 20, No. 5, pp. 1797-1806.

6. Zhu Y.-K., Yong J.-H., Zheng G.-Q. A New Distillation Algorithm for Floating-Point Summation, SIAM Journal on Scientific Computing, 2005, Vol. 26, No. 6, pp. 2066-2078.

7. Ogita T., Rump S.M., Oishi S. Accurate Sum and Dot Product, SIAM Journal on Scientific Computing, 2005, Vol. 26, No. 6, pp. 1955-1988.

8. Rump S.M. Ultimately Fast Accurate Summation, SIAM Journal on Scientific Computing, 2009, Vol. 31, No. 5, pp. 3466-3502.

9. Goodrich M.T., Eldawy A. Parallel Algorithms for Summing Floating-Point Numbers, Proceedings of the 28th ACM Symposium on Parallelism in Algorithms and Architectures. Pacific Grove, California, USA: ACM, 2016, pp. 13-22.

10. Demmel J., Nguyen H.D. Fast reproducible floating-point summation, Proceedings of the 21st IEEE Symposium on Computer Arithmetic (ARITH). Austin, Texas: IEEE, 2013, pp. 163-172.

11. Demmel J., Nguyen H.D. Parallel reproducible summation, IEEE Transactions on Computers, 2015, Vol. 64, No. 7, pp. 2060-2070.

12. Collange S., Defour D., Graillat S., Iakymchuk R. Numerical reproducibility for the parallel reduction on multi- and many-core architectures, Parallel Computing, 2015, Vol. 49, pp. 83-97.

13. Neal R.M. Fast Exact Summation Using Small and Large Superaccumulators, Technical report, University of Toronto, 2015. Available at: http://www.cs.toronto.edu/- rad-ford/ftp/xsum.pdf (accessed 08 October 2018).

14. Kadric E., Gurniak P. and DeHon A. Accurate Parallel Floating-Point Accumulation, IEEE Transactions on Computers, 2016, Vol. 65, No. 11, pp. 3224-3238.

15. ReproBLAS: Reproducible BLAS. Available at: https://bebop.cs.berkeley.edu/reproblas/ in-dex.php (accessed 31 October 2018).

16. ExBLAS - Exact BLAS. Available at: https://exblas.lip6.fr/ (accessed 31 October 2018).

17. Bailey D.H., Barrio R., Borwein J.M. High-precision computation: Mathematical physics and dynamics, Applied Mathematics and Computation, 2012, Vol. 218, No. 20, pp. 10106-10121.

18. Joldes M., Muller J.M., Popescu V. Implementation and Performance Evaluation of an Extended Precision Floating-Point Arithmetic Library for High-Accuracy Semidefinite Programming, Proceedings of the 24th IEEE Symposium on Computer Arithmetic (ARITH). London, UK: IEEE. 2017, pp. 27-34.

19. Zhao K., Chu X. GPUMP: a Multiple-Precision Integer Library for GPUs, Proceedings of the 2010 10th IEEE International Conference on Computer and Information Technology (CIT 2010). Bradford, UK: IEEE, 2010, pp. 1164-1168.

20. Lu M., He B., Luo Q. Supporting extended precision on graphics processors, Proceedings of the Sixth International Workshop on Data Management on New Hardware (DaMoN'10). Indianapolis, Indiana, USA: ACM, 2010, pp. 19-26.

21. Isupov K., Kuvaev A., Popov M., Zaviyalov A. Multiple-Precision Residue-Based Arithmetic Library for Parallel CPU-GPU Architectures: Data Types and Features, Lecture Notes in Computer Science. Springer, 2017, Vol. 10421, pp. 196-204.

22. Hida Y., Li X.S., Bailey D.H. Algorithms for quad-double precision floating point arithmetic, Proceedings of the 15th IEEE Symposium on Computer Arithmetic. Vail, CO, USA: IEEE, 2001, pp. 155-162.

23. Bailey D.H., Hida Y., Li X.S., Thompson B. ARPREC: An arbitrary precision computation package, Technical report, Lawrence Berkeley National Lab. 2002. Available at: https://www.osti.gov/biblio/817634 (accessed 25 October 2018).

24. Akushskiy I.Ya., Yuditskiy D.I. Mashinnaya arifmetika v ostatochnykh klassakh [Machine arithmetic in residual classes]. Moscow: Sov. Radio, 1968, 440 p.

25. Omondi A., Premkumar B. Residue number systems: theory and implementation. London: Imperial College Press, 2007, 312 p.

26. Mohan P.A. Residue Number Systems. Theory and Applications. Cham: Birkhauser, 2016, 351 p.

27. Dalton B., Wang A., Blainey B. SIMDizing pairwise sums: a summation algorithm balancing accuracy with throughput, Proceedings of the 2014 Workshop on Programming Models for SIMD/VectorProcessing (WPMVP '14). Orlando, Florida, USA: IEEE, 2014, pp. 65-70.

28. Harris M. Optimizing parallel reduction in CUDA. Available at: https://developer.download.nvidia.com/assets/cuda/files/reduction.pdf (accessed 04 November 2018).

29. Isupov K., Knyazkov V. Interval Estimation of Relative Values in Residue Number System, Journal of Circuits, Systems and Computers, 2018, Vol. 27, No. 1, pp. 1850004.

30. Hauser J.R. Handling Floating-Point Exceptions in Numeric Programs, ACM Transactions on Programming Languages and Systems, 1996, Vol. 18, No. 2, pp. 139-174.

31. Isupov K.S., Knyaz'kov V.S., Kuvaev A.S. Effektivnoe masshtabirovanie v sisteme ostatochnykh klassov s ispol'zovaniem interval'nykh otsenok [Effective scaling in the system of residual classes using interval estimates], Vychislitel'nye tekhnologii [Computational technologies], 2018, Vol. 23, No. 3, pp. 39-57.

32. McNamee J.M. A comparison of methods for accurate summation, ACM SIGSAM Bull, 2004, Vol. 38, No. 1, pp. 1-7.

33. Fousse L., Hanrot G., Lefevre V., Pelissier P., Zimmermann P. MPFR: a multiple-precision binary floating-point library with correct rounding, ACM Transactions on Mathematical Software, 2007, Vol. 33, No. 2, Article No. 13.

Статью рекомендовал к опубликованию д.т.н. Ш.А. Оцоков.

Исупов Константин Сергеевич - Вятский государственный университет; e-mail: ks_isupov@vyatsu.ru; 610000, г. Киров, ул. Московская, 39; тел.: +79536743902; кафедра электронных вычислительных машин; к.т.н.; в.н.с.

Князьков Владимир Сергеевич - e-mail: knyazkov@vyatsu.ru; тел.: +79058718621; кафедра электронных вычислительных машин; д.т.н.; профессор.

Куваев Александр Сергеевич - e-mail: kyvaevy@gmail.com; тел.: +79229672484; кафедра электронных вычислительных машин; аспирант.

Isupov Konstantin Sergeevich - Vyatka State University; e-mail: ks_isupov@vyatsu.ru; 39 Moskovskaja street, Kirov, 610000, Russia; phone: +79536743902; the department of electronic computing machines; cand. of eng. sc.; leading researcher.

Knyazkov Vladimir Sergeevich - e-mail: knyazkov@vyatsu.ru; phone: +79058718621; the department of electronic computing machines; dr. of eng. sc.; professor.

Kuvaev Alexander Sergeevich - e-mail: kyvaevy@gmail.com; phone: +79229672484; the department of electronic computing machines; postgraduate student.