Научная статья на тему 'Переразмещение матриц к блочному виду с минимизацией использования дополнительной памяти'

Переразмещение матриц к блочному виду с минимизацией использования дополнительной памяти Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
225
36
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КАНОНИЧЕСКОЕ РАЗМЕЩЕНИЕ МАТРИЦ / БЛОЧНОЕ РАЗМЕЩЕНИЕ МАТРИЦ / ДВОЙНОЕ БЛОЧНОЕ РАЗМЕЩЕНИЕ МАТРИЦ / ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ ВЫЧИСЛЕНИЯ / ЦИКЛ ПЕРЕСТАНОВКИ / КЕШ-ПАМЯТЬ / CANONICAL LAYOUTS / BLOCK LAYOUT / DOUBLE BLOCK LAYOUT / HIGH-PERFORMANCE COMPUTATIONS / CYCLE OF PERMUTATION / CACHE MEMORY

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

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

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Юрушкин Михаил Викторович, Семионов Станислав Георгиевич

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

MATRIX REALLOCATION TO THE BLOCK LAYOUT WITH MINIMAL USAGE OF ADDITIONAL MEMORY

In this paper a new method of matrix layout changing in shared memory is suggested. Row-major matrix layout is used in C language like a standard matrix layout. Block data layout is used to divide matrix by blocks and allocate elements from the same block near to each other. Block data layout helps to achieve better performance of cache memory for a big number of algorithms. The feature of suggested method of matrix layout changing is a small size of additional memory buffer. The size of this buffer is equal to the block raw length. According to numerical results suggested method helps to effectevely change matrix placement between standard layout and block layout. Suggested algorithm can be used with block algorithms, which use block data layout. Program implementation of suggested method is implemented in the scope of OPS system.

Текст научной работы на тему «Переразмещение матриц к блочному виду с минимизацией использования дополнительной памяти»

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

TECHNICAL SCIENCE. 2017. No 3

УДК 004.9, 004.428 DOI: 10.17213/0321-2653-2017-3-81-88

ПЕРЕРАЗМЕЩЕНИЕ МАТРИЦ К БЛОЧНОМУ ВИДУ С МИНИМИЗАЦИЕЙ ИСПОЛЬЗОВАНИЯ ДОПОЛНИТЕЛЬНОЙ ПАМЯТИ

© 2017 г. М.В. Юрушкин, С.Г. Семионов

Южный федеральный университет, г. Ростов-на-Дону, Россия

MATRIX REALLOCATION TO THE BLOCK LAYOUT WITH MINIMAL USAGE OF ADDITIONAL MEMORY

M.V. Yurushkin, S.G. Semionov

Southern Federal University, Rostov-on-Don, Russia

Юрушкин Михаил Викторович - канд. физ.-мат. наук, инженер-программист, Южный федеральный университет, г. Ростов-на-Дону, Россия. E-mail: [email protected]

Семионов Станислав Георгиевич - студент, Южный федеральный университет, г. Ростов-на-Дону, Россия. E-mail: [email protected]

Yurushkin Mikhail Viktorovich - Candidate of Physical

and Mathematical Sciences, software engineer, Southern

Federal University, Rostov-on-Don, Russia. E-mail: [email protected]

Semionov Stanislav Georgievich - student, Southern

Federal University, Rostov-on-Don, Russia. E-mail: [email protected]

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

Ключевые слова: каноническое размещение матриц; блочное размещение матриц; двойное блочное размещение матриц; высокопроизводительные вычисления; цикл перестановки; кеш-память.

In this paper a new method of matrix layout changing in shared memory is suggested. Row-major matrix layout is used in C language like a standard matrix layout. Block data layout is used to divide matrix by blocks and allocate elements from the same block near to each other. Block data layout helps to achieve better performance of cache memory for a big number of algorithms. The feature of suggested method of matrix layout changing is a small size of additional memory buffer. The size of this buffer is equal to the block raw length. According to numerical results suggested method helps to effectevely change matrix placement between standard layout and block layout. Suggested algorithm can be used with block algorithms, which use block data layout. Program implementation of suggested method is implemented in the scope of OPS system.

Keywords: canonical layouts; block layout; double block layout; high-performance computations; cycle of permutation; cache memory.

Введение

В современных языках программирования используются стандартные размещения массивов - по строкам (row-major) либо по столбцам (column-major), которые также называются каноническими размещениями (canonical layouts) [1]. Наряду со стандартными существует также блочное размещение матриц. Блочное размещение - это способ хранения массива в памяти, при котором массив разбивается на блоки одинакового размера (рис. 1). Блоки матрицы хранятся в памяти последовательно без промежутков. Элементы одного блока хранятся стандартным образом, например, по строкам. Блочное размещение матриц не учтено в стандартах современных языков программирования и, соответственно, не поддерживается компиляторами. Тем не менее оно позволяет существенно уменьшить коли-чество промахов к кеш-памяти данных, а также кеш-памяти TLB во многих прикладных задачах [1 - 5].

0 1 4 5 8 9 12 13

2 3 6 7 10 11 14 15

16 17 20 21 24 25 28 29

18 19 22 23 26 27 30 31

32 33 36 37 40 41 44 45

34 35 38 39 42 43 46 47

48 49 52 53 56 57 60 61

50 51 54 55 58 59 62 63

Рис. 1. Пример блочного размещения (N[=N2=8, £[=£2=2) / Fig. 1. Example of block matrix layout (N1=N2=8, B1=B2=2)

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

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

алгоритм такого переразмещения матриц, использующий не более 0(шах(Вь В2)) дополнительной памяти (В1, $2 - размеры блока). Предлагаемый алгоритм является развитием метода обхода циклов перестановки, представленного в [8] для решения задачи т-р1асе транспонирования матрицы. В общем виде выполнение т-р1асе перестановки рассмотрено в

[9]. В данной работе рассматривается применение метода обхода циклов перестановки к задаче приведения матрицы к блочному/двойному блочному виду, представлен анализ его временной и пространственной сложности для рассматриваемой задачи.

Наивный метод переразмещения заключается в выделении N2) дополни-

тельной памяти (N1, N2 - размеры матрицы) и копировании в нее элементов исходной матрицы в порядке, соответствующем блочному размещению. При этом вычисления далее ведутся с выделенным буфером. При работе с большими матрицами растет и объем буфера, затраты на копирование становятся высокими. При этом может возникнуть свопинг - обмен данных с жестким диском из-за нехватки объема оперативной памяти для размещения буфера. Обращение к диску является медленным, поэтому его необходимо исключить. Возникающая задача минимизации объема дополнительной памяти успешно решается с помощью предлагаемого метода.

Предлагаемый алгоритм реализован в виде библиотеки компилятора языка Си системы ОРС

[10]. Интеграция в ОРС позволяет разработчику управлять размещением матриц с помощью специальных прагм. Были проведены тесты, показавшие, что предлагаемый алгоритм быстрее, чем наивный. Также были проведены эксперименты на задачах умножения матриц, алгоритма Флойда, QR-разложения [11] матрицы, в которых использовались стандартное, блочное и двойное блочное размещения.

Задача поиска порождающих адресов циклов перестановки

Пусть требуется преобразовать одно размещение матрицы к другому, используя соответствующее отображение /. Тогда элемент с адресом 1 должен быть перемещен по адресу Д/). Но по этому адресу расположен какой-то другой элемент матрицы. Следовательно, нужно ДО-й элемент разместить по адресу АДО), и после

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

TECHNICAL SCIENCE

2017. No 3

этого разместить 7-й элемент по адресу Д7). Но и по адресу Л/{7)) также хранится некоторый элемент матрицы, и для него нужно произвести аналогичную процедуру. Продолжение движения по такому «маршруту» в определенный момент приведет в адрес, из которого начинался проход. Таким образом, начиная с 7, адреса массива образуют «цикл». В итоге для выполнения переразмещения требуется произвести «сдвиг по циклу», порожденному адресом 7:

г ^I(0 ^I(I(0) ^• • • ^I(0• • •) ^г.

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

(

O

B N 2

w

ln

B N 2

w

Л

где НОД(В2, N2). На выходе он выдает список порождающих адресов всех циклов перестановки, порожденной отображением /.

Индексная функция

В данной работе предлагается представление отображения строчного размещения в блочное в виде функции

I: [0; ад-1] ^ [0; NN-1]:

f = BiN2 +

BN

i mod N, , „

2 ^ B

B,

1B2

2

i mod B1N2

h--1—- a9 + i mod N mod B,

N2 2 2 2

d\ - число строк в текущем блоке; d2 - число столбцов в текущем блоке.

Для элемента с адресом i в строчном представлении функция f формирует его адрес в блочном представлении (рис. 2). Важно отметить, что:

N

Vk е [0; N -1], Vi е [kB1N2;(k +1)BJN2 -1], Bi

Vp е N: fp (i) е [kB1N2;(k + 1)B1N2 -1],

где fp(i) - это p -кратное применение функции f к адресу i.

Иными словами, начиная цикл с некоторого элемента k-й блочной полосы, мы всегда будем оставаться в ее пределах. Это означает, что во всех блочных полосах циклы распределены одинаково.

Рис. 2. Адрес элемента в матрице с блочным размещением / Fig. 2. Address of the element in the block matrix layout

Этот факт позволяет свести задачу поиска порождающих адресов циклов на интервале [0; NiN2 -1] к задаче поиска на интервале [0; B1N2 -1]. Нужно выделить случай, когда N1 mod B1 Ф 0. В этой ситуации выражение для индексной функции будет отличаться для адресов в последней блочной полосе и вне её, так как отличаться будут значения параметра d1. Это различие порождает другое «распределение» циклов в последней блочной полосе. Следовательно, в случае N1 mod B1 Ф 0. Потребуется отдельно произвести поиск порождающих адресов для последней блочной полосы.

Алгоритм поиска порождающих адресов циклов

В данной работе предлагается следующее формальное определение цикла, порожденного адресом i :

C(i) = {ij+1 mod L = f (ij )j0,

i0 = i, L e N — длина цикла.

Адреса диапазона [0; B1N2 -1] подразделяются на классы эквивалентности. Адреса i1 и i2 попадают в один класс, если С(^) = С^'2). Поэтому для корректного выполнения переразмещения требуется для каждого цикла найти единственный порождающий его адрес. Подобно подходу, использованному в [8], основная идея предлагаемого алгоритма заключается в обходе всего диапазона адресов [0; B1 N2 -1 ] и проверке для каждого адреса, порождает ли он новый цикл. Пройденным циклом будем считать цикл, порожденный одним из пройденных к этому моменту адресов интервала. Поэтому для различения новых и пройденных циклов будем использовать следующий критерий (P(i) - множество адресов, пройденных к моменту достижения адреса i):

Цикл, порожденный адресом i, является пройденным <

3p eN, 3k eP(i): fp (i) = k .

Этот критерий применяется к каждому адресу из диапазона. Переходя по циклу С(/'), будем проверять, принадлежит ли очередной адрес пройденной части интервала, и, если принадлежит, то текущий цикл определяется как пройденный, его обход прекращается, и производится переход к следующему адресу диапазона. Если при обходе был встречен исходный адрес i, то этот адрес помечается как порождающий, а цикл - как пройденный. В итоге алгоритм поиска может быть описан следующим псевдокодом:

counter = 0 address = 0 gen_list = [] forever do

gen_list ^— address

counter = counter + |C(address)|

if counter = B1*N2 then

break end if do

address = NEXT(address) while (not isNewCycle(address)) end do

return gen_list

Под NEXT(address) подразумевается переход к следующему адресу диапазона в соответствии с выбранным порядком обхода. Процедура проверки критерия для очередного адреса isNewCycle(address):

next = address do

if next e P(address) then

return false end if

next = f(next) while (next Ф address) return true

Стоит отметить, что границы множества P (address) являются вычислимыми, само это множество не хранится в памяти. Данный алгоритм добавляет в ответ лишь один порождающий адрес для каждого цикла и делает это для всех циклов перестановки. Объем памяти, требуемый для хранения списка порождающих адресов, определяется числом циклов перестановки. Экспериментально установлено, что для большинства сочетаний параметров блочного размещения (N1, N2, B1, B2) число циклов слабо зависит от их значений и может быть ограничено величиной О(тах(Вь £2)). Исключение представляют блочные размещения, близкие к транспонированию (N1= В1, В2«1). Но такие размещения не представляют интереса с

точки зрения оптимизации работы кеш-памяти процессора и в данной работе не рассматриваются. При необходимости in-place транспонирования матрицы можно обратиться к [8], где подробно описан соответствующий алгоритм.

Оптимизация поиска порождающих адресов циклов

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

Двунаправленный обход. Очевид-ным способом обхода интервала адресов выглядит обход от 0 к B1N2 -1. В этом случае, выражение для проверки вхождения очередного адреса цикла (j) во множество пройденных адресов P(i) примет вид: j < i. Однако проблемой может оказаться существование циклов, локализованных близко к противоположному краю интервала [0; B1N2 -1]. Алгоритм преодолеет почти весь интервал прежде, чем будут обнаружены адреса, порождающие оставшиеся циклы. При больших размерах задачи это может значительно замедлить поиск порождающих адресов и свести на нет выигрыш от перехода к блочному размещению матрицы. В качестве решения этой проблемы предлагается использовать двусторонний обход интервала адресов. При обнаружении каждого нового цикла алгоритм переключается на другой край интервала и продолжает обход в направлении его середины. Это ускоряет обнаружение циклов, локализованных на краях интервала.

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

Ширина цикла. Практически всегда адреса i и f(i) указывают на адреса памяти, расположенные на большом расстоянии, из-за чего они редко будут загружены в кеш-память процессора одновременно. Поэтому при выполнении переразмещения, а именно при обращении к адресу f(i), всегда происходит кеш-промах. Более того, поскольку данные загружаются в кеш-память так называемыми кеш-линиями, то из всей загруженной порции будет использована лишь одна ячейка. Остальные данные останутся неиспользованными, после чего нужно будет загружать другую кеш-линию. Для повышения эффективности работы с кеш-памятью предлагается использовать особенность блочного размещения, которая заключается в том, что

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION. TECHNICAL SCIENCE 2017. No 3

циклы перестановки являются «векторными» и обладают такой характеристикой, как «ширина»:

МС(1)) = {Т = шах(?) +1: V? е N: /? (7 + г) = /? (7) + г}.

геИ

Фактически речь идет о смежных циклах, образующих один широкий цикл. Использование этой особенности дает ряд преимуществ. Во-первых, можно перемещать несколько элементов за один шаг прохода по циклу. Это позволяет избежать лишних обращений к основной памяти, так как кеш-линии используются эффективнее. Во-вторых, сокращается число шагов при поиске порож-дающих адресов. Зная ширину цикла, после его обхода можем перейти не на (/ +1)-й адрес, а сразу на (/ +^)-й. Это дает ускорение поиска не менее, чем в w раз.

Было сделано полезное наблюдение о минимальной ширине циклов:

= НОД(В, и2).

Это означает, что любой цикл перестановки, имеющий ширину менее wmln, является частью более широкого цикла. Циклы с шириной более wmln можно обнаруживать при поиске порождающих адресов циклов, проверяя условия Л^щт) = .Л0^т1п и / 'l(i+Wmm) = Л "'(О^Щп после нахождения каждого нового цикла. Тестирование показывает, что этот способ надежен и гарантирует обнаружение циклов максимальной ширины, кратной wmln.

Оценка сложности алгоритма поиска

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

Теорема. Математическое ожидание числа шагов алгоритма, которое необходимо сделать для обнаружения порождающих адресов всех циклов, не превышает:

BN

(

w

In

îb1N2}

w V min

\

-X

где А» 0,57.

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

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

из к уже пройденных адресов, равно

d к +1

Тогда, прежде чем все порождающие адреса будут обнаружены, по циклу Cj будет сделано число шагов, матожидание которого равно:

, CI CI

|Cj | +—— +—— +...

2

3

В худшем случае число слагаемых в этой сумме равно В И2 . Обозначим его Ь. Тогда,

w

используя формулу для частичной суммы ряда

Еда 1

7=1-, получим: 7

I Cj | +

J 1 _

не,.

|( In ( L ) + X + 8 l ),

71 2 Ь ' 3

где А « 0,57 - постоянная Эйлера - Маскерони; вЬ—^0 при Ь—да. Полагая Ь достаточно большим, вЬ в дальнейшем опустим. Теперь, суммируя аналогичные результаты для остальных циклов, получаем выражение для верхней границы матожидания общего числа шагов:

(IQI+... + IQI)

( ( In

B1N2

\ \ -X

w ■

V min у

B1N2

w

In

rBN}

w

V min у

Применяя доказанную теорему, получим оценку для временной сложности алгоритма поиска порождающих адресов:

f

O

B1N2

f

In

w ■ w •

у min V min у у

B1N2

Двойное блочное размещение

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

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

TECHNICAL SCIENCE. 2017. No 3

Альтернативой является сдвиг по циклам, образованным отображением f из строчного представления в двойное блочное, а не в блочное. Это сразу приведет к требуемому размещению. Однако такой подход дает худшие результаты сравнительно с предлагаемым. Это объясняется тем, что выражение для индексной функции f для двойного блочного размещения значительно сложнее, чем для блочного размещения. Оно содержит значительное число операций целочисленного деления, которые являются относительно медленными на современных процессорах. Возросшие вычислительные затраты делают поиск порождающих адресов медленным. Еще одним осложняющим фактором является уменьшение минимальной ширины цикла в связи с появлением блоков второго уровня. В этом случае она ограничена величиной параметра D2 (число столбцов в блоках второго уровня). В соответствии с утверждениями в разделе 2.3 «Оптимизация», это снижает качество использования кэш-памяти процессора. Поэтому использование двухэтапного метода является оптимальным.

Эксперименты

Эксперименты проводились на компьютере с ОС Windows 7 x64, процессором Intel Core i5 3470, ОП 8 Гб. Приведем результаты ряда экспериментов, показывающих, что использование предлагаемого метода переразмещения позволяет создавать более эффективные программы. В таблице производится сравнение времени работы наивного (копирование в буферный массив) и предлагаемого алгоритма переразмещения матриц.

Сравнение производительности программных реализаций предлагаемого и наивного алгоритмов переразмещения матриц / Comparison of the performance of software implementations of the proposed and naive algorithms of reallocation

Алгоритм Конфигурация запуска Наивный алгоритм, с Предлагаемый алгоритм, с Ускорение

Переразмещение из стандартного размещения в блочное N=5000, B=512 0,624 0,140 4,4

N=5000, B=128 0,633 0,062 10,2

N=7500, B=512 1,418 0,370 3,8

Переразмещение из стандартного размещения в двойное блочное N=5000, B=512, D=64 0,623 0,178 3,5

N=5000, B=128, D=64 0,623 0,100 6,2

N=7500, B=512, D=64 1,410 0,457 3,1

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

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

а 4 И 4 3

100 200 300 400 500 600 Размер блока а

200 300 400 Размер блока b

100 150 200 250 300 350 400 Размер блока

c

----Программа со стандартным размещением

-Программа с блочным размещением

Рис. 3. Сравнение алгоритмов со стандартным и блочным размещениями: a - умножение матриц; b - QR-разложение; c - алгоритм Флойда / Fig. 3. Comparison of algorithms with standard and block layouts: a - matrix multiplication; b - QR-decomposition; c - Floyd algorithm

0

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

TECHNICAL SCIENCE

2017. No 3

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

На рис. 3 а рассмотрен блочный алгоритм умножения матриц. Графики показывают, что производительность программы с блочным размещением выше, чем у программы со стандартным размещением. Сравнение графиков для блочного алгоритма QR-разложения (рис. 3 Ь) и блочного алгоритма Флойда (рис. 3 с) также демонстрирует, что версия с блочным размещением матриц имеет более высокую производительность.

На рис. 4 приведены графики времени работы алгоритмов умножения матриц (рис. 4 а) и QR-разложения (рис. 4 Ь), использующих стандартное и двойное блочное размещения матриц.

Двойное блочное умножение квадратных матриц N=2000)

40 50 60 70 Размер блока а

Двойное блочное QR-разложение матрицы N=2000)

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

200 300 Размер блока b

----Программа до переразмещения

-Программа после переразмещения

Рис. 4. Сравнение алгоритмов со стандартным и двойным блочным размещениями: a - умножение матриц; b - QR-разложение / Fig. 4. Comparison of algorithms with standard and block layouts: a - matrix multiplication; b - QR-decomposition

В качестве параметра выступает размер блока второго уровня. Размер блока первого уровня фиксирован. Для умножения матриц он взят равным 100, для QR-разложения - 475. Графики показывают, что программа с двойным блочным размещением превосходит в производительности программу со стандартным размещением.

Заключение

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

Литература

1. Herrero J.R., Navarro J.J. Using Non-canonical Array Layouts in Dense Matrix Operations // Applied Parallel Computing. State of the Art in Scientific Computing: 8th International Workshop, PARA 2006, Umea, Sweden, June 18 - 21, 2006, Revised Selected Papers / Ed. by B. Kagstrom [et al.]. Berlin; Heidelberg: Springer Berlin; Heidelberg, 2007. Р. 580 - 588.

2. Efficient Matrix Multiplication Using Cache Conscious Data Layouts / N. Park [et al.]. 2001.

3. Park N., Hong B., Prasanna V.K. Tiling, block data layout, and memory hierarchy performance // IEEE Transactions on Parallel and Distributed Systems. 2003. July. Vol. 14, № 7. P. 640 - 654.

4. Park N., Hong B., Prasanna V.K. Analysis of memory hierarchy performance of block data layout // Proceedings International Conference on Parallel Processing. 2002. P. 35 - 44.

5. Автоматизация распараллеливания программ с блочным размещением данных / Б. Штейнберг [и др.] // СибЖВМ. 2015. Т. 18, № 1. С. 41 - 53.

6. Frens J.D., Wise D.S. Auto-blocking Matrix-multiplication or Tracking BLAS3 Performance from Source Code // SIGPLAN Not. New York, NY, USA, 1997. July. Vol. 32, № 7. P. 206 - 216.

7. Yurushkin M. V. Double Block Data Layout in High Performance Matrix Multiplication Algorithm // Software Engineering. 2016. Vol. 7, № 3. P. 132 - 139.

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION. TECHNICAL SCIENCE. 2017. No 3

8. Fred G. Gustavson T.S. In-Place Transposition of Rectangular Matrices // Applied Parallel Computing. State of the Art in Scientific Computing. 2007. June. P. 560 - 569.

9. Kirschenhofer P.H., Prodinger R.T. A contribution to the analysis of in situ permutation // Glas. Mat. Ser. III. 1987. Vol. 22, № 2. C. 269 - 278.

10. ОРС. Оптимизирующая распараллеливающая система. URL: www.ops.rsu.ru (дата обращения 25.01.2017).

11. Bischof C., Loan C. V. The WY Representation for Products of Householder Matrices // SIAM Journal on Scientific and Statistical Computing. 1987. Vol. 8, № 1. Р. 2 - 13.

References

1. Herrero J.R., Navarro J.J. Using Non-canonical Array Layouts in Dense Matrix Operations // Applied Parallel Computing. State of the Art in Scientific Computing: 8th International Workshop, PARA 2006, Umea, Sweden, June 18-21, 2006, Revised Selected Papers. Edit by B. Kagstrom. Berlin, Heidelberg : Springer Berlin Heidelberg, 2007. Pp. 580 - 588.

2. Park N. [i dr.]. Efficient Matrix Multiplication Using Cache Conscious Data Layouts. 2001.

3. Park N., Hong B., Prasanna V.K. Tiling, block data layout, and memory hierarchy performance // IEEE Transactions on Parallel and Distributed Systems. 2003. Vol. 14, No. 7. Pp. 640-654.

4. Park N., Hong B., Prasanna V.K. Analysis of memory hierarchy performance of block data layout // Proceedings International Conference on Parallel Processing. 2002. Pp. 35-44.

5. Shteinberg B. [i dr.] Avtomatizatsiya rasparallelivaniya programm s blochnym razmeshcheniem dannykh [Automation of parallel-ization of programs with block placement of data]. SibZhVM, 2015, vol. 18, no. 1, pp. 41-53. [In Russ.]

6. Frens J.D., Wise D.S. Auto-blocking Matrix-multiplication or Tracking BLAS3 Performance from Source Code // SIGPLAN Not. New York, NY, USA, 1997. Vol. 32, no. 7. Pp. 206-216.

7. Yurushkin M.V. Double Block Data Layout in High Performance Matrix Multiplication Algorithm // Software Engineering. 2016. Vol. 7, No. 3. Pp. 132-139.

8. Fred G. Gustavson T. S. In-Place Transposition of Rectangular Matrices // Applied Parallel Computing. State of the Art in Scientific Computing. 2007. Pp. 560-569.

9. Kirschenhofer P.H., Prodinger R.T. A contribution to the analysis of in situ permutation // Glas. Mat. Ser. III. 1987. Vol. 22, no. 2. Pp. 269-278.

10. ORS Optimiziruyushchaya rasparallelivayushchaya Sistema [ORS the Optimizing parallelizing system]. Available at: www.ops.rsu.ru (accessed 25.01.2017).

11. Bischof C., Loan C.V. The WY Representation for Products of Householder Matrices // SIAM Journal on Scientific and Statistical Computing. 1987. Vol. 8, no. 1. Pp. 2-3.

Поступила в редакцию /Received 03 мая 2017 г. /May 03, 2017

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