Znaczenie zoptymalizowanego zestawu narzędzi to jeden z najgorętszych tematów w świecie deweloperów Androida. Wielu z Was mogło słyszeć o GCC i Linaro, czyli dwóch największych projektach tego typu. GCC to stara ręka, która została pierwotnie wydana w 1987 roku, podczas gdy Linaro jest stosunkowo młodym graczem, mającym zaledwie cztery lata.
Przyjrzyjmy się najpierw historii tych dwóch projektów. Jak powiedziałem wcześniej, kolekcja kompilatorów GNU jest stara. Przez lata był używany do kompilacji różnych projektów, w tym na Androida. Google zdecydowało się użyć wersji 4.6 i 4.7 jako domyślnych zestawów narzędzi, a ja w tej serii testów chciałbym skupić się na wersji 4.7.
Linaro został wydany w 2010 roku i został zoptymalizowany pod kątem architektur ARM. I oczywiście ARM jest używany w zdecydowanej większości smartfonów i tabletów z systemem Android. Możesz znaleźć Linaro jako zestaw narzędzi używany do kompilowania jądra lub całych ROM-ów, a wielu programistów twierdzi, że ten zestaw narzędzi jest szybszy i potężniejszy niż GCC.
Zainspirowany przez naszego administratora programistę Pulsera_G2, postanowiłem dać szansę temu mitowi i sprawdzić, czy te twierdzenia są prawdziwe. Aby to zrobić, najpierw pobrałem źródło AOSP. Zbudowałem aosp_mako-eng target dla mojego Nexusa 4, korzystając z domyślnego zestawu gotowych wersji Google. Po zrób otapackage, Mam plik zip o rozmiarze 183115481 bajtów gotowy do flashowania. Następnie pobrałem zestaw narzędzi Linaro 4.7.4 i zastąpiłem GCC prebuilds/gcc/linux-86. Dokonałem niezbędnych zmian, aby ustawić poziom optymalizacji O3. Ponieważ AOSP obsługuje tylko wstępnie zbudowane jądra (bez modyfikacji), zbudowałem jądro samodzielnie za pomocą Linaro i zastąpiłem jądro w mako-jądro własnym własnym blobem.
Poniżej możesz zobaczyć dwa powstałe archiwa. Jak widać, archiwum Linaro jest nieco większe, więc ten zestaw narzędzi faktycznie robi coś z folderami bin i xbin. Sam plik jądra jest również większy.
Ale rozmiar pliku nie jest najważniejszy. Zamiast tego skupmy się na wydajności. Aby to zmierzyć, użyłem testu porównawczego AnTuTu. Aby zwiększyć precyzję, każdy test przeprowadziłem trzykrotnie. Jak widać poniżej różnica jest dość duża. Nie pokładałbym jednak zbytniej ślepej wiary w te testy, gdyż wyniki w każdym teście były inne. To powiedziawszy, Linaro był o kilka punktów lepszy od GCC, ale AnTuTu nie jest tak niezawodne, jak mogłoby się wydawać.
GCC
Linaro
Poniższe testy przeprowadzono za pomocą 3DMark, aby sprawdzić, czy zestaw narzędzi może mieć wpływ na wydajność grafiki. Różnica była jeszcze większa niż w przypadku Antutu. Możesz zyskać kilka FPS z GCC, ale ogólna płynność jest lepsza z Linaro. Wynik jest również nieco wyższy.
GCC
Linaro
Ostateczny test przeprowadzono przy użyciu gry Asphalt 8: Airborne. Poniżej możesz zobaczyć dwa filmy przedstawiające grę działającą na obu zestawach narzędzi. Pierwszy powstał w Linaro, drugi w GCC. Osobiście uważam, że Linaro jest nieco gładszy niż GCC, ale może to po prostu efekt placebo, ponieważ nie był to test z podwójnie ślepą próbą. Obydwa jądra były standardowe i wolne od poprawek, podkręcania i innych wymyślnych poprawek poprawiających wydajność.
//www.youtube.com/embed/BZRZenaNr9A
Czy Linaro jest lepszy?
Choć na początku byłem sceptyczny, muszę przyznać, że Linaro wydaje się być lepszym wyborem niż GCC, przynajmniej w mojej konfiguracji sprzętowej. System operacyjny wydawał się bardziej responsywny i szybszy niż wtedy, gdy został zbudowany przy użyciu GCC. Jednak GCC jest nadal solidny, więc jeśli potrzebujesz najwyższej stabilności, może nadal być najlepszym wyborem.
W kolejnych odcinkach postaram się porównać inne narzędzia takie jak SaberMod i Linaro 4.8. Daj nam znać o swoich ulubionych zestawach narzędzi w komentarzach poniżej. A jeśli chcesz, abyśmy przetestowali inne zestawy narzędzi, powiedz nam to!