<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>БЛОЧНИЙ АЛГОРИТМ ПЕРЕТВОРЕНЬ ХАУСХОЛДЕРА ДЛЯ КОМП'ЮТЕРІВ ГІБРИДНОЇ АРХІТЕКТУРИ</article-title>
      </title-group>
      <pub-date>
        <year>2014</year>
      </pub-date>
      <fpage>99</fpage>
      <lpage>106</lpage>
      <abstract>
        <p>В роботі для комп'ютерів гібридної архітектури з багатоядерними та графічними процесорами запропоновано паралельний блочноциклічний алгоритм двосторонніх перетворень Хаусхолдера. Наведено результати тестування та дослідження як (масштабованості, прискорення тощо) алгоритм в залежності від його параметрів та параметрів матриці, що перетворюються. A parallel block cyclic algorithm for two-sided Householder transformations for hybrid architecture computers with multi-core and graphic processors is dealt with in the paper. Results of testing are presented together with investigation of algorithm's characteristics (scalability, acceleration) depending both on its parameters and parameters of matrix being transformed. Перетворення Хаусхолдера (ортогональні перетворення віддзеркалення) досить широко використовуються при розв'язуванні багатьох задач лінійної алгебри: на власні значення матриць, сингулярного розвинення матриць, знаходження узагальнених розв'язків систем лінійних алгебраїчних рівнянь методом найменших квадратів тощо. Такі перетворення дозволяють замінити вихідні задачі більш простими. Наприклад, обчислення власних значень довільної матриці зводиться до обчислення власних значень тридіагональної матриці або сингулярне розвинення довільної прямокутної матриці - до сингулярного розвинення дводіагональної матриці. Тому першим етапом знаходження розв'язків таких задач може бути зведення вихідної матриці задачі до двоабо тридіагональної матриці, до верхньої форми Хесенберга (для квадратних матриць порядку n), до верхньої  J (0)  дводіагональної форми J    0  (для прямокутних mn матриць, m ≥ n), де J (0) - квадратна верхня дводіагональна матриця порядку n, в якій відмінні від нуля лише елементи jk(0,k) , jk(0,k)1 .</p>
      </abstract>
      <kwd-group>
        <kwd>di  ti</kwd>
        <kwd>i</kwd>
        <kwd>ei+1  ti+1</kwd>
        <kwd>i</kwd>
        <kwd>e1  0</kwd>
        <kwd>a(ji)  0</kwd>
        <kwd></kwd>
        <kwd>0</kwd>
        <kwd>a(ji</kwd>
        <kwd>)i2</kwd>
        <kwd></kwd>
        <kwd>a(ji</kwd>
        <kwd>)n T  j  i</kwd>
        <kwd>u (i)  0</kwd>
        <kwd></kwd>
        <kwd>0</kwd>
        <kwd>ui(i)1</kwd>
        <kwd>ui(i)2</kwd>
        <kwd></kwd>
        <kwd>u n(i) T</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Для розвинення (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) можна використати n2 двосторонніх ортогональних перетворень віддзеркалення
(Хаусхолдера)
      </p>
      <p>A(i)  P(i) A(i1) P(i) , P(i)  I  xi xiT , xiT xi  2 , i = 1, 2,…, n2,
де вектори xi вибираються з умов ai(,ik)  ak(i,)i  0 (k = i +2, …, n), di  ai(,ii1) . Виходячи з цих умов, маємо
xi </p>
      <p>2
u(i)
u (i) , uk(i)  ai(,ik1) (k  i  2,, n), ui(i)1  ai(,ii11)  ei1,</p>
      <p>n
ei1  ai(,ii)1  sign(ai(,ii11) ) i ,  i2  ai(i1) 2   ai(,ik1) 2.</p>
      <p>ki1
Тоді, визначивши наступним чином вектор v(i)
v(i)  w(i)  ciu (i) ,
w(i)  bi g (i) , ci  bi w(i) T u (i) , g (i)  A(i1)u (i) , bi  ei1ui(i)1 1 ,</p>
      <p>
        2
двосторонні перетворення (2) можна записати у вигляді дворангової модифікації
тут r = 2, …, q, q = s, якщо K = 1, 2, …, N-1, і q = sN, якщо K = N.
(2)
(3)
(4)
(5)
(
        <xref ref-type="bibr" rid="ref3">6</xref>
        )
(7)
(8)
(9)
A(i)  A(i1)  u(i)v(i)T  v(i)u(i)T
(i = 1, 2,…, n2).
      </p>
      <p>Отже, на кожному кроці (для кожного i) модифікується нижня права квадратна підматриця порядку ni
матриці A(i1). При виконанні перетворень (5) враховується симетричність вихідної матриці А і всіх матриць A(i).</p>
      <p>Аналогічно використовуються двосторонні перетворення Хаусхолдера для зведення A  PJ Q
прямокутної mn (m ≥ n) матриці A до верхньої дводіагональної форми J. В цьому випадку кожне двостороне
перетворення можна записати у вигляді такої дворангової модифікації</p>
      <p>A(i)  A(i1)  u(i) y(i)T  z (i)v(i)T (i = 1, 2,…, n2).
Тут вектори u(i) , v(i) , y(i) , z(i) з умов та формул аналогічних попередньому випадку (див. [3]).</p>
      <p>
        Використовуючи односторонні перетворення Хаусхолдера, можна сформувати матрицю перетворень з H
(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ): H (i)  P(k) H (i1) (k = n-i-1, i = 1, 2,…, n2, H(0)  In, H(n-2)  H). Кожне таке перетворення можна записати
у вигляді однорангової модифікації H (i)  H (i1)  u (k) z (k)T . За аналогічними формулами формуються матриці
перетворень Хаусхолдера для зведення прямокутної матриці до верхньої дводіагональної форми тощо.
      </p>
      <p>Блочний алгоритм зведення щільної симетричної матриці до тридіагональної симетричної
матриці. На ефективність комп’ютерної реалізації алгоритмів зведення матриць, які використовують перетворення
Хаусхолдера, істотний вплив має організація роботи з оперативною пам'яттю. В сучасних процесорах ця
пам'ять має складну архітектуру, причому швидкість звернення (запису або читання) до оперативної пам'яті
різних рівнів суттєво відрізняється. В той же час при одно- або дворангових модифікаціях матриць доводиться
досить часто звертатися до найповільнішої основної оперативної пам'яті, що призводить до суттєвого
збільшення часу обчислень. Цю проблему можна вирішити шляхом модифікації алгоритму – використання блочного
виконання перетворень відзеркалення [3, 4].</p>
      <p>В блочній версії алгоритму зведення щільної симетричної матриці до тридіагональної форми
перетворення матриці виконуються так:</p>
      <p>A(Is)  A(Iss)  U I(s)V (s)T  VI(s)U I(s)T</p>
      <p>I
(I = 1, 2, …, N-1),
де N = (n+s3)/s (значення a дорівнює цілій частині числа а), s – розмір блоку, останній N-й блок має
розмір sN+2 (sN -1 – дорівнює залишку від ділення n3 на s) і модифікується за формулою
а прямокутні матриці U K(q) , V (q) формуються наступним чином:</p>
      <p>K</p>
      <p>A(n2)  A(Nss)  U N(sN )V (sN )T  VN(sN )U N(sN )T ,</p>
      <p>
        N
U K(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )  u (Kqq1) , U K(r)  U K(r1) , u (Kqqr) ,
V (
        <xref ref-type="bibr" rid="ref1">1</xref>
        )  v(Kqq1) , V (r)  V (r1) , v(Kqqr) ;
      </p>
      <p>K K K
Вектор віддзеркалення u(i) і вектор v(i) (i = Is–s+r) визначаються за формулами (3), (4). Причому добуток
A(i1)u(i) (тобто вектор v(i)) обчислюється за формулами (r &gt; 1)</p>
      <p>A(i1)u (i)  A(Iss)u (i)  U I(r1) yr  VI(r1) xr , xr  U I(r1)T u (i)  , yr  VI 
 (r1)T u (i)  ,
а елементи i-х рядка та стовпчика матриці A(i1) за наступними формулами (k = i+1, …, n)</p>
      <p>
        ai(,ii1)  ai(,Iiss)  2Ui(,rI1)Vi,(Ir1)T , ai(,ik1)  ak(i,i1)  ai(,Ikss)  U k(,rI1)Vi,(Ir1)T  Vk(,rI1)Ui(,rI1)T ,
де U (jr,I1) , V j(,rI1)  j-й рядок матриць U I(r1) , VI(r1) відповідно. Причому в цих обчисленнях використовується
наступне представлення матриці A(Is–s+r) (r = 1, 2, …, s–1):
Так само дворангову модифікацію (
        <xref ref-type="bibr" rid="ref3">6</xref>
        ) можна замінити 2s-ранговою
      </p>
      <p>A(Issr)  A(Iss)  U I(r)V (r)T  VI(r)U (r)T .</p>
      <p>I I</p>
      <p>A(Is)  A(Iss)  U I(s)YI(s)T  Z I(s)VI(s)T ,
де прямокутні матриці U K(q) , V (q) , YK(q) , Z K(q) формуються за формулами аналогічними формулам (9)–(11) (див.</p>
      <p>K
[3]). Головним тут є використання представлення виду (12), формули аналогічні (10) для обчислення добутків
матриці A(i1) або матриці A(i-1/2) на вектор та формули аналогічні (11) для обчислення елементів i-го рядка
матриці A(i1) та i-го стовпчика матриці A(i1/2). Аналогічним чином однорангові модифікації можна замінити
s-ранговими.
Паралельні алгоритми</p>
      <p>При зведенні щільної симетричної матриці до тридіагональної необхідно взяти до уваги, що обчислення
за формулами (7), (8) та (11), враховуючи симетричність, сумарно вимагають виконання по 2 n3  O(sn2 )
ари3
фметичних операцій з плаваючою комою, водночас як для всіх інших обчислень необхідно O(sn2 )
арифметичних операцій. Для несиметричних матриць або, якщо не враховувати симетричність матриці, то кількість
арифметичних операцій збільшується майже вдвічі. Тому для обчислень за формулами (7), (8) та (10) доцільно
використати графічні процесорні пристрої (GPU) та враховувати симетричність матриці. Але при використанні
багатопроцесорного комп’ютера елементи симетричної матриці розподіляються між процесорними пристроями
так, що в пам’яті кожного з них зберігається тільки підматриця цієї матриці, яка (як правило) буде
несиметричною. Тому для використання симетричності матриці обчислення за формулами (7) та (10) необхідно
організувати спеціальним чином, врахувавши розбиття на блоки. Далі на рис. 1 показано розбиття на блоки симетричної
матриць A(Is) , матриць U I(s) (ідентично розбиваються матриці VI(s) ) та векторів u (i) (ідентично розбиваються
інші n-вимірні вектори).</p>
      <p>Використовуючи позначення рис. 1 та наступні
U I ,K 1 
VI ,K 1 </p>
      <p>ui,K 1 
        
U I*,K    , VI*,K    , ui*,K    ,
U I ,N 1  VI ,N 1  ui,N 1 
 U I,N   VI ,N   ui,N 
 g (K ) 
 i,K 1 
gi(K )     ,
 ggi(,i(KN,KN))1 
можна формулу (7) розписати так: (K = I, I+1, …, N)</p>
      <p>AK(I,sK)  AK(I,sKs)  U I ,KVIT,K  VI ,KU IT,K
AK(I,sK) 1  AK(I,sKs)1  U I ,K VI*,K T  VI ,K U I*,K T</p>
      <p>або AK(Is)1,K  AK(Is1,sK)  U I*,KVIT,K  VI*,KU IT,K  AK(I,sK) 1 T .
А формули (10) для gi  A(i1)ui тоді розписуються так: (K = I, I+1, …, N)
gi(,KK)  AK(I,sKs)ui,K  AK(I,sKs)1ui*,K , gi(K )  AK(I,sKs)1 T ui,K , gi,K   gi(,JK)  U I(,rK1) yr  VI(,rK1) xr .</p>
      <p>K
J I
(10)
(11)
(12)
(13)
(14)
(15)
Рис. 1. Розбиття на блоки симетричної матриці
У випадку двосторонніх перетворень прямокутної матриці або односторонніх перетворень матриця A(Is)
розбивається на прямокутні блоки A(Is) (K = I+1, …, N) розміру s(n-Is). Тоді 2s-рангова модифікація або</p>
      <p>K
s-рангова модифікація таких блоків виконуються відповідно за формулами</p>
      <p>AK(Is)  AK(Iss)  U I ,K YI* T  Z I ,K VI* T ,</p>
      <p>H K(Is)  H K(Iss)  U I ,K Z I* T ,
(16)
де використано позначення ( X J* )T  ( X JT,J 1,, X JT,N ) . Відповідно по аналогії з (15) та (16) записуються
формули обчислення добутку матриці на вектор.</p>
      <p>Паралельний алгоритм зведення щільної симетричної матриці до тридіагональної симетричної
матриці. На комп’ютерах гібридної архітектури для зведення симетричної матриці до тридіагональної
симетричної матриці доцільно використати блочний алгоритм перетворень Хаусхолдера, оскільки в блочному
варіанті наявна велика кількість матрично-матричних і матрично-векторних операцій, які можна виконувати на GPU
за допомогою програмних модулів бібліотеки CUBLAS [5]. Блочний алгоритм також дозволяє зменшити
кількість обмінів даними між процесорними ядрами.</p>
      <p>Розпаралелення обчислень на багатоядерних комп’ютерах з графічними процесорами досягається як за
рахунок паралельного виконання розрахунків на різних ядрах, так і за рахунок паралельним обчисленням на
GPU. Крім того слід брати до уваги, що такі комп’ютери гібридної архітектури можуть мати в своєму складі
декілька обчислювальних вузлів, кожен з яких складається з декількох багатоядерних процесорів з
під’єднаними до них GPU. Тому при розробці та реалізації паралельних алгоритмів для цих комп’ютерів слід
розрізняти різні архітектури, зокрема такі: 1 ядро + 1 GPU, m ядер + m GPU на одному вузлі, m ядер + m GPU
на декількох вузлах, причому одне ядро зв’язано з одним GPU. В останніх двох випадках різниця полягає в
тому, що на одному вузлі може використовуватися спільна пам’ять.</p>
      <p>Розподіл даних і результатів. Хоча для виконання перетворень (7)-(11) достатньо елементів головної
діагоналі матриці і, наприклад, її верхнього трикутника, все-ж доцільно задавати всі елементи матриці, а
модифікувати тільки елементи верхнього трикутника. Для організації паралельних обчислень використовується
одновимірна блочна циклічна схема [3] розподілу між процесорними ядрами та між GPU елементів матриць A(Is) , у
тому числі і вихідної матриці A(0) . А саме, рядки блоків матриці циклічно розподіляються і зберігаються в
пам’яті ядра та їх копії в глобальній пам’яті відповідного GPU. У випадку використання архітектури
1 ядро + 1 GPU всі елементи матриць A(Is) зберігаються в пам’яті ядра та в пам’яті GPU.</p>
      <p>
        Результати зведення – діагональні t j, j ( j  1, 2,..., n) та позадіагональні t j, j1  t j1, j ( j  1, 2,..., n 1)
елементи тридіагональної матриці T1  A(n2) – обчислюються кожним ядром CPU. Якщо необхідно обчислити
матрицю перетворень H з (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ), то на місці елементів верхнього трикутника вихідної матриці у відповідності з їх
розподілом між процесорними пристроями в пам’яті ядер зберігаються ненульові елементи векторів ui .
      </p>
      <p>Для виконання проміжних обчислень, обмінів даними між процесорними ядрами та між ядрами і GPU
кожне ядро використовує робочий масив загальним обсягом (2s+3)n+s+2 слів, а GPU 2 робочі масиви по ns слів
кожний і один з n+2s слів.
Алгоритм. З формул (7)–(11) та рис. 1 випливає, що на I-у кроці алгоритму (I = 1, 2, …, N-1, N) можна
виділити наступні підзадачі:
 мультирозсилка всім процесорним ядрам та всім GPU I-го (провідного) рядка блоків матриці A(Iss)
(у випадку m ядер + m GPU);
 формування кожним ядром, використовуючи GPU, прямокутних матриць UI(s) , VI(s) ;
 2s-рангова модифікація (7) елементів підматриці порядку n – Is матриці A(Is) відповідно до розподілу
між процесорними ядрами; виконується на GPU.</p>
      <p>Формування прямокутних матриць U I(s) , VI(s) відповідно до (8)–(11) полягає у тому, що для кожного
i = Is-s+1, …, ks обчислюються вектори ui , gi , wi , vi та значення ряду скалярних величин. Тут доцільно
виділити наступні операції або групи операцій:
2)</p>
      <p>формування кожною парою ядро + GPU векторів gi , wi , vi згідно (10), (11), (15). При реалізації цих
операцій доцільно використати GPU, зокрема, застосувавши необхідні програмні модулі CUBLAS, та
процесона GPU згідно (15) часткових сум; при використанні архітектури 1 ядро + 1 GPU всі операції цієї групи
доцільно виконувати на GPU;</p>
      <p>3) при i &lt; Is 2(i-Is+s)-рангова модифікація (i-Is+s+1)-го рядка провідного рядка блоків матриці за
формулою (11), де використовуються вже сформовані частини відповідних прямокутних матриць. Цю підзадачу
можна розпаралелити на GPU з використанням необхідних функцій CUBLAS.</p>
      <p>Підзадача з 2s-рангової модифікації (7) за формулами (14) верхнього трикутника підматриці A(Iss)
поділяється на 2s-рангові модифікації окремих симетричних діагональних блоків AK,K та 2s-рангові модифікації
окремих
наддіагональних
прямокутних
блоків</p>
      <p>AK,K 1 ,
що складають
підматрицю
2s-рангові модифікації окремих блоків виконуються на GPU, використовуючи відповідні функції CUBLAS,
згідно розподілу елементів матриці між GPU.</p>
      <p>При програмній реалізації цього алгоритму можна використовувати можливості, які надаються
останніми версіями технології CUDA [6], асинхронних пересилок масивів даних між різними GPU та асинхронного
виконання програмних модулів на GPU, що дозволяє виконувати паралельно обчислення на процесорних ядрах
та на GPU. Ці можливості дозволяють на архітектурі m ядер + m GPU використовувати тільки GPU для
формування векторів ui , gi , wi , vi та підвищити ефективність мультирозсилки I-го (провідного) рядка блоків
матриці. Але необхідно брати до уваги, що на деяких гібридних комп’ютерах реалізація програмних засобів
останніх версій CUDA може призводити до суттєвого збільшення часу розв’язування задач.</p>
      <p>Для задачі зведення прямокутної матриці до верхньої дводіагональної форми можна запропонувати
аналогічний паралельний блочно-циклічний алгоритм двосторонніх перетворень Хаусхолдера (13). В цьому
алгоритмі виділяються три аналогічні підзадачі. При цьому в блочних операціях з під матрицями матриць A( j) не
треба враховувати симетричність і тому використовуються тільки прямокутні блоки.</p>
      <p>Паралельний алгоритм накопичення елементарних перетворень віддзеркалення. Аналогічні
паралельні алгоритми для комп’ютерів гібридної архітектури можна запропонувати для задач, які згадувались вище
– формування матриць перетворень H, P, Q, зведення прямокутної матриці до верхньої дводіагональної форми
тощо, на основі формул (16). Розглянемо наприклад, задачу накопичення елементарних перетворень
віддзеркалення, формування матриці перетворень H.</p>
      <p>Вихідними даними цієї задачі є результати зведення симетричної матриці до тридіагональної – вектори
віддзеркалення u(k) та скалярні множники bk , k = 1, 2, …, n-2. Елементи векторів віддзеркалення u(k) можуть
зберігатися на місці елементів верхнього трикутника вихідної матриці в пам’яті GPU та за необхідності в
пам’яті багатоядерних процесорів відповідно до їх одновимірного блочного циклічного розподілу. Для
збереження скалярних множників bk можна використати тимчасовий (робочий) масив. Результат – матриця H –
формується на GPU, її елементи розподілено між GPU за тією ж одновимірною блочною циклічною схемою. Для
проміжних обчислень і обмінів даними можна використати ті ж самі робочі масиви, що і в алгоритмі зведення.</p>
      <p>Як і в попередньому паралельному алгоритмі зведення симетричної матриці до тридіагональної на I-му
кроці алгоритму (I = 2, …, N-1, N) можна виділити наступні підзадачі:
A(Iss) :
Ці
 мультирозсилка всім ядрам та всім GPU елементів прямокутної матриці U N(s)I 1</p>
      <p>(у випадку використання m ядер + m GPU);
 формування кожним ядром, використовуючи GPU, прямокутної матриці ZI(s)</p>
      <p>(можливе виконання всіх обчислень на GPU);
 s-рангова модифікація (16) підматриці H (Is) відповідно до розподілу між GPU, виконується на GPU.
Розмір
блоку
s
32
64
96
112
128
144
160
176
192
256
320
512
1 ядро +
+ 1 GPU
84,090
58,770
52,800
–
–
–
–
50,830
50,930
51,510
53,780
54,500
2 ядра +
+ 2 GPU
55,980
44,760
43,670
–
–
–
–
39,270
45,280
46,670
45,560
50,890
Апробація паралельних алгоритмів</p>
      <p>Для досягнення найвищої продуктивності при використанні запропонованих паралельних алгоритмів
необхідно, враховуючи параметри задачі, вибрати відповідну архітектуру гібридного комп’ютера, тобто кількість
ядер та GPU, а також розмір блоку. На ці фактори впливають доволі багато чинників, пов’язаних з
характеристиками використовуваних програмно-технічних засобів. Тому теоретичне дослідження ефективності
паралельних алгоритмів для комп’ютерів гібридної архітектури складає великі труднощі і не дає достатньо достовірних
результатів.</p>
      <p>На наш погляд більш доцільним є експериментальне дослідження запропонованих алгоритмів на
розв’язуванні ряду тестових задач на конкретному комп’ютері. Таке досліджено для запропонованих
алгоритмів було проведено на комп’ютері гібридної архітектури Інпарком-G – спільній розробці Інституту кібернетики
імені В.М. Глушкова НАН України та ДНВП "Електронмаш". Цей комп’ютер має в своєму складі 4
обчислювальні вузли. Кожен вузол складається з двох чотириядерних процесорів та двох графічних процесорів.</p>
      <p>
        Чисельні експерименти проводились на обчисленні розвинення (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) щільних симетричних матриць різних
порядків, тобто на обчисленні як тридіагональної матриці T, так і матриці перетворень H, використовуючи
перетворення Хаусхолдера.
      </p>
      <p>Проведені експерименти підтвердили зроблений раніше висновок про доцільність використання в
розрахунках рівної кількості процесорних ядер та GPU. Це пов’язано з тим, що більшість розрахунків проводиться на
графічних процесорах, а ядра переважно використовуються для обмінів даними. Водночас використання на
кожному вузлі одного ядра та двох GPU не дало відчутних переваг, особливо якщо для обчислень
використовувалось декілька вузлів.</p>
      <p>Деякі результати дослідження впливу розмірів блоків на продуктивність комп’ютерів гібридної
архітектури на задачах зведення щільних симетричних матриць до тридіагональних, використовуючи перетворення
Хаусхолдера, та обчислення матриць перетвореннь H наведено в табл. 1. Дослідження проводились на однову
вузлі.</p>
      <p>Таблиця 1. Час (сек.) виконання перетворень Хаусхолдера для матриць різних порядків в залежності
від розмірів блоків
n = 6 144
Наведені результати та результати інших експериментів свідчать, що найвища продуктивність
(найменший час) досягається при розмірі блоку в межах від 96 до 192. Також ці експерименти показали, що менше
часу витрачається при розмірах блоків кратних 16.</p>
      <p>Також було перевірено масштабованість запропонованих паралельних алгоритмів, досліджено
продуктивність та прискорення.</p>
      <p>В табл. 2 показано показники продуктивності обчислень на різних архітектурах, різних середовищах
паралельного програмування та двох різних розмірах блоків при виконанні перетворень Хаусхолдера для
зведення щільних симетричних матриць різних порядків n до тридіагональних симетричних матриць. Для порівняння
наведено також продуктивність обчислень без використання графічних процесорів (зауважимо, що в цьому
випадку найвища продуктивність досягається при розмірі блоку від 8 до 16).
119,690
82,810
73,760
–
–
–
–
70,580
70,210
76,110
72,490
73,220
2 ядра +
+ 2 GPU
72,419
61,009
58,212
58,593
53,610
60,214
54,179
61,568
55,823
66,680
67,450
82,299
n = 10 000
2 ядра +
+ 2 GPU</p>
      <p>–
138,306
117,313
116,671
118,648
131,105
116,355
130,939
–
–
–
–
На діаграмах на рис. 2 показано прискорення запропонованих алгоритмів отримані при зведенні матриць
10 000-го та 20 000-го порядків при розмірі блоків 96 та 128 на різній кількості ядер та GPU порівняно
з 1 ядром та 1 GPU.</p>
      <p>Як наведені результати, так і результати інших експериментів демонструють ефективність використання
графічних прискорювачів при виконанні блочних перетворень Хаусхолдера. Продуктивність обчислень зростає
із зростанням порядку матриць. Те ж саме стосується прискорення. Це пов’язано з тим, що для менших
порядків присутнє недостатнє завантаження використовуваного обчислювального ресурсу. Тому продуктивність
обчислень незначно збільшується або навіть зменшується (за рахунок накладних витрат) починаючи з деякої
кількості ядер та GPU: для n = 4 096 це 2, для n = 7 000 це 4, для n = 10 000 це 6. Тільки при n &gt; 14 000 наявна
масштабованість для всього діапазону використовуваних процесорних ядер та GPU. Зауважимо також, що при
використанні одного вузла дещо вищу продуктивність отримано при розмірі блоків s = 128, а при використанні
більшої кількості вузлів при s = 96.
Таблиця 2. Продуктивність обчислень при виконанні перетворень Хаусхолдера в залежності від порядку n,
розмірів блоків s та використаних програмно-технічних засобів
Кіл-ть Кіл-ть Кіл-ть
вузлів
ядер</p>
      <p>GPU
n = 4 096
Висновки</p>
      <p>В роботі для комп’ютерів з багатоядерними та графічними процесорами (гібридної архітектури)
запропоновано паралельні блочно-циклічні алгоритми перетворень Хаусхолдера, зокрема, двосторонніх перетворень
для зведення щільної симетричної матриці до тридіагональної. Проведене тестування запропонованих
алгоритмів засвідчило ефективність використання графічних процесорів для виконання перетворень Хаусхолдера та
правильність вибраних підходів до розробки алгоритмів високопродуктивних обчислень для комп’ютерів
гібридної архітектури. В тому числі:</p>
      <p> перехід до блочних версій відповідних методів та алгоритмів розв’язування задач з метою виділення
підзадач з великим обсягом матрично-векторних та матрично-матричних операцій;</p>
      <p> виконання матрично-векторних та матрично-матричних операцій на графічних процесорах,
використовуючи програмні засоби від розробників технічних засобів;
 проведення експериментального дослідження якостей розробленого алгоритму.</p>
      <p>
        Проведені експериментальні дослідження запропонованих алгоритмів на задачах розвинення (
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
симетричних матриць різних порядків дозволили визначити обчислювальний ресурс та розміри блоків, достатні для
ефективного розв’язування конкретної задачі на конкретному комп’ютері. Використана для цього методика
може застосовуватися для тестування та дослідження інших алгоритмів високопродуктивних обчислень для
комп’ютерів гібридної архітектури.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>1) формування вектора ui : якщо використовується архітектура 1 ядро + 1 GPU, то на GPU, а якщо m ядер + m GPU, то можна виконати на кожному процесорному ядрі з подальшим копіюванням на GPU; 1</article-title>
          .
          <string-name>
            <given-names>Уилкинсон</given-names>
            <surname>Дж</surname>
          </string-name>
          .Х.,
          <string-name>
            <surname>Райнш</surname>
            <given-names>К</given-names>
          </string-name>
          .
          <article-title>Справочник алгоритмов на языке Алгол</article-title>
          .
          <source>Линейная алгебра. - М.: Машиностроение</source>
          ,
          <year>1976</year>
          . -
          <fpage>389</fpage>
          с. 2. http://www.
          <source>top500.org 3</source>
          .
          <string-name>
            <surname>Химич</surname>
            <given-names>А.Н.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Молчанов</surname>
            <given-names>И</given-names>
          </string-name>
          .Н.,
          <string-name>
            <surname>Попов</surname>
            <given-names>А</given-names>
          </string-name>
          .В.,
          <string-name>
            <surname>Чистякова</surname>
            <given-names>Т</given-names>
          </string-name>
          .В.,
          <string-name>
            <surname>Яковлев</surname>
            <given-names>М</given-names>
          </string-name>
          .Ф.
          <article-title>Параллельные алгоритмы решения задач вычислительной</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <surname>математики</surname>
          </string-name>
          . - К.: Наук. думка,
          <year>2008</year>
          . -
          <fpage>248</fpage>
          с. 4. http://www.netlib.org/ lapack/ 5. http://developer.download.nvidia.com/CUBLAS.pdf [Електронний ресурс]
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <article-title>CUBLAS 6</article-title>
          . http://developer.nvidia.
          <source>com/cuda-toolkit-4</source>
          .0 [Електронний ресурс]
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <source>CUDA TOOLKIT 4.0</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>