<!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>72</fpage>
      <lpage>82</lpage>
      <abstract>
        <p>Розроблено алгеброалгоритмічні специфікації алгоритмів метеорологічного прогнозування із застосуванням створеного інтегрованого інструментарію проектування та синтезу програм. Розроблено послідовну та паралельну програмні реалізації для вирішення задачі прогнозування погоди для території України. Проведено експеримент з виконання паралельної програми на відеографічному прискорювачі. Algebra-algorithmic specifications for meteorological forecasting algorithms were developed using the integrated toolkit for designing and synthesis of programs. Sequential and parallel programs for solving the task of weather forecasting for the territory of Ukraine. The results of the experiment of parallel program execution on a graphics accelerator are also provided.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>За останні 30 років досягнуто безперечного прогресу в розробці і оперативному застосуванні сучасних
чисельних гідродинамічних методів прогнозу погоди. Це стало можливим передусім завдяки появі сучасних
ЕОМ, розробці більш довершених і реалістичних математичних моделей, а також істотному збільшенню обсягу
початкових метеорологічних даних. Сьогодні удосконалення якості прогнозів відбувається в двох напрямках:
поліпшення справджуваності прогнозу і збільшення його завчасності. Короткостроковий прогноз визначається
головним чином початковим станом атмосфери. Для середньострокових прогнозів потрібне як детальне знання
початкових полів метеорологічних величин, так і уміння описати впливи зовнішніх чинників, які призводять до
нового стану рівноваги системи, що прогнозується [1]. Довгостроковий прогноз меншою мірою залежить від
початкового стану атмосфери і включає в себе елементи моделювання клімату. Збільшення завчасності
прогнозів веде до необхідності розширення області інтегрування аж до охоплення всієї поверхні земної кулі, що
спричиняє необхідність використання потужних мультипроцесорних комп’ютерів.</p>
      <p>Якість чисельних методів прогнозів погоди залежить у першу чергу від таких чинників:
• точності опису фізичних процесів, що обумовлюють зміни в часі макромасштабних і мезомасштабних
характеристик атмосфери під впливом рельєфу;
• адекватності фактичних фізичних процесів підсіткового масштабу і тих, що моделюються;
• точності задавання початкових і крайових умов;
• швидкості чисельного інтегрування вихідних рівнянь.</p>
      <p>Комп’ютерна реалізація чисельних методів для таких складних задач, як моделювання
метеорологічних процесів, наразі вже неможлива без використання методів високопродуктивних обчислень, адже
прогнозування погоди завжди пов’язане з жорсткими часовими обмеженнями. Одним з перспективних напрямів у
розробці і дослідженні систем паралельних і розподілених обчислень нині є побудова програмних абстракцій
у вигляді алгеброалгоритмічних мов і моделей [2], що ставить своєю метою розвиток архітектурно- і
мовнонезалежних засобів програмування для мультипроцесорних обчислювальних систем і мереж. У роботах [3, 4]
був запропонований підхід до вирішення проблем моделювання циркуляції атмосфери, що поєднує
комплексність використання адекватних фізичних моделей атмосферних процесів з ефективними обчислювальними
схемами і методами програмування високопродуктивних обчислень на паралельних ЕОМ, що дає змогу
досягати належного ступеня точності, повноти і своєчасності інформації, необхідної для складання якісних
метеорологічних прогнозів. Відмітимо, що подальший прогрес у покращенні показників якості створення
паралельних систем метеорологічного прогнозування пов’язаний із використанням відеографічних
прискорювачів (GPU) [5]. У попередніх роботах авторів [2, 6] розроблено інструментарій проектування та синтезу
програм (ІПС), що забезпечує автоматизацію розробки алгоритмів та програм для різноманітних паралельних
платформ. В роботі [7] було виконане налаштування системи на генерацію паралельних програм для GPU.
Інструментарій ґрунтується на алгебрі алгоритміки [2] та призначений для конструювання алгоритмів у
вигляді схем (високорівневих формалізованих проектів), поданих у системах алгоритмічних алгебр Глушкова
(САА). У даній роботі розроблена система використовується для конструювання алгоритмів та генерації
програм чисельного прогнозування погоди. Реалізація паралельного алгоритму виконана мовою C++ із
використанням технології CUDA [8], що дозволяє проводити обчислення на графічних прискорювачах NVIDIA.
Матеріал даної роботи складається з таких розділів. Розділ 1 присвячено огляду використаної
математичної моделі та скінченно-різницевих методів, що застосовуються для чисельного прогнозування
стану навколишнього середовища. В розділі 2 виконане формалізоване проектування послідовного та
паралельного алгоритмів прогнозування, що ґрунтуються на розглянутій моделі та методах. У розділі 3 наведено
результати експерименту із виконання розробленої паралельної програми прогнозування на відеографічному
прискорювачі.
 u
 t
 </p>
      <p>u
r cos 
u v u

r 
 w
u
</p>
      <p> u 
  2  r cos v sin 

 r co1s  v   1 g F   r co1s  G u   1r  G u  
 L  dqH   QK  Q  QR ,</p>
      <p>  dt 
q  
t</p>
      <p>r cous q  vr q  w q 
 r co1s   G q   1r   G q   H 1F 2   H q    X ,
qL  
t</p>
      <p>u qL  v qL  w qL 
r cos  r  
 r co1s  G qL   1r  G qL   H 1F 2   H qL  
  dqH  M K  M  ,</p>
      <p>dt
qW  
t</p>
      <p>
        u qW  v qW  wqW 
r cos  r  
 r co1s  G qW   1r  G qW   H 1F 2   H qW  
  H1 F  VoqW  ddqtH  M  ,
(1)
(2)
(3)
(4)
(
        <xref ref-type="bibr" rid="ref1">5</xref>
        )
(6)
(7)
p 1 1  u  v cos d ,
t  gw  2gw  1  gH  F  r cos    
k  
t
      </p>
      <p>
        u k  v k  w k 
r cos  r  
 C2 k HKMF 2  u 2   v 2   gv HKHF v   C3 k2  H C4F 2   KM   ,
(
        <xref ref-type="bibr" rid="ref3">12</xref>
        )
(13)
      </p>
      <p>
        У рівняннях (1)–(
        <xref ref-type="bibr" rid="ref3">12</xref>
        ) t – час;  – довгота;  – широта;   x3  F  H  F  – приведена вертикальна
координата, що відслідковує рельєф; F – висота рельєфу, H – повна висота області розв’язання моделі;
r – радіус Землі;  – кутова швидкість обертання Землі;   C p  p p0 R Cp – приведений тиск; p – тиск,
p0 – значення тиску на поверхні моря; u, v, w – складові швидкості вітру по довготі, широті і вертикальній
координаті відповідно;  – густина повітря; g  9,81 – прискорення вільного падіння; T – температура;
 – температура потенційного потоку, V – віртуальна температура потенційного потоку; q – вологість,
qH – вологість у стані насичення; qL – вода у рідкому стані; R  287,04 – газова постійна повітря; C p  3,5 R –
теплоємність повітря за умови постійного тиску; L – приховане тепло конденсації;  – ознака наявності
конденсації вологи (1 – має місце, 0 – відсутня); QK – інтенсивність звільнення прихованої теплоти конденсації
водяної пари у субсітковому масштабі; Q – інтенсивність звільнення прихованої теплоти випаровування води
у субсітковому масштабі; QR – радіаційне охолодження або нагрів; M K – внесок вологості від конденсації у
субсітковому масштабі; M  – внесок вологості від випаровування у субсітковому масштабі; Vo – усталена
швидкість опадів; k – турбулентна кінетична енергія;  – турбулентна дисипація; KG – коефіцієнт
горизонтального турбулентного обміну; KM – коефіцієнт вертикального турбулентного обміну для кількості руху; KH –
коефіцієнт вертикального турбулентного обміну для тепла та вологи; C1,C2,C3, C4  = 0,09;1,46;1,83;0,42 –
константи замикання планетарного примежового прошарку атмосфери.
      </p>
      <p>
        Прогноз значень метеорологічних величин над обмеженою територією G здійснюється на основі методу
«одностороннього впливу». Іншими словами, у якості граничних умов для регіональної моделі (1)–(
        <xref ref-type="bibr" rid="ref3">12</xref>
        )
використовуються результати аналізу і прогнозу, отримані за допомогою макромасштабної (напівсферної або
глобальної) моделі.
      </p>
      <p>Стан атмосфери в просторі r   , ,  макромасштабної області Gr   Gr визначається вектором
r,t  u,v, w, ,T ,q, qL ,qW , k,  дискретних значень аналізу і прогнозу r,t m  m r  , отриманих на основі
макромасштабної моделі в моменти часу t  t m m  0,1,..., M  з кроком   t m  t m1 . Для визначення стану
атмосфери на обмеженій території G при t  t m1,t m  виконується розв’язання задачі, що у векторному виразі
має вигляд:
  D , t  t m1,t m  , r  G
t
r,t m  m (r) , m  0, 1,..., M .</p>
      <p>Для розв’язання задачі (13) у даній роботі застосовується інтерполювання функції за декількома
значеннями самої функції (передісторією) та похідних від неї першого порядку за допомогою алгебраїчного
поліному. Використовується інтерполяція з кратними вузлами при кратності три. Виконується також
апроксимація правих частин диференціальних рівнянь моделі у вузлах просторової сітки. Детальний опис
застосованого чисельного методу наведено в монографії [1].</p>
      <p>Відмітимо, що значною проблемою при прогнозуванні погоди на основі реалізації математичних
моделей є обмеження на час розв’язання, оскільки прогноз погоди потрібно отримувати завчасно. Навіть
сучасні потужні обчислювальні машини не дозволяють використовувати дрібну просторову сітку в області
розв’язання задачі і часову дискретизацію та ітераційні методи, що дало б можливість підвищити точність
прогнозу. Особливо актуальною дана проблема видається для України, тому що питання зменшення затрат
машинного часу при розв’язанні задач динамічної метеорології стоїть особливо гостро в зв’язку з
відсутністю в національній гідрометслужбі потужної обчислювальної техніки, яку використовують у світових і
національних метеорологічних центрах розвинутих держав. В даному випадку альтернативою може стати
використання сучасної технології паралельного програмування на відеографічних процесорах, що вирізняються
порівняною дешевизною, компактністю та економністю. В даній роботі наведено результати застосування
технології CUDA для вирішення задачі прогнозування. В наступному розділі наведено схеми алгоритмів
прогнозування, побудовані на основі вищерозглянутої математичної моделі.
У даному розділі розглядається застосування апарату алгебри алгоритмів для проектування
послідовної та паралельної програм прогнозування на основі використання інструментарію ІПС. В основу згаданого
інструментарію покладено поняття систем алгоритмічних алгебр В.М. Глушкова [2]. САА є двохосновною
алгеброю &lt;U, B; &gt;, де U – множина операторів, B – множина логічних умов. Оператори є відображеннями
інформаційної множини (ІМ) у себе, логічні умови є відображеннями множини ІМ у множину значень
3-значної логіки E3 = {0, 1,  ,}, де 0 – хибність; 1 – істина;  – невизначеність. Сигнатура операцій САА
 = 1  2 складається із системи 1 логічних операцій, що приймають значення в множині B, і системи 2
операцій, що приймають значення в множині операторів U. В САА &lt; U, B;  &gt; фіксується система
утворюючих , що є скінченною функціонально повною сукупністю операторів і логічних умов. За допомогою цієї
сукупності із використанням суперпозиції операцій, що входять у , породжуються довільні оператори і
логічні умови з множин U і B.</p>
      <p>На САА ґрунтується алгоритмічна мова САА/1 [2], що використовується для проектування програм в
ІПС. Згадана мова призначена для багаторівневого структурного проектування і документування
послідовних і паралельних алгоритмів і програм. Перевагою її використання є можливість опису алгоритмів у
природно-лінгвістичній формі, зручній для людини, що полегшує досягнення необхідної якості програм.
Основними об'єктами мови САА/1 є абстракції операторів (перетворювачів даних) і умов (предикатів). Оператори й
умови можуть бути базисними або складеними. Базисний оператор (умова) – це оператор (умова), що в
СААсхемі вважається первинною атомарною абстракцією.</p>
      <p>Складені умови будуються на основі базисних за допомогою логічних операцій САА:
 диз’юнкція: 'умова1' АБО 'умова2';
 кон’юнкція: 'умова1' І 'умова2';
 заперечення: НЕ 'умова'.
Складені оператори будуються з елементарних за допомогою наступних операцій:
 "оператор1" ПОТІМ "оператор2" (або "оператор1" ; "оператор2") – послідовне
виконання операторів;
Ідентифікатори операторів в САА-схемах позначаються подвійними лапками, а умови – одинарними.
Рівні в САА-схемах позначені лівими частинами рівностей, а структура кожного рівня конкретизується (в
термінах САА) правою частиною відповідної рівності. Ліва частина рівності відокремлюється від правої
ланцюжком символів “=”.</p>
      <p>Інструментарій ІПС призначений для проектування алгоритмів і генерації програм в цільових мовах
програмування (Java та C++). Проектування алгоритмів у ІПС ґрунтується на методі діалогового
конструювання синтаксично правильних програм (ДСП-методі) [2], що забезпечує синтаксичну правильність схем.
При цьому він використовує згадані три різні форми подання алгоритмів у процесі їхнього проектування –
природно-лінгвістичну (САА-схеми), алгебраїчну (регулярні схеми) і графу-схемну. Система ІПС
підтримує генерацію коду паралельних програм різних типів: багатопотокових (зі спільною пам’яттю); програм,
орієнтованих на передачу повідомлень (MPI); програм, що використовують відеографічні прискорювачі [7].
У даній роботі розроблена система була використана для проектування послідовного та паралельного
алгоритмів чисельного прогнозування погоди. Паралельний алгоритм орієнтований на виконання обчислень із
використанням GPU.</p>
      <p>В паралельній схемі використовуються операції САА, орієнтовані на формалізацію обчислень в
CUDA-програмах, що були запропоновані в роботі [7]: операції взаємодії із відеопам’яттю, запуску ядра та
синхронізації потоків.</p>
      <p>Операція запуску ядра має вигляд:
Запуск_Ядра (blocksPerGrid, threadsPerBlock)
( "оператор" ),
де blocksPerGrid – кількість блоків у сітці (масиві блоків) CUDA; threadsPerBlock – кількість потоків у
кожному блоці; "оператор" – частина алгоритму, що буде виконуватися паралельно потоками CUDA.
Операція синхронізації
ЧЕКАТИ ‘Обробка у всіх потоках закінчена’
виконує очікування завершення обчислень усіма потоками CUDA.</p>
      <p>Далі на основі наведених операцій САА виконується побудова послідовного та паралельного алгоритмів
прогнозування.</p>
      <p>СХЕМА МЕТЕОРОЛОГІЧНЕ ПРОГНОЗУВАННЯ ====</p>
      <p>"Послідовний алгоритм чисельного прогнозування погоди"
КІНЕЦЬ КОМЕНТАРЯ
"Загальна схема обчислень"
==== "Ініціалізація початкових даних";
"Читання і введення значень рельєфу";
"Введення початкових метеорологічних даних об'єктивного
аналізу і прогнозу, отриманих з ГМЦ";
"1. Інтерполяція даних, що задані у вузлах макромасштабної сітки, у
вузли мезомасштабної сітки";
"2. Обчислення сіткових значень правих частин Q рівнянь R'=Q
гідродинаміки і тепло-, масопереносу у вузлах мезомасштабної сітки";
"3. Розрахунок прогностичних даних на заданий термін прогнозу"
КІНЕЦЬ СХЕМИ МЕТЕОРОЛОГІЧНЕ ПРОГНОЗУВАННЯ
В наведеному алгоритмі спочатку виконується ініціалізація початкових даних та зчитування із бази
даних в програму висот рельєфу для вибраної області прогнозування. У програмі задається розмір області для
початкових даних об'єктивного аналізу – географічні координати в градусах по довготі ( X 0, X k ) , широті
(Y0 ,Yk ) і висоті (Z0 , Zk ) . Параметрами сітки для цієї області є кількість вузлів і крок сітки по довготі (N, Dx ) ,
широті (M , Dy ) та висоті (L, P(i)), де P(i) – значення тиску на стандартних рівнях в початкових даних
об'єктивного аналізу. Розмір області і параметри сітки залежать від території, а також параметрів моделі чисельного
прогнозу погоди гідрометеорологічного центру (ГМЦ), з якого приймаються початкові метеорологічні дані.
Поточна версія програми орієнтована на дані об'єктивного аналізу з ГМЦ, що розташований у м. Офенбах
(Німеччина) [12]. Отримувані дані являють собою початкові умови, тобто набір вимірів, для конкретного моменту
часу, а також прогнозовані дані для наступних моментів часу з кроком у 12 годин. Ці дані потрапляють на вхід
програми прогнозування у вигляді набору файлів, яка далі виконує їх зчитування. Після введення даних із
файлів в алгоритмі виконується інтерполяція початкових даних у вузли регіональної сітки (заповнення розподілу
функцій) та обчислення значень апроксимованих правих частин диференціальних рівнянь моделі циркуляції
атмосфери. Складені оператори, що виконують зазначені дії, позначені у вищенаведеній схемі номерами 1 та 2.
Деталізація цих операторів подана в САА-схемі “ІНТЕРПОЛЯЦІЯ”, що наведена далі.</p>
      <p>
        СХЕМА ІНТЕРПОЛЯЦІЯ ====
"Заповнення початкових полів, заданих на макромасштабній сітці,
у вузли мезомасштабної сітки"
КІНЕЦЬ КОМЕНТАРЯ
"1. Інтерполяція даних, що задані у вузлах макромасштабної сітки, у
вузли мезомасштабної сітки"
==== "Оголошення та ініціалізація змінних";
"Заповнення горизонтального розподілу функцій по довготі";
"Заповнення горизонтального розподілу функцій по широті";
"Заповнення вертикального розподілу залежних функцій";
"Обчислення конденсації пари, нижньої та верхньої межі хмари, опадів"
"2. Обчислення сіткових значень правих частин Q рівнянь R'=Q
гідродинаміки і тепло-, масопереносу у вузлах мезомасштабної сітки"
==== "Виділити пам'ять для змінних Qx, Qy, RG, Q, RZ, RZ_tmp";
"Обчислення значень W_in(X, Y, Z) на основі рівняння нерозривності
методом трапецій";
"Обчислення значень Rg_in(X, Y, Z)";
"Оголошення та ініціалізація змінних";
"Обчислення правих частин Q для (U)";
"Обчислення правих частин Q для (V)";
"Обчислення правих частин Q для (q)";
"Обчислення правих частин Q для (P)";
"Обчислення правих частин Q для (Os)";
"Обчислення правих частин Q для (T)";
"Звільнення зарезервованої пам'яті для Qx, Qy, RG, Q, RZ_tmp";
У наведеній схемі отримані з ГМЦ початкові метеорологічні дані (тиск, температура, вологість та
горизонтальні компоненти вітру) методом поповнення на основі сплайн інтерполяції [1] перераховуються у
вузли мезомасштабної горизонтальної сітки, відстань між якими як по широті, так і по довготі є значно
меншою, ніж у вихідній сітці. Потім дані мезомасштабної горизонтальної сітки перераховуються у вузли
мезомасштабної вертикальної сітки. І нарешті, праві частини системи рівнянь (1)–(
        <xref ref-type="bibr" rid="ref3">12</xref>
        ) моделі циркуляції
атмосфери (див. розділ 1), які містять часткові похідні першого і другого порядку апроксимуються
трьохточковими компактними різницевими схемами [1] з урахуванням рельєфу підстильної поверхні на території
прогнозу. У результаті отримуються значення різницевих аналогів правих частин f jkl  ijkl рівнянь (1)–(
        <xref ref-type="bibr" rid="ref3">12</xref>
        ) для
кожної із залежних функцій   u,v, ,T,q, qL , k,  , j  1, J , k  1, K , l  1, L мезомасштабної сітки
для кожного конкретного терміну об'єктивного аналізу чи прогнозу, що передані з німецької національної
служби DWD Offenbach.
      </p>
      <p>Після розглянутих операторів інтерполяції та обчислення правих частин рівнянь у загальній схемі
алгоритму наведено оператор, що виконує обчислення прогностичних даних на необхідний термін часу (від
однієї до двох діб). Далі у скороченому вигляді наведена деталізація цього оператора у вигляді схеми.
"3. Розрахунок прогностичних даних на заданий термін прогнозу"
==== "Обчислення значень функції (U);
"Обчислення значень функції (V);
"Обчислення значень функції (T);
"Обчислення значень функції (q)";
"Обчислення значень функції (HS)";
"Обчислення значень функції (QC)";
"Обчислення значень W_in(X, Y, Z) на основі рівняння нерозривності
методом трапецій";
"Розрахунок нижньої й верхньої межі хмари та опадів";
"Записати отримані значення функцій у файли";
2.2. Паралельний алгоритм. У даній роботі виконано розпаралелення найбільш ресурсоємної частини
послідовного алгоритму, а саме, складеного оператора (підпрограми) обчислення сіткових значень правих
частин Q рівнянь R  Q , що позначений у вищенаведеній схемі “ІНТЕРПОЛЯЦІЯ” номером 2. Згаданий
оператор містить шість складених операторів, що піддаються розпаралелюванню, і виконують обчислення правих
частин для функцій U, V, q, P, Os та T відповідно. Відмітимо, що оператори для функцій U, V та P мають
подібну структуру і складаються з кількох вкладених циклів. Оператори для q , Os та T також схожі між собою за
структурою. Перший етап розпаралелювання підпрограми "2. Обчислення сіткових значень правих
частин Q …" полягає у включенні після оператора оголошення та ініціалізації змінних такої композиції двох
операторів:</p>
      <p>"Виділити пам’ять для лінійних масивів та занести значення з
4-вимірних масивів для H, T, U, V, Q, Pr1 у лінійні масиви";
"Виділити область пам’яті на GPU та скопіювати лінійні масиви
з CPU в GPU";
Далі виконується розпаралелення для кожного зі згаданих шістьох складених операторів для окремих
функцій. Розглянемо перетворення першого складеного оператора – "Обчислення правих частин Q
для (U)". Узагальнена послідовна САА-схема цього оператора має вигляд
"Обчислення правих частин Q для (U)"
==== ДЛЯ (h ВІД 0 ДО Pk-1)
ЦИКЛ
ДЛЯ (k ВІД 0 ДО Lmz-1)
ЦИКЛ
"Заповнити масив для Q значеннями (0)";
"Визначити змінну (FIM) типу (float) = (FIR)"
ДЛЯ (j ВІД 0 ДО Mmz-1)
ЦИКЛ
"Виконати передрозрахунок для першої похідної (Pr1)";
"Виконати обчислення першої похідної (Pr1)";
"Обчислити праві частини Q для (U)";
"Збільшити (FIM) на (DY)"
КІНЕЦЬ ЦИКЛУ
КІНЕЦЬ ЦИКЛУ
КІНЕЦЬ ЦИКЛУ
"Обчислити складові рівняння переносу в напрямку X для (U)";
"Обчислити складові рівняння переносу в напрямку Y для (U)";
"Обчислити складові рівняння переносу в напрямку Z для (U)";
"Записати результуючі дані у файли для (U)";
Розпаралелювання подібних складених операторів у програмі полягає у їх заміні на кілька Cuda-ядер.
Перетворення включає такі основні етапи:
1) заміна операторів передрозрахунку та обчислення першої похідної Pr1 на два Cuda-ядра;
2) запуск ядра, що обчислює праві частини Q рівнянь R  Q ;
3) запуск функцій-ядер, що виконують обчислення на Cuda складових рівняння переносу (адвективних та
дифузійних) в напрямках X, Y та Z відповідно. Обчислення виконуються як права частина Q рівняння R  Q ;
4) копіювання отриманих значень Q з відеопам’яті у пам’ять CPU.</p>
      <p>Далі наведено узагальнену паралельну схему обчислення правих частин рівнянь для функції U.
Розпаралелення складених операторів, що обчислюють праві частини рівнянь для функцій V та P, виконується
аналогічним чином.</p>
      <p>"Паралельне обчислення правих частин Q для (U)"
==== Запуск_Ядра(blocksPerGrid1, threadsPerBlock1)(</p>
      <p>"Виконати передрозрахунок для першої похідної (Pr1)";
);
Запуск_Ядра(blocksPerGrid2, threadsPerBlock2) (</p>
      <p>"Виконати обчислення першої похідної (Pr1)";
);
"Заповнити масив для Q у відеопам’яті значеннями (0)";
Запуск_Ядра(blocksPerGrid3, threadsPerBlock3)(</p>
      <p>"Обчислити праві частини Q для (U) на Cuda";
);
"Занести в масив (RZ) значення для функції (U)";
"Обчислити складові рівняння переносу в напрямку X на Cuda для (U)";
"Обчислити складові рівняння переносу в напрямку Y на Cuda для (U)";
"Обчислити складові рівняння переносу в напрямку Z на Cuda для (U)";
"Скопіювати масив значень Q з відеопам’яті у пам’ять CPU";
"Занести значення з лінійного масиву для Q у 4-вимірний масив";
"Записати результуючі дані у файли для (U)";
"Обчислити складові рівняння переносу в напрямку X на Cuda для (RZ)"
==== "Оголошення та ініціалізація змінних";
Запуск_Ядра(blocksPerGrid4, threadsPerBlock4)(</p>
      <p>"Виконати передрозрахунок для першої похідної (Pr1)";
);
Запуск_Ядра(blocksPerGrid5, threadsPerBlock5) (</p>
      <p>"Виконати обчислення першої похідної (Pr1)";
);
Запуск_Ядра(blocksPerGrid6, threadsPerBlock6)(</p>
      <p>"Виконати передрозрахунок для першої похідної (Pr2)";
);
Запуск_Ядра(blocksPerGrid7, threadsPerBlock7) (</p>
      <p>"Виконати обчислення першої похідної (Pr2)";
);
Запуск_Ядра(blocksPerGrid8, threadsPerBlock8) (</p>
      <p>"Виконати підсумовування (Pr1) та (Pr2)";
);
ЧЕКАТИ ‘Обробка у всіх потоках закінчена’;
"Звільнення зарезервованої пам'яті для змінних";
У вищенаведеній схемі RZ – масив, у якому зберігаються значення залежної функції, для якої
обчислюється права частина рівняння; Pr1 та Pr2 – допоміжні масиви для зберігання значень першої похідної.</p>
      <p>Далі наведено паралельну схему для оператора обчислення правих частин рівнянь для q . (Для функцій
Os та T розпаралелення виконується аналогічним чином). У схемі використовується вищенаведений
складений оператор "Обчислити складові рівняння переносу в напрямку X на Cuda для (RZ)".
Паралельне обчислення складових в напрямках Y та Z є подібним за структурою до згаданого оператора і тут
не наводиться.</p>
      <p>"Паралельне обчислення правих частин Q для (q)"
==== "Заповнити масив для Q у відеопам’яті значеннями (0)";
"Занести в масив (RZ) значення для функції (q)";
"Обчислити складові рівняння переносу в напрямку X на Cuda для (q)";
"Обчислити складові рівняння переносу в напрямку Y на Cuda для (q)";
"Обчислити складові рівняння переносу в напрямку Z на Cuda для (q)";
"Скопіювати масив значень Q з відеопам’яті у пам’ять CPU";
"Занести значення з лінійного масиву для Q у 4-вимірний масив";
"Записати результуючі дані у файли для (q)";
Завершальний етап розпаралелювання підпрограми "2. Обчислення сіткових значень
правих частин Q …" полягає у вставці операторів звільнення зарезервованої пам'яті для змінних у пам’яті
CPU та GPU.
3. Результати експерименту</p>
      <p>На основі побудованих у розділі 2 САА-схем алгоритмів прогнозування було реалізовано послідовну
та паралельну програми мовою С++ для виконання на CPU та GPU відповідно. Як уже згадувалося в
підрозділі 2.2, у даній роботі здійснено розпаралелення підпрограми обчислення значень правих частин Q рівнянь
R  Q , виконання якої займає найбільшу кількість часу порівняно з іншими частинами послідовної
програми. Розроблені програмні засоби були використані для короткострокового прогнозу погоди на території
України.</p>
      <p>Випробування проводились із використанням процесора i5-3570 (у 32-бітному режимі) та графічного
прискорювача GeForce GTX 650 Ti, що має наступні характеристики:
• 768 stream-процесори (CUDA-ядра), базова частота 928 МГц;
• обсяг глобальної пам’яті 1024 МБ;
• базова частота пам’яті 5400 МГц.</p>
      <p>Обчислення в експериментальній задачі для підрахунку часу проводились із початковими умовами,
заданими у вузлах просторової сітки, розбитої на 60 × 60 × 8 частин. Обчислення проводились для підрозбиттів
вихідної сітки із кроком подрібнення 15 × 15 × 2 частин, починаючи з вихідної сітки. У таблиці наведено
значення розміру задачі N (кількість вузлів розбиття розрахункової сітки), часу виконання паралельної Tc та
послідовної Ts програм, а також мультипроцесорне прискорення Acc  Ts Tc . На рисунку показано графік
залежності мультипроцесорного прискорення від розміру задачі.
У подальшому планується виконати розпаралелення й інших частин послідовної програми, зокрема,
підпрограм інтерполяції даних та розрахунку прогностичних даних, що позначені у послідовній схемі
номерами 1 та 3 відповідно (див. розділ 2).</p>
      <p>Таблиця. Час виконання послідовної та паралельної підпрограм (CalkQ) обчислення значень
правих частин рівнянь, та мультипроцесорне прискорення Acc
N
Ts, с
Tc, с</p>
      <p>Розроблено алгеброалгоритмічні специфікації послідовного та паралельного алгоритмів
метеорологічного прогнозування із застосуванням створеного інтегрованого інструментарію проектування та синтезу
програм. Алгоритми подано в природно-лінгвістичній формі (мові САА/1), особливостями якої є незалежність
від мови програмування і можливість автоматизованого перекладу в довільну мову для забезпечення
відповідності алгоритмів та асоційованих з ними програм. Розроблено послідовну та паралельну програмні
реалізації для вирішення задачі прогнозування погоди для території України. Проведено експеримент з виконання
паралельної програми на відеографічному прискорювачі, що показав значне підвищення продуктивності
обчислень порівняно із послідовною програмою.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          5.
          <string-name>
            <surname>Harris M. GPGPU</surname>
          </string-name>
          :
          <article-title>General-Purpose Computation on GPUs</article-title>
          . - In
          <string-name>
            <surname>SIG-GRAPH 2005 GPGPU</surname>
            <given-names>COURSE</given-names>
          </string-name>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          8.
          <string-name>
            <surname>Боресков</surname>
            <given-names>А.В.</given-names>
          </string-name>
          ,
          <source>Харламов А.А. Основы работы с технологией CUDA</source>
          .
          <article-title>- ДМК-</article-title>
          <string-name>
            <surname>Пресс</surname>
          </string-name>
          ,
          <year>2010</year>
          . -
          <fpage>232</fpage>
          c.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          12. http://www.dwd.de
          <article-title>(веб-сайт метеорологічного центру у м</article-title>
          . Офенбах)
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>