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
Автори: Doroshenko, A.Yu., Achour, I.Z.
Формат: Стаття
Мова:Ukrainian
Опубліковано: Інститут програмних систем НАН України 2018
Теми:
Онлайн доступ:https://pp.isofts.kiev.ua/index.php/ojs1/article/view/236
Теги: Додати тег
Немає тегів, Будьте першим, хто поставить тег для цього запису!
Назва журналу:Problems in programming
Завантажити файл: Pdf

Репозитарії

Problems in programming
id 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