Algorithm for automatic loop parallelization for graphics processing units
This work contains description of high-performance batched affine matrices multiplication approach in scope of An-droid NDK and JNI. Approach is based on combination of separate technics and practices. Android Native Development Kit and Java Native Interfaces were used to develop and run high-perfor...
Збережено в:
Дата: | 2018 |
---|---|
Автори: | , |
Формат: | Стаття |
Мова: | Ukrainian |
Опубліковано: |
Інститут програмних систем НАН України
2018
|
Теми: | |
Онлайн доступ: | https://pp.isofts.kiev.ua/index.php/ojs1/article/view/236 |
Теги: |
Додати тег
Немає тегів, Будьте першим, хто поставить тег для цього запису!
|
Назва журналу: | Problems in programming |
Завантажити файл: |
Репозитарії
Problems in programmingid |
pp_isofts_kiev_ua-article-236 |
---|---|
record_format |
ojs |
resource_txt_mv |
ppisoftskievua/f2/eeab921a2e44db73adf51a95e25535f2.pdf |
spelling |
pp_isofts_kiev_ua-article-2362024-04-28T11:34:16Z Algorithm for automatic loop parallelization for graphics processing units Высокопроизводительное пакетное произведение матриц аффинных преобразований посредством Android NDK и JNI Високопродуктивний пакетний добуток матриць афінних перетворень за допомогою Android NDK та JNI Doroshenko, A.Yu. Achour, I.Z. Android NDK; Android SDK; JDK; JVM; JNI; OpenGL ES; Java; affine transformations UDC 681.3 Android NDK; Android SDK; JDK; JVM; JNI; OpenGL ES; Java; аффинные преобразования УДК 681.3 Android NDK; Android SDK; JDK; JVM; JNI; OpenGL ES; Java; афінні перетворення УДК 681.3 This work contains description of high-performance batched affine matrices multiplication approach in scope of An-droid NDK and JNI. Approach is based on combination of separate technics and practices. Android Native Development Kit and Java Native Interfaces were used to develop and run high-performance code via Java Virtual Machine. This approach overhead was minimized with input data batching for computation. Compile-time optimization approaches were used to speed-up C/C++/Java based solutions. As a development, analysis and research result precise performance benchmarks were made. Output solution was compared with analogues, which are using limited sets of applied techniques, features and approaches. Charts were built on top of that results. Appropriate decisions were made.Problems in programming 2018; 1: 36-45 Работа содержит описание подхода для осуществления высокопроизводительного пакетного произведения матриц аффинных преобразований посредством Android NDK и JNI. Подход основан на комбинации ряда техник и практик. Используется нативный пакет разработки Android NDK для выполнения высокопроизводительного кода под управлением JVM посредством вызовов функций JNI, оптимизация накладных затрат вызова этих функций путем пакетирования входных данных для вычислений, оптимизация решения в части C/C++/Java с использованием compile-time оптимизаторов. В результате проведенной разработки и исследования выходного решения были выполнены точные бенчмарки производительности, было произведено сравнение с аналогичными решениями с частичным использованием предложенного стека техник и особенностей, построены соответствующие графики зависимостей, сделаны выводы.Problems in programming 2018; 1: 36-45 Робота містить опис високопродуктивного підходу для здійснення пакетного добутку матриць афінних перетворень за допомогою Android NDK та JNI. Розібрані основні використані техніки та особливості, проведена оцінка продуктивності підходу у порівнянні з його альтернативами і попередниками.Problems in programming 2018; 1: 36-45 Інститут програмних систем НАН України 2018-10-09 Article Article application/pdf https://pp.isofts.kiev.ua/index.php/ojs1/article/view/236 10.15407/pp2018.01.036 PROBLEMS IN PROGRAMMING; No 1 (2018); 36-45 ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ; No 1 (2018); 36-45 ПРОБЛЕМИ ПРОГРАМУВАННЯ; No 1 (2018); 36-45 1727-4907 10.15407/pp2018.01 uk https://pp.isofts.kiev.ua/index.php/ojs1/article/view/236/232 Copyright (c) 2018 PROBLEMS OF PROGRAMMING |
institution |
Problems in programming |
baseUrl_str |
https://pp.isofts.kiev.ua/index.php/ojs1/oai |
datestamp_date |
2024-04-28T11:34:16Z |
collection |
OJS |
language |
Ukrainian |
topic |
Android NDK Android SDK JDK JVM JNI OpenGL ES Java affine transformations UDC 681.3 |
spellingShingle |
Android NDK Android SDK JDK JVM JNI OpenGL ES Java affine transformations UDC 681.3 Doroshenko, A.Yu. Achour, I.Z. Algorithm for automatic loop parallelization for graphics processing units |
topic_facet |
Android NDK Android SDK JDK JVM JNI OpenGL ES Java affine transformations UDC 681.3 Android NDK Android SDK JDK JVM JNI OpenGL ES Java аффинные преобразования УДК 681.3 Android NDK Android SDK JDK JVM JNI OpenGL ES Java афінні перетворення УДК 681.3 |
format |
Article |
author |
Doroshenko, A.Yu. Achour, I.Z. |
author_facet |
Doroshenko, A.Yu. Achour, I.Z. |
author_sort |
Doroshenko, A.Yu. |
title |
Algorithm for automatic loop parallelization for graphics processing units |
title_short |
Algorithm for automatic loop parallelization for graphics processing units |
title_full |
Algorithm for automatic loop parallelization for graphics processing units |
title_fullStr |
Algorithm for automatic loop parallelization for graphics processing units |
title_full_unstemmed |
Algorithm for automatic loop parallelization for graphics processing units |
title_sort |
algorithm for automatic loop parallelization for graphics processing units |
title_alt |
Высокопроизводительное пакетное произведение матриц аффинных преобразований посредством Android NDK и JNI Високопродуктивний пакетний добуток матриць афінних перетворень за допомогою Android NDK та JNI |
description |
This work contains description of high-performance batched affine matrices multiplication approach in scope of An-droid NDK and JNI. Approach is based on combination of separate technics and practices. Android Native Development Kit and Java Native Interfaces were used to develop and run high-performance code via Java Virtual Machine. This approach overhead was minimized with input data batching for computation. Compile-time optimization approaches were used to speed-up C/C++/Java based solutions. As a development, analysis and research result precise performance benchmarks were made. Output solution was compared with analogues, which are using limited sets of applied techniques, features and approaches. Charts were built on top of that results. Appropriate decisions were made.Problems in programming 2018; 1: 36-45 |
publisher |
Інститут програмних систем НАН України |
publishDate |
2018 |
url |
https://pp.isofts.kiev.ua/index.php/ojs1/article/view/236 |
work_keys_str_mv |
AT doroshenkoayu algorithmforautomaticloopparallelizationforgraphicsprocessingunits AT achouriz algorithmforautomaticloopparallelizationforgraphicsprocessingunits AT doroshenkoayu vysokoproizvoditelʹnoepaketnoeproizvedeniematricaffinnyhpreobrazovanijposredstvomandroidndkijni AT achouriz vysokoproizvoditelʹnoepaketnoeproizvedeniematricaffinnyhpreobrazovanijposredstvomandroidndkijni AT doroshenkoayu visokoproduktivnijpaketnijdobutokmatricʹafínnihperetvorenʹzadopomogoûandroidndktajni AT achouriz visokoproduktivnijpaketnijdobutokmatricʹafínnihperetvorenʹzadopomogoûandroidndktajni |
first_indexed |
2024-09-16T04:07:37Z |
last_indexed |
2024-09-16T04:07:37Z |
_version_ |
1818568193634992128 |
fulltext |
Моделі та засоби паралельних і розподілених програм
© І.З. Ашур, А.Ю. Дорошенко, 2018
36 ISSN 1727-4907. Проблеми програмування. 2018. № 1
УДК 681.3
І.З. Ашур, А.Ю. Дорошенко
ВИСОКОПРОДУКТИВНИЙ ПАКЕТНИЙ ДОБУТОК
МАТРИЦЬ АФІННИХ ПЕРЕТВОРЕНЬ ЗА ДОПОМОГОЮ
ANDROID NDK ТА JNI
Робота містить опис високопродуктивного підходу для здійснення пакетного добутку матриць афін-
них перетворень за допомогою Android NDK та JNI. Розібрані основні використані техніки та особ-
ливості, проведена оцінка продуктивності підходу у порівнянні з його альтернативами і попередни-
ками.
Ключові слова: Android NDK, Android SDK, JDK, JVM, JNI, OpenGL ES, Java, афінні перетворення.
Вступ
Ефективний добуток матриць
афінних перетворень – одна з актуальних
проблем розробки додатків для мобільних
платформ, що використовують високоп-
родуктивну двовимірну комп’ютерну
графіку.
Такі додатки розробляються для іг-
рової індустрії, програмного забезпечення
візуалізації, моделювання в частині ренде-
рингу візуальних моделей, візуальної інте-
рактивної взаємодії.
Одним з аспектів використання ре-
зультатів даних обчислень є добуток мат-
риць виду, моделі і проекції.
Матричне представлення викорис-
товується, зокрема, для запису афінних пе-
ретворень в комп’ютерній графіці.
Мета даної роботи – огляд резуль-
татів, отриманих за прогресом розробки
високопродуктивних рішень для пакетно-
го добутку матриць афінних перетворень
у просторі Android SDK, NDK, JDK, JNI.
1. Аналіз предметної області
Афінні перетворення зазвичай ви-
користовуються у лінійній алгебрі для
представлення лінійних перетворень, а ве-
кторна сума – для представлення парале-
льних перенесень. Використовуючи роз-
ширену матрицю та розширений вектор
стає можливим представлення лінійного
переносу та лінійних перетворень з вико-
ристанням одного добутку матриць. Ця те-
хніка потребує розширення всіх векторів
додатковою «1» в кінці, а всіх матриць –
додатковим рядком нулів знизу та додат-
ковим стовпчиком – вектором переносу –
справа, а також, «1» в правому нижньому
кутку.
Звичайний матрично-векторний
добуток завжди відображає початок коор-
динат на початок координат, а тому ніко-
ли не може представляти лінійного пере-
носу, в якому початок координат має бути
відображеним до якоїсь іншої точки. За-
вдяки додаванню додаткової координати
зі значенням «1» до кожного вектора,
останній представляє відображення прос-
тору як підмножини простору з додатко-
вим виміром. В цьому просторі початко-
вий простір займає підмножину, де додат-
кова координата дорівнює 1. Виходячи з
цього, початок координат початкового
простору знаходиться в (0,0,…,0,1). Таким
чином стає можливим лінійний перенос
початкового простору засобами лінійного
перетворення простору з більшим числом
вимірів. Координати в просторі з більшим
числом вимірів є прикладом однорідних
координат [1, 2].
Завдяки використанню системи од-
норідних координат стає можливим засто-
сування комбінації будь-якої кількості
афінних перетворень одним добутком від-
повідних матриць. Ця властивість широко
використовується в комп’ютерній графіці,
засобах комп’ютерного зору та робототех-
ніці.
Матриця виду описує представлен-
ня афінного перетворення як-то: стиснен-
ня, розтягнення, поворот, паралельний пе-
Моделі та засоби паралельних і розподілених програм
37
ренос, відображення та інші окремі та за-
гальні випадки трансформацій.
Простір виду представляє результат
перетворення світових координат у коор-
динати видимого простору. Видимий про-
стір у даному випадку визначається сукуп-
ністю перетворень здвигів і поворотів сце-
ни. Ці комбіновані перетворення предста-
вляються матрицею виду.
Сучасні системи рендерингу дво-
вимірної графіки також оперують понят-
тям простору відсічення. Простір відсічен-
ня визначає видимі області сцени і, як на-
слідок, вершини [3].
Загальний процес використання пе-
ретворень показаний на рис. 1:
Рис. 1. Послідовність використання матри-
чних перетворень
Деталі застосування даних транс-
формацій та їх математичний зміст не є
предметом обговорення даної статті і при-
ведені з ціллю надання загальної інформа-
ції про предметну область вирішуваної за-
дачі.
Дане дослідження націлене на роз-
робку, створення і аналіз продуктивності
підходу добутку матриць афінних пере-
творень за допомогою Android NDK [4] та
JNI [5].
2. Аналіз та розробка рішень
Відштовхуючись від введених об-
межень предметної області у виді матриць
афінних перетворень, надалі будемо опе-
рувати матрицями розміру 4×4 [6].
Класична, наївна реалізація добутку
матриць передбачає використання станда-
ртних засобів JDK [7] з використанням
трьох вкладених циклів.
int a[][] = {{}, {}, {}};
int b[][] = {{}, {}, {}, {}};
int al = a.length;
int bl = b[0].length;
int [][] result = new int[al][bl];
for (int i = 0; i < al; i++) {
for (int j = 0; j < bl; j++) {
for (int k = 0; k < al; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
Для оцінки продуктивності підходу
та його наївних аналогів були створені
спеціальні програми-бенчмарки з ураху-
ванням всіх «best practices». Існує багато
оптимізації, що можуть бути використані
віртуальною Java-машиною або апаратним
забезпеченням до конкретного компонента
під час його ізольованого тестування. Не-
продумані тести продуктивності можуть
давати оптимістичні результати, що зовсім
відрізняються від реальних. Наприклад,
навіть порядок виконання тестів та кіль-
кість ітерацій тестування можуть створю-
вати велику похибку в користь певного з
підходів, шо тестуються.
Саме тестування конкретного ком-
понента в складі робочого, практичного
додатку з використанням таких технік, як
JVM warm up (підігрів віртуальної Java-
машини) [8] може дати достовірні резуль-
тати.
Далі будуть приведені результати
тестів продуктивності для ітерацій розроб-
Моделі та засоби паралельних і розподілених програм
38
леного підходу та його наївних альтерна-
тив з різним стеком використаних технік
та особливостей, їх порівняння. Під мет-
рикою продуктивності мається на увазі
час, затрачений процесором на виконання
певної кількості матричних добутків.
Результати тестування затрат про-
цесорного часу на добуток 1 мільйона мат-
риць 4×4 у виді одновимірного масиву на
16 елементів типу з рухомою комою за ви-
користанням класичної, наївної реалізації
засобами JDK на пристрої Google Pixel XL
[9] в 10 ітерацій представлені в табл. 1. та
рис 2.
Табл. 1. Результати тестування продуктив-
ності наївного підходу
Ітерація,
№
Затрати процесорного
часу, мс
1 3121
2 3141
3 3132
4 3155
5 3137
6 3127
7 3133
8 3115
9 3111
10 3116
Усереднений
результат
3129
Результати тестів для різної кілько-
сті матриць, різної кількості ітерацій, різ-
них пристроїв та різної розмірності мат-
риць опускаються за причини практично
прямої залежності між приведеними мет-
риками та продуктивністю обчислень за
умови відсутності вузьких місць конкрет-
ної платформи для тестування.
Представлені результати отримані
на пристрої з процесором Qualcomm
MSM8996 Snapdragon 821 Quad-core
(2x2.15 GHz Kryo & 2x1.6 GHz Kryo) [10].
Слід зазначити, що тести продукти-
вності проводились на збірках додатку з
використанням агресивної оптимізації та
обфускації сирців за використанням ін-
струменту ProGuard [11] з сімома прохо-
дами оптимізації, що, зокрема, застосову-
ють арифметичні оптимізації, фіналізацію
класів, їх членів, вертикальне та горизон-
тальне склеювання класів, приватизацію
полів, методів, витягнення статичних ме-
тодів, оптимізацію кількості параметрів
методів, вбудовування константних вира-
зів, коротких та унікальних методів, набір
методів «peephole optimization» [12] для
арифметичних операцій, гілок коду, стро-
кових даних, приведення типів, чистку
надлишкових інструкцій, виключень, бло-
ків коду.
Тема оптимізації продуктивності
Java-коду на етапі компіляції достатньо
вивчена на даний момент та глибоко розі-
брана, документована авторитетними та
відомими розробниками та не потребує
більш детального розгляду. Дані оптиміза-
ції застосовувалися для отримання «бойо-
вих» результатів тестування продуктивно-
сті. Маємо наступний типовий вивід про-
цесу оптимізації:
Removing unused program classes and class
elements...
Original number of program classes: 8493
Final number of program classes: 1522
Optimizing...
# of finalized classes: 1790
# of unboxed enum classes: 23
# of privatized methods: 2100
# of staticized methods: 747
# of finalized methods: 10693
# of removed method parameters: 713
# of inlined constant parameters: 277
# of inlined constant return values: 103
# of inlined short method calls: 3242
# of inlined unique method calls: 4711
# of inlined tail recursion calls: 43
# of merged code blocks: 155
# of variable peephole optimizations: 15645
# of field peephole optimizations: 166
# of branch peephole optimizations: 5619
Моделі та засоби паралельних і розподілених програм
39
Рис. 2. Графік залежності затрат процесорного часу від ітерації тестування для наївного
підходу
# of string peephole optimizations: 2011
# of simplified instructions: 1521
# of removed instructions: 9233
# of removed local variables: 599
# of removed exception blocks: 264
# of optimized local variable frames: 5395
Shrinking...
В складі Android SDK [13] присут-
ній набір класів-застосувань для роботи з
матрицями. Їх реалізація, подібно й надалі
запропонованому підходу, також імпле-
ментована на рівні NDK. В цілому, вона
повністю дублює зазначений вище підхід
за виключенням наявності цілого ряду
додаткового захисту і перевірок, інструк-
цій для очистки пам’яті.
Java Native Interface (JNI) є стандар-
тним механізмом запуску С/С++ коду під
керуванням віртуальної машини Java
(JVM) [14].
Android NDK (Android Native
Development Kit) – набір інструментів для
розробки компонентів Android, базований
на C/C++.
Як приклад буде приведений
фрагмент зазначеної реалізації з ядра
Android:
/base/core/jni/android/opengl/util.cpp за ста-
ном на версію Oreo 8.0.0_r4 [15]:
#define I(_i, _j) ((_j)+ 4*(_i))
static
void multiplyMM(float* r,
const float* lhs,
const float* rhs) {
for (int i=0 ; i<4 ; i++) {
const float rhs_i0 = rhs[ I(i,0) ];
float ri0 = lhs[ I(0,0) ] * rhs_i0;
float ri1 = lhs[ I(0,1) ] * rhs_i0;
float ri2 = lhs[ I(0,2) ] * rhs_i0;
float ri3 = lhs[ I(0,3) ] * rhs_i0;
for (int j=1 ; j<4 ; j++) {
const float rhs_ij = rhs[ I(i,j) ];
ri0 += lhs[ I(j,0) ] * rhs_ij;
ri1 += lhs[ I(j,1) ] * rhs_ij;
ri2 += lhs[ I(j,2) ] * rhs_ij;
ri3 += lhs[ I(j,3) ] * rhs_ij;
}
Моделі та засоби паралельних і розподілених програм
40
r[ I(i,0) ] = ri0;
r[ I(i,1) ] = ri1;
r[ I(i,2) ] = ri2;
r[ I(i,3) ] = ri3;
}
}
Результати тестів продуктивності
вбудованого рішення по визначеному ал-
горитму тестування на ідентичному наборі
вихідних даних та за ідентичного апарат-
ного та програмного середовища (табл. 2,
рис. 3):
Таблиця 2. Результати тестування продук-
тивності нативного вбудованого підходу
Ітерація, №
Затрати процесорного
часу, мс
1 6075
2 5997
3 5987
4 6008
5 6037
6 6023
7 6005
8 5994
9 5973
10 6053
Усереднений
результат
6015
Виходячи з приведених результатів
можливо зробити висновок, що в даному
випадку нативна реалізація даної задачі,
що поставляється в пакеті Android, демон-
струє результати в середньому у 1,9 рази
повільніші ніж наївна реалізація того ж ал-
горитму в просторі JDK.
Можливо виділити дві основні при-
чини такої низької продуктивності даної
реалізації. Перша – наявність накладних
витрат виклику нативних функцій за вико-
ристанням JNI, так званий «overhead» [16].
Друга – наявність цілого ряду додаткових
перевірок вхідних даних та надлишкового
копіювання даних у тимчасові буфери для
проведення обчислень.
Виходячи з проведених тестів, на-
цілених на оцінку витрат виклику JNI за
використанням Google Caliper можна зро-
бити висновок, що на цільовому апаратно-
програмному забезпеченні виклик JNI фу-
нкцій може займати в перспективі час ек-
вівалентний 5-30 Java операціям над при-
мітивними типами (табл. 3) [17, 18]:
Scenario JniCall}
10.26 ns; σ=0.02 ns @ 10 trials
Scenario{AddIntOperation}
0.48 ns; σ=0.02 ns @ 10 trials
Scenario{AddLongOperation}
0.87 ns; σ=0.02 ns @ 10 trials
Таблиця 3. Результати тестування наклад-
них витрат виклику нативних функцій та
Java-операцій над примітивними типами
Тест
Витрати проце-
сорного часу, нс
JniCall 10.265
AddIntOperation 0.481
AddLongOperation 0.873
Таким чином, можливо запропону-
вати вирішення даної задачі прибираючи
максимальну кількість надлишкових пе-
ревірок і вбудованих методів захисту і пе-
ревірки нативної імплементації, що допу-
стимо на такому низькому рівні виконан-
ня, оскільки предметна область даного
рішення передбачає використання у скла-
ді бойових, відлагоджених і стабільних
систем, де в принципі не допустима пере-
дача не дійсних вхідних параметрів для
обчислень, оскільки відповідальність за
такі перевірки та препроцесінг у таких си-
стемах несуть верхні рівні, абстракції та
реалізації системи.
Також можливо оптимізувати пред-
ставлений наївний алгоритм добутку мат-
риць введенням константних індексів, аг-
ресивних рівнів оптимізації компілятора
нативного рішення.
Моделі та засоби паралельних і розподілених програм
41
Окрім цього, в контексті цих самих
систем у більшості випадків існує потреба
саме пакетної обробки даних. Маючи мо-
жливість отримувати результат добутку
десятків, сотень матриць одночасно мож-
ливо, відповідно, багатократно скоротити
накладні затрати на виклик високопроду-
ктивних JNI функцій. Цей підхід, безпе-
речно, потребує важкої та високопродук-
тивної імплементації на рівні клієнтсько-
го коду JVM, проте цілком заслуговує йо-
го.
Для імплементації запропонованого
рішення використовується відносно нова
підтримка роботи з NDK в складі середи
розробки Android Studio. За допомогою
цього інструментарію буде згенеровано
скрипт ndk-build для генерації бінарних
файлів, визначення правил компіляції.
Файл Application.mk [19]:
APP_ABI := all
APP_PLATFORM := android-16
APP_CPPFLAGS += -std=c++11
У даному файлі конфігурації було
визначено:
підтримку генерації машинного ко-
ду для всіх підтримуваних процесорних
архітектур, а саме: Hardware FPU
instructions on ARMv7 based devices,
ARMv8 AArch64, IA-32, Intel64, MIPS32,
MIPS64 (r6), мінімальну підтримувану ве-
рсію Android-платформи, підтримку стан-
дарту C++11.
Header-файл:
/*
* Method: mul
* Signature: (LBuffer;I[F[F)V
*/
JNIEXPORT void JNICALL
Java_com_util_math_MathUtils_mul_
_Ljava_nio_Buffer_2I_3F_3F (JNIEnv *,
jclass, jobject, jint, jfloatArray, jfloatArray);
/*
Рис. 3. Графік залежності затрат процесорного часу від ітерації тестування для нативного
вбудованого підходу
Моделі та засоби паралельних і розподілених програм
42
* Method: mul
* Signature: ([FI[F[F)V
*/
JNIEXPORT void JNICALL
Java_com_util_math_MathUtils_mul_
__3FI_3F_3F (JNIEnv *, jclass, jfloatArray,
jint, jfloatArray, jfloatArray);
Запропонований підхід має можли-
вість записувати результат добутку не
тільки у масив, а й у сімейство класів
FloatBuffer [20], що спеціально призначені
для впорядкованої організації масивів
примітивів у пам’яті для подальшого ви-
сокопродуктивного доступу інших ком-
понентів та модулів рендерингу до даних
в буферах. В результаті імплементації за-
пропонованих рішень вдалося отримати
наступні показники продуктивності для
пакетної обробки матриць пакетами по 16
[21] у перерахунку на мільйон матриць
(табл. 4, рис. 4):
Таблиця 4. Результати тестування проду-
ктивності пропонованого пакетного під-
ходу
Ітерація, №
Затрати процесорного
часу, мс
1 1056
2 1050
3 1059
4 1053
5 1050
6 1059
7 1065
8 1101
9 1143
10 1086
Усереднений
результат
1072
Рис. 4. Графік залежності затрат процесорного часу від ітерації тестування для
пропонованого пакетного підходу
Моделі та засоби паралельних і розподілених програм
43
Висновки
Таким чином, запропоноване рі-
шення демонструє результати в серед-
ньому у 5,6 разів продуктивніші у порів-
нянні з нативним рішенням із складу
SDK та в середньому у 2,9 разів продук-
тивніші у порівнянні з наївним Java-
рішенням.
Таких показників, у першу чергу,
вдалося досягнути за рахунок максима-
льного скорочення накладних витрат на
багатократний виклик та взаємодію з на-
тивними функціями. Порівняльна візуа-
лізація використаних підходів показана
на рис. 5.
В перспективі пропонується вдо-
сконалити запропоноване рішення за
допомогою інтеграції більшої кількості
особливостей систем предметної області,
що потребують високопродуктивних
обчислень на цільовій платформі, у
простір NDK з попередньо вказаними
спробами скоротити накладні витрати
процесорного часу та провадженням па-
кетних обробок.
Рис. 5. Графік залежності затрат процесорного часу від ітерації тестування для всіх
розібраних та запропонованих підходів
Моделі та засоби паралельних і розподілених програм
44
Література
1. Marcel B. Geometry I / Berger Marcel. –
Berlin: Springer, 1987.
2. Nomizu K. Affine Differential Geometry
(New ed.) / K. Nomizu, S. S., 1994.
3. Shreiner D. OpenGL Programming Guide:
The Official Guide to Learning OpenGL,
Version 4.5 with SPIR-V (9th Edition) / Dave
Shreiner., 2016.
4. Android NDK [Електронний ресурс]. Ре-
жим доступу до ресурсу:
https://developer.android.com/ndk/index.html.
5. Java Native Interface Specification [Елект-
ронний ресурс]. Режим доступу до ресур-
су: https://docs.oracle.com/javase/7/
docs/technotes/guides/jni/spec/jniTOC.html.
6. Article – World, View and Projection
Transformation Matrices [Електронный ре-
сурс]. Режим доступу до ресурсу:
http://www.codinglabs.net/article_world_vie
w_projection_matrix.aspx.
7. The Java® Language Specification Java SE 9
Edition [Електронний ресурс] / [J. Gosling,
B. Joy, G. Steele та ін.]. Режим доступу до
ресурсу: https://docs.oracle.com/javase/
specs/jls/se9/html/index.html.
8. Don’t Get Caught In the Cold, Warm-up Your
JVM [Електронный ресурс] / [D. Lion, A.
Chiu, H. Sun та ін.]. 2016. Режим доступу
до ресурсу: http://www.eecg.toronto.edu/
~yuan/papers/osdi16-hottub.pdf.
9. Pixel, Phone by Google. 1st generation. [Еле-
ктронний ресурс] – Режим доступу до ре-
сурсу: https://store.google.com/gb/product/
pixel_phone.
10. Snapdragon 821 Mobile Platform [Електрон-
ний ресурс] – Режим доступу до ресурсу:
https://www.qualcomm.com/products/snapdra
gon/processors/821.
11. ProGuard [Електронний ресурс] – Режим
доступу до ресурсу:
https://www.guardsquare.com/en/proguard.
12. McKeeman W.M. Peephole optimization.
Stanford Univ., Stanford, CA. 1965.
P. 443–444.
13. Android Studio The Official IDE for Android
[Електронний ресурс] – Режим доступу до
ресурсу:
https://developer.android.com/studio/index.ht
ml.
14. Lindholm T., Yellin F., Bracha G. The Java®
Virtual Machine Specification Java SE 9
Edition [Електронний ресурс]. Режим дос-
тупу до ресурсу: https://docs.oracle.com/
javase/specs/jvms/se9/html/index.html.
15. Cross Reference: util.cpp [Електронний ре-
сурс]. Режим доступу до ресурсу:
http://androidxref.com/8.0.0_r4/xref/framewo
rks/base/core/jni/android/opengl/util.cpp.
16. Dawson M., Johnson G., Low A. Best
practices for using the Java Native Interface
[Електронний ресурс]. 2009. Режим досту-
пу до ресурсу: https://www.ibm.com/
developerworks/library/j-jni/index.html.
17. Kurzyniec D., Sunderam V. Efficient
Cooperation between Java and Native Codes
– JNI Performance Benchmark [Електронний
ресурс]. Режим доступу до ресурсу:
http://janet-project.sourceforge.net/papers/
jnibench.pdf.
18. Caliper [Електронний ресурс]. Режим дос-
тупу до ресурсу:
https://github.com/google/caliper.
19. Application.mk [Електронний ресурс]. Ре-
жим доступу до ресурсу:
https://developer.android.com/ndk/guides/app
lication_mk.html.
20. FloatBuffer [Електронний ресурс]. Режим
доступу до ресурсу:
https://developer.android.com/reference/java/
nio/FloatBuffer.html.
21. Wloka M. “Batch, Batch, Batch:” What Does
It Really Mean? [Електронний ресурс]. Ре-
жим доступу до ресурсу: http://www.ce.u-
sys.org/Veranstaltungen/Interaktive%20Comp
utergraphik%20(Stamminger)/papers/BatchBa
tchBatch.pdf.
References
1. Marcel B. Geometry I. Berlin: Springer, 1987.
2. Nomizu K. Affine Differential Geometry
(New ed.), 1994.
3. Shreiner D. OpenGL Programming Guide:
The Official Guide to Learning OpenGL,
Version 4.5 with SPIR-V (9th Edition) / Dave
Shreiner., 2016.
4. Android NDK – Retrieved from
https://developer.android.com/ndk/index.html.
5. Java Native Interface Specification –
Retrieved from
https://docs.oracle.com/javase/7/docs/technote
s/guides/jni/spec/jniTOC.html.
6. Article - World, View and Projection
Transformation Matrices – Retrieved from
http://www.codinglabs.net/article_world_vie
w_projection_matrix.aspx.
7. The Java® Language Specification Java SE 9
Edition / [J. Gosling, B. Joy, G. Steele та ін.]
https://developer.android.com/ndk/index.html
https://docs.oracle.com/javase/7/%20docs/technotes/guides/jni/spec/jniTOC.html
https://docs.oracle.com/javase/7/%20docs/technotes/guides/jni/spec/jniTOC.html
http://www.codinglabs.net/article_world_view_projection_matrix.aspx
http://www.codinglabs.net/article_world_view_projection_matrix.aspx
https://docs.oracle.com/javase/%20specs/jls/se9/html/index.html
https://docs.oracle.com/javase/%20specs/jls/se9/html/index.html
http://www.eecg.toronto.edu/%20~yuan/papers/osdi16-hottub.pdf
http://www.eecg.toronto.edu/%20~yuan/papers/osdi16-hottub.pdf
https://store.google.com/gb/product/%20pixel_phone
https://store.google.com/gb/product/%20pixel_phone
https://www.qualcomm.com/products/snapdragon/processors/821
https://www.qualcomm.com/products/snapdragon/processors/821
https://www.guardsquare.com/en/proguard
https://developer.android.com/studio/index.html
https://developer.android.com/studio/index.html
https://docs.oracle.com/%20javase/specs/jvms/se9/html/index.html
https://docs.oracle.com/%20javase/specs/jvms/se9/html/index.html
http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/jni/android/opengl/util.cpp
http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/jni/android/opengl/util.cpp
https://www.ibm.com/%20developerworks/library/j-jni/index.html
https://www.ibm.com/%20developerworks/library/j-jni/index.html
http://janet-project.sourceforge.net/papers/%20jnibench.pdf
http://janet-project.sourceforge.net/papers/%20jnibench.pdf
https://github.com/google/caliper
https://developer.android.com/ndk/guides/application_mk.html
https://developer.android.com/ndk/guides/application_mk.html
https://developer.android.com/reference/java/nio/FloatBuffer.html
https://developer.android.com/reference/java/nio/FloatBuffer.html
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
https://developer.android.com/ndk/index.html
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
http://www.codinglabs.net/article_world_view_projection_matrix.aspx
http://www.codinglabs.net/article_world_view_projection_matrix.aspx
Моделі та засоби паралельних і розподілених програм
45
– Retrieved from
https://docs.oracle.com/javase/specs/jls/se9/ht
ml/index.html.
8. Don’t Get Caught In the Cold, Warm-up Your
JVM / [D. Lion, A. Chiu, H. Sun та ін.]. –
2016. – Retrieved from
http://www.eecg.toronto.edu/~yuan/papers/os
di16-hottub.pdf.
9. Pixel, Phone by Google. 1st generation. –
Retrieved from
https://store.google.com/gb/product/pixel_pho
ne.
10. Snapdragon 821 Mobile Platform – Retrieved
from
https://www.qualcomm.com/products/snapdra
gon/processors/821.
11. ProGuard – Retrieved from
https://www.guardsquare.com/en/proguard.
12. W. M. McKeeman. Peephole optimization /
W. M. McKeeman. // Stanford Univ.,
Stanford, CA. – 1965. – С. 443–444.
13. Android Studio The Official IDE for Android
– Retrieved from
https://developer.android.com/studio/index.ht
ml.
14. Lindholm T. The Java® Virtual Machine
Specification Java SE 9 Edition / T.
Lindholm, F. Yellin, G. Bracha – Retrieved
from
https://docs.oracle.com/javase/specs/jvms/se9/
html/index.html.
15. Cross Reference: util.cpp – Retrieved from
http://androidxref.com/8.0.0_r4/xref/framewo
rks/base/core/jni/android/opengl/util.cpp.
16. Dawson M. Best practices for using the Java
Native Interface / M. Dawson, G. Johnson, A.
Low. – 2009. – Retrieved from
https://www.ibm.com/developerworks/library/
j-jni/index.html.
17. Kurzyniec D. Efficient Cooperation between
Java and Native Codes – JNI Performance
Benchmark / D. Kurzyniec, V. Sunderam –
Retrieved from http://janet-
project.sourceforge.net/papers/jnibench.pdf.
18. Caliper – Retrieved from
https://github.com/google/caliper.
19. Application.mk – Retrieved from
https://developer.android.com/ndk/guides/app
lication_mk.html.
20. FloatBuffer – Retrieved from
https://developer.android.com/reference/java/
nio/FloatBuffer.html.
21. Wloka M. “Batch, Batch, Batch:” What Does
It Really Mean? / Matthias Wloka – Retrieved
from http://www.ce.u-
sys.org/Veranstaltungen/Interaktive%20Comp
utergraphik%20(Stamminger)/papers/BatchBa
tchBatch.pdf.
Одержано 05.12.2017
Про авторів:
Ашур Ілля Зін-Еддінович,
магістрант, Національний технічний
університет України
«КПІ імені Ігоря Сікорського»
https://orcid.org/0000-0003-2348-8777
Дорошенко Анатолій Юхимович,
доктор фізико-математичних наук,
професор, завідувач відділу теорії
комп'ютерних обчислень Інституту
програмних систем НАН України, профе-
сор кафедри автоматики і управління в те-
хнічних системах НТУУ "КПІ".
Кількість наукових публікацій в
українських виданнях – понад 150.
Кількість наукових публікацій в
іноземних виданнях – понад 50.
Індекс Гірша – 5.
http://orcid.org/0000-0002-8435-1451.
Місце роботи авторів:
Національний технічний університет
України «КПІ імені Ігоря Сікорського»
03056, Київ, пр. Перемоги, 37
E-mail: ilyaachour@gmail.com,
doroshenkoanatoliy2@gmail.com
https://docs.oracle.com/javase/specs/jls/se9/html/index.html
https://docs.oracle.com/javase/specs/jls/se9/html/index.html
http://www.eecg.toronto.edu/~yuan/papers/osdi16-hottub.pdf
http://www.eecg.toronto.edu/~yuan/papers/osdi16-hottub.pdf
https://store.google.com/gb/product/pixel_phone
https://store.google.com/gb/product/pixel_phone
https://www.qualcomm.com/products/snapdragon/processors/821
https://www.qualcomm.com/products/snapdragon/processors/821
https://www.guardsquare.com/en/proguard
https://developer.android.com/studio/index.html
https://developer.android.com/studio/index.html
https://docs.oracle.com/javase/specs/jvms/se9/html/index.html
https://docs.oracle.com/javase/specs/jvms/se9/html/index.html
http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/jni/android/opengl/util.cpp
http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/jni/android/opengl/util.cpp
https://www.ibm.com/developerworks/library/j-jni/index.html
https://www.ibm.com/developerworks/library/j-jni/index.html
http://janet-project.sourceforge.net/papers/jnibench.pdf
http://janet-project.sourceforge.net/papers/jnibench.pdf
https://github.com/google/caliper
https://developer.android.com/ndk/guides/application_mk.html
https://developer.android.com/ndk/guides/application_mk.html
https://developer.android.com/reference/java/nio/FloatBuffer.html
https://developer.android.com/reference/java/nio/FloatBuffer.html
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
http://www.ce.u-sys.org/Veranstaltungen/Interaktive%20Computergraphik%20(Stamminger)/papers/BatchBatchBatch.pdf
https://orcid.org/0000-0003-2348-8777
http://orcid.org/0000-0002-8435-1451
mailto:ilyaachour@gmail.com
mailto:doroshenkoanatoliy2@gmail.com
|