<!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>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>О.C. Новак</string-name>
        </contrib>
      </contrib-group>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>Автотюнінг для складних і нетривіальних програмних систем зазвичай вимагає багато часу внаслідок емпіричного оцінювання великої множини варіантів значень параметрів вхідної паралельної програми у цільовому середовищі виконання. У даній роботі запропоноване вдосконалення методу автотюнінгу на основі використання статистичного моделювання та нейромережевих алгоритмів, що дозволяє суттєво звузити простір можливих значень параметрів, що аналізуються. Застосування підходу продемонстроване на прикладі автотюнінгу паралельної програми сортування, яка комбінує декілька методів сортування, на основі автоматичного навчання нейромережевої моделі на результатах “традиційних” циклів тюнінгу з подальшою заміною частини запусків автотюнера оцінкою зі статистичної моделі. Ключові слова: автотюнінг, автоматизація розробки програмного забезпечення, машинне навчання, нейромережа, паралельні обчислення, статистичне моделювання. Автотюнинг для сложных и нетривиальных программных систем обычно требует много времени вследствие эмпирического оценивания большого множества вариантов значений параметров входной параллельной программы в целевой среде выполнения. В данной работе предложено усовершенствование метода автотюнинга на основе использования статистического моделирования и нейросетевых алгоритмов, что позволяет существенно сузить пространство возможных значений параметров, которые анализируются. Применение подхода продемонстрировано на примере автотюнинга параллельной программы сортировки, комбинирующей несколько методов сортировки, на основе автоматического обучения нейросетевой модели на результатах “традиционных” циклов тюнинга с дальнейшей заменой части запусков автотюнера на оценку из статистической модели. Ключевые слова: автотюнинг, автоматизация разработки программного обеспечения, машинное обучение, нейросеть, параллельные вычисления, статистическое моделирование. Auto-tuning for complex and nontrivial parallel systems is usually time-consuming because of empirical evaluation of huge amount of combinations of parameter values of an initial parallel program in a target execution environment. This paper proposes the improvement of the auto-tuning method using statistical modeling and neural network algorithms that allow to reduce significantly the space of possible combinations of parameters values to analyse. The resulting optimization is illustrated by an example of tuning of parallel sorting program, that combines several sorting methods, by means of automatic training of a neural network model on results of “traditional” tuning cycles with subsequent replacement of some auto-tuner calls with an evaluation from the statistical model.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        мови програмування. Система TuningGenie є подібною до Atune-IL [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] – мовного розширення для автотюнінгу,
яке використовує прагми і не прив’язане до конкретної мови програмування. Основна відмінність TuningGenie
полягає у використанні переписувальних правил для трансформації вихідного коду. Подання програмного коду
у вигляді терму дозволяє модифікувати структуру програми у декларативному стилі. Ця особливість значно
розширює можливості системи автотюнінгу.
      </p>
      <p>
        Основним недоліком автотюнінгу є значні накладні витрати на процес оптимізації: якщо кількість
програмних варіантів є достатньо великою, процес оптимізації може тривати багато годин і навіть днів. У даній
статті запропоноване вдосконалення гібридного підходу до автотюнінгу [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], який використовує статистичне
моделювання, за рахунок застосування методів машинного навчання для зменшення часу, необхідного для
пошуку оптимального варіанту програми. Підхід полягає в автоматичному навчанні моделі на результатах
звичайних циклів тюнінгу й подальшій підміні частини запусків програми оцінкою зі статистичної моделі.
В роботах [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ] було розроблено програмну систему TuningGenie, призначену для автоматизованої
генерації автотюнерів з вихідного коду. Ідея автотюнера полягає в емпіричному оцінюванні декількох версій
вхідної програми та вибору найкращого, при цьому критерієм оцінки є менший час виконання вхідної програми
та точність отриманих результатів. Інструментарій працює з вихідним кодом програм, використовуючи
експертні знання розробника. Розробник додає певні метадані (назви та діапазони значень параметрів) до
вихідного коду у вигляді спеціальних коментарів-прагм. Використання прагм дозволяє не виконувати складний
аналіз залежності між даними у вихідному коді застосунку, а також суттєво звужує область пошуку
оптимальної конфігурації.
      </p>
      <p>
        Для трансформацій вихідного коду використовується система TermWare [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], що ґрунтується на техніці
переписувальних правил, яка дозволяє подавати код застосунків у вигляді термів. Поточна версія TermWare
містить компоненти для взаємодії з мовами програмування Java та C#. TuningGenie використовує TermWare для
вилучення експертних знань з вихідного програмного коду і генерації нової версії програми на кожній ітерації
автотюнінгу. База знань використовується як сполучна ланка між фазою, що є передує автотюнінгу, і фазою
автотюнінгу. Маніпулюючи термами, що подані як абстрактні синтаксичні дерева (abstract syntax trees, AST),
TuningGenie виконує структурні зміни в обчисленнях програми, використовуючи декларативний стиль системи
TermWare.
      </p>
      <p>Застосування автотюнінгу для складних програмних систем зазвичай вимагає багато часу внаслідок
емпіричного оцінювання великої множини варіантів значень параметрів вхідної паралельної програми у
цільовому середовищі виконання (позначимо цю множину через C ). У даній роботі пропонується оптимізація
методу автотюнінгу на основі використання статистичного моделювання та машинного навчання. Покращення
полягає у зменшенні кількості запусків автотюнера шляхом побудови апроксимаційної моделі, що дозволяє
“відкинути” найменш вірогідні заміри. Результатом апроксимації моделі зазвичай є скорочення розмірності
вхідних параметрів множини C , що означає значне прискорення процесу автотюнінгу.</p>
      <p>
        У широкому розумінні методи машинного навчання ґрунтуються на понятті отримання певного досвіду з
даних [
        <xref ref-type="bibr" rid="ref12 ref2">2, 12</xref>
        ]. Отриманий досвід може мати різну природу, наприклад, це може бути класифікація, модель
функції та ін. У контексті автотюнінгу досвідом є оптимальні значення параметрів програми. Спочатку метод
машинного навчання оцінює декілька альтернатив в рамках простору пошуку для n різних вхідних програм
P1, ..., Pn , що визначаються конфігураціями C1,...,Cn . Множина оцінених альтернатив називається навчальними
даними (training data). Процес генерації та оцінки навчальних даних і отримання досвіду з цих даних
називається навчанням (training). Після завершення навчання, маючи нову версію програми P , яка підлягає
оцінці, виконання P замінюється на оцінку, отриману з навченої моделі.
      </p>
      <p>
        Машинне навчання тісно пов'язане (і часто перетинається) з обчислювальною статистикою,
дисципліною, яка також фокусується на прогнозуванні шляхом застосування комп'ютерів [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Усі статистичні
алгоритми (у тому числі й алгоритми машинного навчання) потребують значної кількості статистичних даних
для аналізу й побудови моделі. В контексті задач автотюнінгу збір великої кількості статистичних даних може
бути доволі тривалим процесом. Тому досить гостро встає проблема алгоритмів, які дозволять максимально
звузити область пошуку при мінімальній кількості реальних запусків автотюнера. Щоб частково вирішити цю
проблему, в даній роботі запропоновано використовувати нейромережу для екстраполяції даних (див. розділ 2).
В такому випадку необхідна буде відносно невелика кількість реальних запусків для побудови наближеної
моделі, після чого нейромережева модель може бути використана іншими алгоритмами за принципом “чорної
скрині”.
      </p>
      <p>
        Автотюнери, що використовують методи машинного навчання, досліджуються, зокрема, в роботах
[
        <xref ref-type="bibr" rid="ref14 ref15 ref16">14–16</xref>
        ]. Так, в [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] розглядається компілятор з відкритим кодом Milepost GCC, який самоналаштовується і
застосовує машинне навчання для передбачення оптимальних установок флагів компіляції програм при
використанні GCC. У роботі [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] нейромережі використовуються для отримання досвіду про задану
трансформацію програми (параметричне розбиття циклу на блоки) для різних значень вхідного параметра
(розміру блоку); отримана модель далі використовується для пошуку оптимальних значень параметрів. В [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
В основу процесу розробки програм у даній роботі покладено використання модифікованих систем
алгоритмічних алгебр (САА-М), інструментарію проектування й синтезу програм (ІПС) [
        <xref ref-type="bibr" rid="ref4 ref8">4, 8</xref>
        ] та системи
генерації автотюнерів TuningGenie. Інструментарій ІПС ґрунтується на методі діалогового конструювання
синтаксично правильних програм, що орієнтований на виключення можливості появи синтаксичних помилок в
процесі побудови алгоритму. Основна ідея методу полягає в порівневому конструюванні алгоритмів зверху
вниз шляхом суперпозиції мовних конструкцій САА-М. Алгоритми в САА-М можуть бути подані в трьох
формах: аналітичній (регулярні схеми), природньо-лінгвістичній (САА-схеми) та графовій (граф-схеми). На
основі побудованої схеми алгоритму виконується автоматична генерація тексту програми цільовою мовою
програмування (Java або C++). Далі програма подається на вхід системі TuningGenie для подальшого
налаштування та перетворення.
      </p>
      <p>Як приклад алгоритму для автотюнінгу розглянемо гібридний алгоритм сортування
PARALLEL HYBRID SORT, який виконує сортування злиттям чи вставкою в залежності від розміру блоку
вхідного числового масиву з даними. Далі наведено початкову САА-схему цього алгоритму, яка складається з
опису класів ParallelMergeSort та MergeSortTask. Назви методів класів від реалізації методів відділені
за допомогою ланцюжків символів “====”. У методі parallelMergeSort(array) класу
ParallelMergeSort прагма tuneAbleParam задає діапазон значень для кількості паралельних потоків
(змінної parallelism), тобто рівня паралелізму. В методі compute класу MergeSortTask вказано прагми
tuneAbleParam, які задають область пошуку оптимальних значень числових змінних
insertionSortThreshold (розмір блоку, при якому застосовується сортування вставками) та
mergeSortBucketSize (порогове значення розміру блоку для послідовного сортування в межах одного
потоку). За допомогою системи ІПС на основі САА-схеми було виконано генерацію багатопотокової програми
сортування мовою Java.</p>
    </sec>
    <sec id="sec-2">
      <title>CLASS ParallelMergeSort</title>
      <p>"insertionSort(array)"
==== "Declare a variable (n) of type (int)";
(n := "Array length (array)");
FOR (i FROM 1 TO n - 1)</p>
    </sec>
    <sec id="sec-3">
      <title>LOOP</title>
      <p>"Declare a variable (j) of type (int) = (i)";
"Declare a variable (B) of type (int) = (array[i])";
WHILE (j &gt; 0) AND (array[j - 1] &gt; B)</p>
    </sec>
    <sec id="sec-4">
      <title>LOOP</title>
      <p>(array[j] := array[j - 1]);
(j := j - 1);</p>
    </sec>
    <sec id="sec-5">
      <title>END OF LOOP;</title>
      <p>(array[j] := B);</p>
    </sec>
    <sec id="sec-6">
      <title>END OF LOOP;</title>
      <p>"parallelMergeSort(array)"
==== "Comment (tuneAbleParam name=parallelism start=1 stop=8 step=1)";
"Declare a variable (parallelism) of type (int) = (1)";
PARALLEL(i = 0, ..., parallelism - 1)
(</p>
      <p>"MergeSortTask(array)";
);</p>
    </sec>
    <sec id="sec-7">
      <title>WAIT 'All threads completed work';</title>
      <p>"sequentialMergeSort(array)"
==== IF 'Length of array (array) is greater or equal to (2)'</p>
      <p>THEN "Declare an array (left) of type (int)";
"Declare an array (right) of type (int)";
(left := "Copy from array (array) the elements in the range
from (0) to (array.length / 2)");
(right := "Copy from array (array) the elements in the range
from (array.length / 2) to (array.length)");
"sequentialMergeSort(left)";
"sequentialMergeSort(right)";
"merge(left, right, array)";</p>
      <p>END IF;
"merge(left, right, array)"
==== "Declare a variable (i1) of type (int) = (0)";
"Declare a variable (i2) of type (int) = (0)";</p>
    </sec>
    <sec id="sec-8">
      <title>FOR (i FROM 0 TO array.length - 1)</title>
    </sec>
    <sec id="sec-9">
      <title>LOOP</title>
      <p>IF (i2 &gt;= right.length) OR</p>
      <p>((i1 &lt; left.length) AND (left[i1] &lt; right[i2]))
THEN (array[i] := left[i1]);</p>
      <p>"Increase (i1) by (1)";
ELSE (array[i] := right[i2]);</p>
      <p>"Increase (i2) by (1)";</p>
      <p>END IF</p>
    </sec>
    <sec id="sec-10">
      <title>END OF LOOP;</title>
    </sec>
    <sec id="sec-11">
      <title>CLASS MergeSortTask EXTENDS RecursiveAction</title>
      <p>"MergeSortTask(array)"
==== (this.array := array);
"compute"
==== "Comment (tuneAbleParam name=insertionSortThreshold
start=10 stop=200 step=10)";
"Declare a variable (insertionSortThreshold) of
type (int) = (100)";
"Comment (tuneAbleParam name=mergeSortBucketSize
start=10000 stop=100000000 step=10000)";
"Declare a variable (mergeSortBucketSize)</p>
      <p>of type (int) = (50000)";</p>
    </sec>
    <sec id="sec-12">
      <title>IF 'Length of array (array) is less or equal to (insertionSortThreshold)'</title>
    </sec>
    <sec id="sec-13">
      <title>THEN "insertionSort(array)"</title>
    </sec>
    <sec id="sec-14">
      <title>ELSE IF 'Length of array (array) is less or equal to (mergeSortBucketSize)'</title>
    </sec>
    <sec id="sec-15">
      <title>THEN "sequentialMergeSort(array)";</title>
      <p>ELSE
"Declare an array (left) of type (int)";
"Declare an array (right) of type (int)";
(left := "Copy from array (array) the elements in
the range from (0) to (array.length/2)");
(right := "Copy from array (array) the elements in
the range from (array.length/2) to
(array.length)");
|"MergeSortTask(left)"</p>
    </sec>
    <sec id="sec-16">
      <title>PARALLEL "MergeSortTask(right)"|;</title>
      <p>"merge(left, right, array)";
END IF</p>
      <p>END IF;</p>
    </sec>
    <sec id="sec-17">
      <title>END OF CLASS MergeSortTask</title>
    </sec>
    <sec id="sec-18">
      <title>END OF CLASS ParallelMergeSort</title>
    </sec>
    <sec id="sec-19">
      <title>END OF SCHEME PARALLEL HYBRID SORT</title>
      <p>В рамках даного експерименту виконувалось сортування набору з 2 107 випадкових чисел.
Параметрами автотюнера є C  {Tcn ,Ts ,Th} , де Tcn – кількість потоків, що виконують обчислення одночасно;
Ts – порогове значення розміру блоку для послідовного сортування в межах одного потоку (блоки розміром
size  Ts розбиваються на менші блоки і призначаються різним потокам); Th – розмір блоку, при якому
застосовується сортування вставками. Експеримент виконувався в обчислювальному середовищі з такими
параметрами: 4-ядерний процесор Intel Core i7, частота 2.7 ГГц, кеш L3, 8 Мбайт; оперативна пам’ять 16 Гбайт,
частота 2133 МГц; Apple SSD SM0512L, 512 Гбайт; операційна система MacOS 10.12.</p>
      <p>Експеримент складався з двох фаз. В першій фазі автотюнер виконувався без статистичної моделі для
оцінки швидкодії алгоритму. У другій фазі було підключене статистичне моделювання для розуміння того,
наскільки суттєво може бути скорочений простір пошуку при збереженні продуктивності алгоритму, близької
до оптимальної.</p>
      <p>Результати першої фази наведено у таблиці. Зазначено три конфігурації:
 повільна – конфігурація “за замовчуванням”, яка працює майже як класичне сортування злиттям;
 оптимальна – найшвидша, що була автоматично обрана автотюнером;
 інтуїтивна – значення заповнюються інтуїтивно з урахуванням специфікацій апаратного забезпечення
та деталей алгоритмів.</p>
      <p>Оптимальна конфігурація в 4.93 рази швидша за повільну. Цей результат є досить гарним для 4-ядерного
процесора і досягнутий передусім завдяки комбінації двох факторів: оптимального використання кешів
процесора (за рахунок переходу до сортування без додаткової пам’яті при малих наборах даних) та ефективної
схеми розпаралелювання (сортування злиттям легко розпаралелюється за методом “розділяй та володарюй”).
Інтуїтивна конфігурація в 3.1 рази швидша за повільну, що також є непоганим результатом, але цей варіант є
легким для передбачення завдяки відносній простоті тестованого алгоритму. Зазвичай оптимальні конфігурації
не є очевидними для реальних паралельних застосувань. Оптимальна конфігурація все ж таки є значно
швидшою – на 58 %, і, таким чином, застосування автотюнінгу було доцільним.</p>
      <p>Таблиця. Результати першої фази автотюнінгу
Конфігурація
Рівень паралелізму Tcn</p>
      <p>(кількість потоків)
Порогове значення для
сортування вставками Th
Порогове значення для
послідовного сортування Ts
Розмір тестових даних
Середній час сортування
Повільна
1
0
(не переходити до сортування
вставками зовсім)</p>
      <p>100 000 000
(це значення є більшим за розмір
тестових даних, тому
декомпозиція даних не
застосовується)
Оптимальна</p>
      <p>
        Інтуїтивна
8
120
4
30
використовується. Це можна пояснити високою ефективністю механізму RecursiveAction мови Java [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ],
використаного у програмній реалізації.
      </p>
      <p>
        Первинний аналіз даних виконувався за допомогою мови Python із використанням бібліотеки
Scikit-learn [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. Подальший аналіз виконувався за допомогою мови R, призначеної для програмування
статистичних обчислень, аналізу та подання даних у графічному вигляді [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. Експеримент складався з
декількох стандартних етапів: підготовка та завантаження записів роботи автотюнера, підготовка даних (в тому
числі нормалізація), побудова нейромережевої моделі на навчальній виборці даних та перевірка моделі на
контрольній виборці даних.
      </p>
      <p>
        Процес аналізу даних показано на рис. 1. Спочатку автотюнер проводить N експериментів та зберігає
дані для нейромережі в окремий файл. Ці дані використовуються нейромережею для навчання. Після навчання
нейромережа екстраполює дані, генеруючи новий набір даних (в окремий файл). В кінці обидва набора даних
аналізуються й порівнюються вже людиною. Як нейромережу обрано багатошаровий перцептрон з трьома
вхідними нейронами, трьома прихованими шарами (по 20-10-5 нейронів відповідно) та одним вихідним. Як
активатор у нейронів використовувалась випрямлена лінійна функція ( f ( x) = max(0, x) ). Як метод навчання
використовувався метод зворотного поширення помилки та алгоритм Бройдена – Флетчера – Гольдфарба –
Шанно [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] для оптимізації вагових коефіцієнтів.
      </p>
      <p>На основі результатів 3300 запусків побудовано нейромережу, яку використано для подальшої генерації
даних. В контексті даного експерименту використання нейромережі для початкового наближення дозволило
звузити область пошуку на 58 % (з 106 до 4.2 105 ). Для перевірки якості отриманих результатів було зроблено
більше 30 тисяч реальних запусків автотюнера (рівномірно розподілених по всій множині варіантів).
Алгоритм
Автотюнер
Нейронна</p>
      <p>мережа
Обробка даних
Обробка даних</p>
      <p>Actor
Рис. 1. Процес аналізу
На рис. 2 показано залежність середньої точності Acc отриманої моделі для 10 нейромереж від частки
даних, яку було використано для навчання. Оцінка точності Acc ґрунтується на використанні матриці</p>
      <p>
        TP  TN
похибок [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] та обчислюється за формулою Acc  , де TP – кількість позитивних результатів; TN –
      </p>
      <p>P  N
кількість негативних результатів; P – дзеркальна кількість позитивних значень; N – загальна кількість
негативних значень.
З отриманих результатів можна зробити висновок, що при вирішенні задачі про звуження області
пошуку для автотюнера системі для отримання досить точних результатів потрібна відносно невелика кількість
замірів.
Висновки</p>
      <p>Запропоноване вдосконалення методу автотюнінгу паралельних програм на основі використання
статистичного моделювання та машинного навчання. Метод дозволяє значною мірою позбутися головної
слабкості автотюнінгу, а саме, суттєво скоротити загальний час пошуку оптимального варіанту програми за
рахунок автоматичного навчання нейромережевої моделі на результатах традиційних циклів тюнінгу з
подальшою заміною частини запусків автотюнера оцінкою зі статистичної моделі. Застосування методу
продемонстроване на задачі оптимізації гібридного паралельного алгоритму сортування чисел за допомогою
розробленої інструментальної системи генерації автотюнерів TuningGenie. Результати експерименту
підтвердили ефективність запропонованого методу й доцільність його подальшого розвитку та використання
для оптимізації більш складних паралельних програм та програм з інших предметних областей.
Література
Іваненко Павло Андрійович,
молодший науковий співробітник Інституту програмних систем НАН України.
Кількість наукових публікацій в українських виданнях – 19.
Кількість наукових публікацій в зарубіжних виданнях – 4.
http://orcid.org/0000-0001-5437-9763,
Інститут програмних систем Національної академії наук України.
03187, м. Київ-187, проспект Академіка Глушкова, 40, корпус 5.
Тел.: +380 (44) 526 3559.
Факс +380 (44) 526 6263.</p>
      <p>E-mail: doroshenkoanatoliy2@gmail.com,
paiv@ukr.net,
novak.as@i.ua,
oayat@ukr.net</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Naono</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Teranishi</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cavazos</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Suda</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2010</year>
          )
          <article-title>Software automatic tuning: from concepts to state-of-the-art results</article-title>
          . Berlin: Springer.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Durillo</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Fahringer</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          (
          <year>2014</year>
          )
          <article-title>From single- to multi-objective auto-tuning of programs: advantages and implications</article-title>
          .
          <source>Scientific programming</source>
          .
          <volume>22</volume>
          (
          <issue>4</issue>
          ). P.
          <volume>285</volume>
          -
          <fpage>297</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Doroshenko</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Shevchenko</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2006</year>
          )
          <article-title>A rewriting framework for rule-based programming dynamic applications</article-title>
          .
          <source>Fundamenta informaticae</source>
          .
          <volume>72</volume>
          (
          <issue>1</issue>
          -
          <fpage>3</fpage>
          ). P.
          <volume>95</volume>
          -
          <fpage>108</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Yatsenko</surname>
            ,
            <given-names>O.A.</given-names>
          </string-name>
          (
          <year>2013</year>
          )
          <article-title>Integration of tools of algebra of algorithms and term rewriting system for developing efficient parallel programs</article-title>
          .
          <source>Problems in programming. (2)</source>
          . P.
          <volume>62</volume>
          -
          <fpage>70</fpage>
          . (in Russian)
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Ivanenko</surname>
            ,
            <given-names>P.A.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Doroshenko</surname>
            ,
            <given-names>A.Yu.</given-names>
          </string-name>
          (
          <year>2014</year>
          )
          <article-title>Method of automated generation of autotuners for parallel programs</article-title>
          .
          <source>Cybernetics and systems analysis. 50</source>
          (
          <issue>3</issue>
          ). P.
          <volume>465</volume>
          -
          <fpage>475</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ivanenko</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Doroshenko</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Zhereb</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2014</year>
          )
          <article-title>TuningGenie: auto-tuning framework based on rewriting rules</article-title>
          .
          <source>In Proc. 10th International Conference “ICT in Education, Research, and Industrial Applications” (ICTERI</source>
          <year>2014</year>
          ),
          <source>Revised Selected Papers. Kherson, Ukraine</source>
          ,
          <fpage>9</fpage>
          -
          <lpage>12</lpage>
          June 2014. Berlin: Springer. 469. P.
          <volume>139</volume>
          -
          <fpage>158</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Doroshenko</surname>
          </string-name>
          , А.Yu.,
          <string-name>
            <surname>Ivanenko</surname>
            ,
            <given-names>P.A.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Novak</surname>
            ,
            <given-names>O.S.</given-names>
          </string-name>
          (
          <year>2016</year>
          )
          <article-title>Hybrid autotuning model with statistic modelling. Problems in programming. (4)</article-title>
          . P.
          <volume>27</volume>
          -
          <fpage>32</fpage>
          . (in Ukrainian)
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Andon</surname>
            ,
            <given-names>P.I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Doroshenko</surname>
            ,
            <given-names>A.Yu.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhereb</surname>
            ,
            <given-names>K.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shevchenko</surname>
            ,
            <given-names>R.S.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Yatsenko</surname>
            ,
            <given-names>O.A.</given-names>
          </string-name>
          (
          <year>2017</year>
          )
          <article-title>Methods of algebraic programming: formal methods of parallel program development</article-title>
          .
          <source>Кyiv: Naukova dumka. (in Ukrainian)</source>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Whaley</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Petitet</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Dongarra</surname>
            ,
            <given-names>J.J.</given-names>
          </string-name>
          (
          <year>2001</year>
          )
          <article-title>Automated empirical optimizations of software and the ATLAS Project. Parallel computing</article-title>
          .
          <volume>27</volume>
          (
          <issue>1</issue>
          -
          <fpage>2</fpage>
          ). P. 3-
          <fpage>35</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Frigo</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Johnson</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          (
          <year>1998</year>
          )
          <article-title>FFTW: an adaptive software architecture for the FF</article-title>
          .
          <source>Acoustics, speech and signal processing. 3</source>
          . pp.
          <fpage>1381</fpage>
          -
          <lpage>1384</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Schaefer</surname>
            ,
            <given-names>C.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pankratius</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Tichy</surname>
            ,
            <given-names>W.F.</given-names>
          </string-name>
          (
          <year>2009</year>
          )
          <article-title>Atune-IL: an instrumentation language for auto-tuning parallel applications</article-title>
          .
          <source>In Proc. 15th International Euro-Par Conference (Euro-Par</source>
          <year>2009</year>
          ). Delft, The Netherlands,
          <fpage>25</fpage>
          -
          <lpage>28</lpage>
          August
          <year>2009</year>
          . LNCS. 5704. P. 9-
          <fpage>20</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. Mitchell,
          <string-name>
            <surname>T.M.</surname>
          </string-name>
          (
          <year>1997</year>
          )
          <article-title>Machine learning</article-title>
          .
          <source>1st edn</source>
          . New York:
          <string-name>
            <surname>McGraw-Hill Education</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Givens</surname>
            ,
            <given-names>G.H.</given-names>
          </string-name>
          &amp;‎
          <string-name>
            <surname>Hoeting</surname>
            ,
            <given-names>J.A.</given-names>
          </string-name>
          (
          <year>2012</year>
          )
          <article-title>Computational statistics</article-title>
          . 2nd edn. Chichester: Wiley.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Fursin</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kashnikov</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Memon</surname>
            ,
            <given-names>A.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chamski</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          et al. (
          <year>2011</year>
          )
          <article-title>Milepost GCC: machine learning enabled self-tuning compiler</article-title>
          .
          <source>International journal of parallel programming</source>
          .
          <volume>39</volume>
          (
          <issue>3</issue>
          ). P.
          <volume>296</volume>
          -
          <fpage>327</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Rahman</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pouchet</surname>
            ,
            <given-names>L.-N.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Sadayappan</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          (
          <year>2010</year>
          )
          <article-title>Neural network assisted tile size selection</article-title>
          .
          <source>In Proc. 5th International Workshop on Automatic Performance Tuning (IWAPT</source>
          '
          <year>2010</year>
          ). USA, Berkeley, CA,
          <fpage>22</fpage>
          <lpage>June</lpage>
          2010. Berkeley, CA: Springer.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Kofler</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grasso</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cosenza</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Fahringer</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          (
          <year>2013</year>
          )
          <article-title>An automatic input-sensitive approach for heterogeneous task partitioning</article-title>
          .
          <source>In Proc. 27th ACM International Conference on Supercomputing (ICS'13)</source>
          . USA, Eugene, Oregon,
          <fpage>10</fpage>
          -
          <lpage>14</lpage>
          June 2013. New York: ACM. P.
          <volume>149</volume>
          -
          <fpage>160</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. ORACLE HELP CENTER.
          <article-title>(2018) Class RecursiveAction (Java SE 9 &amp; JDK 9) [Online]</article-title>
          . Available from: https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/RecursiveAction.html [
          <source>Accessed: 24 January</source>
          <year>2018</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Pedregosa</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Varoquaux</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gramfort</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Michel</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          et al. (
          <year>2011</year>
          )
          <article-title>Scikit-learn: machine learning in Python</article-title>
          .
          <source>Journal of machine learning research</source>
          . 12. P.
          <volume>2825</volume>
          -
          <fpage>2830</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Crawley</surname>
            ,
            <given-names>M.J.</given-names>
          </string-name>
          (
          <year>2012</year>
          )
          <article-title>The R book</article-title>
          .
          <source>2nd edn</source>
          . Chichester: Wiley.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Fletcher</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2000</year>
          )
          <article-title>Practical methods of optimization. 2nd edn</article-title>
          . Chichester: Wiley.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Fawcett</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          (
          <year>2006</year>
          )
          <article-title>An introduction to ROC analysis</article-title>
          .
          <source>Pattern recognition letters</source>
          .
          <volume>27</volume>
          (
          <issue>8</issue>
          ). P.
          <volume>861</volume>
          -
          <fpage>874</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>