Компанія Huawei оприлюднила ключові подробиці щодо роботи свого нового компілятора Ark Compiler, який обіцяє суттєво підвищити продуктивність додатків на Android. Читайте далі, щоб дізнатися більше
Більшість останніх розмов навколо Huawei оберталися навколо невдалої політичної ситуації в компанії через Указ США, який забороняв багатьом компаніям вести справи з Huawei. Наслідки такого ключового рішення надто величезні, щоб не звертати на них увагу. Але в альтернативній реальності, де цього виконавчого наказу не існує, Huawei була б у центрі уваги через це нещодавно представили Ark Compiler, останню інновацію, яка стверджує, що подолає розрив у продуктивності програм між Android і iOS.
Перш ніж зануритися в те, що таке Ark Compiler, нам потрібно зробити крок назад і зрозуміти, що таке компілятор і яку мету він виконує в системі Android.
Коротка історія компіляторів та інтерпретаторів на Android
Компілятор — це комп’ютерна програма, яка перекладає код з однієї мови на іншу, яка часто є рідною машинною мовою. Потім це може бути виконано безпосередньо комп’ютером або за допомогою іншої програми (інтерпретатора). Цей переклад необхідний, оскільки ми пишемо код мовами програмування, зрозумілими людині (наприклад, Java та Kotlin), тоді як комп’ютер розуміє лише рідну машинну мову (двійковий код у формі 1 і 0). Таким чином, компілятор служить мостом між інструкціями, які пише людина, і здатністю машини розуміти, а потім виконувати ці інструкції. Таким чином, ефективність компілятора залежить від того, наскільки швидко та ефективно відбувається це перетворення та подальша інтерпретація запроваджуючи прямий зв’язок між ефективністю компілятора та продуктивністю та ефективністю коду, а також програми.
Дальвік В.М
На початку Android ОС використовувала так званий Dalvik VM (інтерпретатор) разом із компілятором JIT (точно вчасно). Це старіше відео з основ Android 101 XDA TV Серія стосується віртуальної машини Dalvik і налаштування JIT, обидві з яких служили потребам ранніх систем Android, де були великі обмеження пам’яті. Віртуальна машина Dalvik взяла байт-код Java і перетворила його на машинний код, коли код потрібно було виконати (отже, Just-In-Time). Це було необхідно, оскільки простір для зберігання в телефонах тоді був реальним обмеженням, тому такий підхід дозволяв програмам працювати з файлами меншого розміру в системі.
Недоліком компіляції та інтерпретації програм під час виконання є загальна повільна продуктивність програми, оскільки компіляція відбуватиметься під час використання програми користувачем.
Dalvik також мав обмеження щодо механізму збору сміття. Далвік спільно відстежував кожне виділення пам’яті. Як тільки Dalvik визначає, що частина пам’яті більше не використовується програмою, вона звільняє цю пам’ять назад у купу без будь-якого втручання програміста. Цей процес називається «Збірка сміття» (GC), і його метою є пошук об’єктів пам’яті в програмі, до якої більше немає доступу, а потім відновлення ресурсів, використаних цими об’єктами для звільнення пам’яті. Система визначає, коли GC потрібен на колективній основі, тому розробники програм не можуть вибирати, коли відбуваються події GC [навіть в ART]. Отже, якщо подія GC сталася під час будь-якої інтенсивної обробки в програмі на передньому плані, система призупинить виконання процесу та початок GC, тим самим збільшуючи час обробки та вносячи помітний «перелом» у користувачів.
Ці та інші обмеження підштовхнули Google до пошуку альтернативних підходів для підвищення продуктивності.
Android Runtime
Google представив Android 4.4 KitKat ART (Android Runtime) у формі попереднього перегляду з компілятором AOT (Ahead-Of-Time) і з Android 5.0 Lollipop Google відмовився від Dalvik на користь ART як єдиного доступного інтерпретатора. ART з AOT перетворює код на машинну мову під час встановлення програми, а не чекає виконання такого перетворення, коли програма використовується. Таким чином, цей підхід прискорив час запуску програми, але також створив недоліки у вигляді повільнішої інсталяції та збільшення використання дискового простору. Щоб збалансувати це все, Google усиновлений поєднання AOT, JIT і керованої компіляції профілю з ART на Android 7.0 Nougat, щоб гарантувати, що жоден фактор не буде суттєво впливати.
ART також працював над тим, щоб зробити Garbage Collection менш нав’язливим. Процес GC було оптимізовано, щоб бути швидшим загалом із меншою кількістю пауз (одна коротка пауза проти двох пауз Dalvik), меншою фрагментацією та меншим використанням пам’яті. Презентація Google на Google I/O 2014 докладніше пояснює обмеження GC від Dalvik і вдосконалення ART з цього приводу.
Навіть з урахуванням цих змін протягом багатьох років, основна передумова підходу Google передбачала інтерпретацію коду під час виконання, змінюючи час елемента компіляції (перекладу). Збірка сміття також продовжує залишатися проблемною точкою для розробників додатків через її притаманний переривчастий і колективний характер. Можна стверджувати, що продуктивність додатків Android страждає в результаті, оскільки продовжують накладні витрати.
Компілятор Ark від Huawei
Компанія Huawei працювала над розробкою більш ефективного рішення, тому найняла сотні експертів у цій галузі. Результатом цих зусиль став Ark Compiler, який Huawei стверджує, що це перший в історії статичний компілятор що дозволяє здійснювати прямий переклад на машинну мову, повністю усуваючи потребу в an перекладач. Ark Compiler також було розроблено з метою максимізації ефективності роботи для Java та C, тому теоретично можна побачити найкращі результати з цими мовами.
Huawei представляє деякі ключові функції Ark Compiler, як показано нижче:
- Методи компіляції, такі як AOT і JIT, можуть перетворювати деякі програми в машинний код і запускати їх безпосередньо на ЦП, але ці техніки не в змозі повністю звільнитися від інтерпретатора та пов’язаних з ним обмежень. Компілятор Ark використовує статичну компіляцію, яка дозволяє йому від’єднатися від динамічного інтерпретатора, відкриваючи можливість підвищити продуктивність програми на "семимильними кроками."
- Статична компіляція має потенційний недолік у тому, що вона занадто жорстка та нездатна внести коригування, які може зробити динамічний компілятор під час виконання. Huawei стверджує, що статична компіляція Ark Compiler вирішує цю проблему.шляхом плавного перекладу динамічних функцій мови програмування в машинний код."
- Існуючі процеси компіляції відбуваються під час або після встановлення пакета програми на мобільному пристрої. Компілятор Ark призначений для розгортання під час розробки програмного забезпечення, що, як ми припускаємо, допомагає усунути накладні витрати часу під час встановлення та виконання. Ми припускаємо, що розробники додатків зможуть безпосередньо компілювати різні мови в рідний машинний код під час додатка процес розробки, і отриманий APK, таким чином, не потребуватиме взаємодії з інтерпретатором або віртуальною машиною функція. Це теоретично зменшило б накладні витрати, пов’язані, наприклад, з JNI.
- Ark Compiler також змінює колективну природу Garbage Collection. Це дозволяє подіям GC відбуватися окремо для різних потоків Java. Цей розділений підхід стверджує, що пропонує менше перешкод для активних програм.
В результаті цих змін Ark Compiler може здавалося б, покращує плавність роботи системи Android до 24%, швидкість відгуку до 44%, а плавність роботи сторонніх додатків до 60%, стверджуючи, що продуктивність додатків для Android буде на тому ж рівні, що й для iOS.
Компілятор Ark наразі скомпільовано та оптимізовано для архітектури мікросхем ARM. Huawei сподівається, що в майбутньому спільна розробка апаратного та програмного забезпечення працюватиме на максимізацію можливостей чіпа Kirin.
Компілятор Ark підтримує стандартне використання Java, дозволяючи пряму компіляцію програм сторонніх розробників без потреби розробника програми вносити будь-які зміни в код. Компілятор Ark також дозволяє «коригувати структуру коду» для подальшого покращення продуктивності та пам’яті. Компанія Huawei вирішила зробити Ark Compiler системою з відкритим вихідним кодом, що дозволить використовувати її стороннім розробникам і адаптувати технологію для своїх потреб, сприяючи її прийняттю розробниками програм і мобільних телефонів виробників.
Хоча Huawei не згадує жодних недоліків Ark Compiler, можна очікувати великих розмірів програми принаймні, але це не повинно створювати жодних проблем на пристроях поточного покоління, які постачаються з достатньою кількістю зберігання. Ми також очікуємо, що Ark Compiler не буде доступний для всіх архітектур ЦП, оскільки проблеми із сумісністю Google не є головним болем Huawei. Ark Compiler призначений для використання під час розробки, а не під час встановлення; це вказує на те, що Huawei, можливо, змінила спосіб розгортання та встановлення програм на пристроях Android, а також, можливо, працювала над власним дизайном APK. Якщо це правильно, це може створити серйозну проблему сумісності в екосистемі, і пройде багато часу, перш ніж це стане стандартною функцією Android, якщо взагалі станеться.
Відсутність компіляції на пристрої користувача також викликає велике питання щодо оптимізації. Наразі ART оптимізується на основі кожної мікроархітектури, тобто отриманий двійковий файл буде відрізняється для пристрою Snapdragon і пристрою Exynos або навіть для Snapdragon 845 проти Snapdragon 625. Цей підхід має сенс для виробників, які мають повний контроль над SoC, наприклад Apple і Huawei. Однак, оскільки решта світу Android використовує багато різних SoC, примусове використання загальної оптимізації на різних пристроях знову стане перешкодою для стандартизації компілятора Ark. Отже, не очікуйте, що Ark Compiler найближчим часом з’явиться на вашому улюбленому спеціальному ПЗУ.
Для роз’яснення: Ark Compiler розроблено для роботи з Android, і Huawei нічого не згадує щодо його передбачувана домашня ОС і його сумісність із Ark Compiler, тому ми не робимо жодних припущень щодо цього.
Huawei планує провести дві великі конференції, присвячені розробникам і ширшій екосистемі. Це Конференція розробників Huawei Device China і Конференція розробників Green Alliance China. Обидва заходи стосуватимуться конкретних проблем із відкритим кодом, пов’язаних із компілятором Ark від Huawei, щоб зробити переваги цієї технології якомога ширшими.
Особлива подяка старшому визнаному співавтору XDA Dees_Troy і визнаний розробник arter97 за їх допомогу та внески.
Примітка: Huawei/Honor припинили надання офіційних кодів розблокування завантажувача для своїх пристроїв. Таким чином, завантажувачі їхніх пристроїв не можуть бути розблоковані, що означає, що користувачі не можуть рутувати або встановлювати спеціальні ПЗУ.