Научная статья на тему 'Об одном формате полиномов для параллельных вычислений'

Об одном формате полиномов для параллельных вычислений Текст научной статьи по специальности «Математика»

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

Текст научной работы на тему «Об одном формате полиномов для параллельных вычислений»

ОБ ОДНОМ ФОРМАТЕ ПОЛИНОМОВ ДЛЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ © Г.И. Малашонок, Ю.Д. Валеев

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

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

Предлагаемый формат основан на идее дихотомического деления полинома. Для полинома^*) одной переменной происходит разделение на старшую/(х) и младшую /2(х) части так, что Дх) = ]\(х) + /г(х), ^(/гМ) < 2*"' < с^(Дл:)) = ск§(/'|(*)) < 2*. Для полиномов многих переменных вводится порядок на переменных и выделяется старшая переменная. Затем полином рассматривается как полином от одной старшей переменной над кольцом полиномов от остальных переменных. Эта процедура повторяется по всем переменным.

Рассмотрим подробнее формат для полинома одной переменной над числовым кольцом. Пусть задан полином / ё Ъ [х]: /(х) = а,У + а„^х" ' + ... + а0, 2*-1 < < <ieg{f(x))< 2*. Строение полинома хранится в виде бинарного дерева (Бидерева) высотой к. Мономы соответствуют концевым вершинам. Путь от корня до концевой вершины, соответствующей моному ар‘, кодируется двоичной записью числа г, г = (Ьк, Ьк^\, ..., Ь\). Каждый бит Ьу определяет одно из двух возможных направлений для исходящего ребра: 1 - левое, 0 - правое. Например, моному соответствует путь, начинающийся от корня и состоящий из 4 ребер: левое, правое, левое, левое (11 ю = 10112).

В строении полинома многих переменных эта конструкция повторяется. Пусть/е Ъ [Х\, х2, ..., хт] = = Ъ [Х|, л:2, хт^\][хт]. Запишем полином/в виде/(*„,)

= ад„" + ап-1Хт"~] + ... + а0, где а/е Ъ [*,, х2, ..., хт.{\. Построим бидерево, соответствующее полиному одной переменной х„,. Его концевые вершины указывают на ПОЛИНОМЫ 171—1 переменной Яу. Аналогично строятся бидеревья соответствующие этим полиномам и так продолжается далее до х\, концевым вершинам по-

следних бидеревьев соответствуют числовые коэффициенты.

Полученное Бидерево (с заглавной буквы) для полинома т переменных естественным образом распадается на т слоев: слой у образован бидеревьями (с прописной буквы)у-той переменной.

Для записи полинома используются два вектора: информационный вектор Іп V и вектор коэффициентов полинома С/У.

Информационный вектор 1п V делится на блоки, состоящие из четырех чисел. Каждый блок имеет свой абсолютный адрес кратный четырем. Адрес блока В относительно А - это целое число, которое нужно добавить к адресу блока А, чтобы получить адрес блока В. В информационном векторе используются только относительные адреса, чтобы можно было переносить части информационного вектора, не пересчитывая адреса.

В каждом слое бидеревья начинаются с заголовков, состоящих из четырех чисел. Заголовок бидерева имеет вид:

1-е ЧИСЛО (/) - номер переменной X; (номер слоя);

2-е число (ку), А, — Г 1о£2 (сіе£ Д*,))! - длина пути от корня до концевой вершины в этом бидереве СЛОЯ У;

3-є число К = А,- + шах А, - длина самого

длинного пути до концевой вершины;

4-е число М - число ненулевых мономов в Бидереве, пути к которым лежат через эту вершину.

Блоки в информационном векторе соответствуют вершинам бидерева. Различаются концевые и не концевые вершины бидерева. Блоки бидерева, соответствующие концевым вершинам, содержат четыре числа:

1-е число сообщает о левом ребре: 0 - левая ветвь указывает на числовой коэффициент; -1 - левой ветви нет; в остальных случаях - относительный адресо заголовка бидерева в ІпV, на которое указывает левая ветвь;

2-е число сообщает о правом ребре аналогично;

3-є число - слагаемое адреса коэффициентов в С/У, пути к которым лежат через правое ребро;

4-е число - число мономов в бидереве, пути к которым лежат через эту вершину.

Блоки бидерева, соответствующие не концевым вершинам, отличаются только тем, что первое и второе число не могут иметь значение 0, а содержащееся в них положительное число - это относительный адрес блока в 1пУ, соответствующего вершине, которой оканчивается левое (1-ое число) или правое (2-е число) ребро. Отсутствие ребра обозначается (-1).

Пример полинома нескольких переменных:

/= (2х6 + 3х)у6 + (Юх3 + 5*У є Ъ [х,у].

1пУ = (20,31,62,43) (44,405,2б,27) (48,—19,0|о,1ц)

(—112,413,014,115) (116,317,318,219) (42о, 1221,122,2гз)

(424,— 125,026,127) [— 128,0г9,0зо. 131 ] (~ 132,4зз,034,135)

[0зб,-1 37,038,139] (440,-141,042,143) (444,-145,046,147)

(1481249,250,251) (452,-153,054,255) [055,057,158,259]

ОГ=2о,3„102,5з.

Здесь компоненты векторов пронумерованы и сгруппированы в блоки. Концевые блоки обозначены квадратными скобками, заголовки бидеревьев выделены жирным шрифтом. Например, из заголовка (2о,31,62,4з) следует, что переменная у имеет второй номер, старшая степень по у в двоичной записи имеет 3 разряда, суммарное число двоичных разрядов для записи старших степеней по х и у равно 6, всего у полинома 4 монома.

Отметим некоторые свойства данного формата.

Если из корневой вершины исходят оба ребра, то все блоки, соответствующие вершинам, путь к которым лежит через левое ребро, располагаются в 1пУ, начиная с относительного адреса 4, а после них в старшей части 1п V располагаются все блоки, соответ-

ствующие вершинам, путь к которым лежит через левое ребро.

В примере из корневой вершины исходят оба ребра, поэтому левая часть (2хь + 3х)уь находится с адреса 8 по 39, а правая часть (1 Ох3 + 5x2)yi - с адреса 40 по 59. Таким же свойством обладает и вектор коэффициентов: коэффициенты для левой части располагаются по адресам 0 и 1, а для правой части - 2 и З.На этом свойстве информационного вектора основано деление бидерева пополам.

Если векторы InV и CJV имеют по lengthlnV и lenghtCJV компонент, соответственно, и {left, right, пит, *) - запись в корневом блоке, то левая часть Бидерева расположена в InV по абсолютным адресам от 8 до {right + 3), а ее коэффициенты расположены в CJV с адреса 0 до {пит - 1); правая часть Бидерева расположена по абсолютным адресам от {right + 4) до {lengthlnV - 1), а ее коэффициенты - с пит до {lenghtCJV - 1).

БЛАГОДАРНОСТИ: Работа частично финансировалась грантами Министерства образования РФ № Е02-2.0-98 и «Научный потенциал» 23-03-24.

БЫСТРЫЕ АЛГОРИТМЫ ДЕЛЕНИЯ ПОЛИНОМОВ

© М.С. Зуев

История быстрых алгоритмов умножения имеет сегодня обширную библиографию, и крайне мало работ посвящено быстрым алгоритмам деления (см. [2-4]). Например, в известной монографии Д. Кнута [1] упоминаются только стандартные алгоритмы деления. Все больший интерес к быстрым алгоритмам связан с параллельными вычислительными системами. В данной работе приводится быстрый алгоритм деления, ориентированный на параллельную рекурсивную дихотомическую реализацию с использованием быстрого умножения по Карацубе.

1. БЫСТРЫЙ АЛГОРИТМ КОРОТКОГО УМНОЖЕНИЯ

Пусть Л - коммутативная область,/и g- полиномы из Л[лс]. Для натурального п младшую часть произведения/^ степени п - 1 назовем коротким произведением и обозначим {[g)„:

(fg)n =fgmodx"

Пусть deg(/) = с^(§) = п - 1. Возьмем рациональное число Р из интервала [0,5; 1] и разобьем полиномы / и § на старшую и младшую часть: / = /] -х^" + /2 = =/з -х" 'Р)" +/4, £ = g\ -*р" +gг=gз •*<1 “Р)" + gi■ Тогда (fg)„ = Р шо<1 х", где

Р = ^"(СА'ЫлО -р>+ (/г£4)11(1 -р)) +/2 ^gг■ (1)

J ,87 і

0 8

\

\ 8,7 Q.6E

■■ - t 8,6 Л - 1.55 8,5

г 4

0 2* 2*+|

Рис. 1. Результаты экспериментальных исследований лучших значений (3 для алгоритма умножения Карацубы

Это равенство дает рекуррентную схему для вычисления короткого умножения {[g)„.

Если применяется стандартный алгоритм умножения, то наилучшим значением р является 0,5, при этом для короткого умножения требуется вдвое меньше операций над коэффициентами, чем для полного умножения. В общем случае лучшее значение для р может быть другим. Результаты экспериментальных исследований лучших значений р для алгоритма умножения Карацубы представлены на рис. 1. По горизонтальной оси отложены значения п в интервале [2к, 2*+|], по вертикальной оси - выигрыш по сравнению с ис-

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