64 bity rewolucji czyli Apple A7 w iPhone 5s

Apple A7 64 bitowy procesor
Apple lubi zaskakiwać i choć ostatnio więcej się dowiadujemy z plotek i przecieków to wprowadzenie 64-bitów do świata mobilnego okazało się sporym zaskoczeniem. Wywołało też sporo zamieszania zarówno u użytkowników jak i deweloperów. Jest się z czego cieszyć i o czym pisać choćby aby rozwiać pewnie obawy co do przyszłości naszych programów czy starszych urządzeń.



Najpierw osssochodzi z tym 32/64-bit
W uproszczeniu: Procesory posługują się danymi zapisanymi w postaci zer i jedynek, które łączą się w pewniej długości zestawy. Procesory 32 bitowe potrafią za jednym zamachem „przerachować” 32 bity (zera lub jedynki). Czyli radzą sobie z liczbami od 0 do 4 294 967 295 (po naszemu). 64-bitowe za na raz „łykają” liczby nawet do
18 446 744 073 709 551 616… sporo. Daje to przyrost prędkości zwłaszcza przy operowaniu na dużych ilościach danych (dwa razy więcej bitów „przerobionych” za jednym zamachem).
Teraz trochę bardziej szczegółowo: Procesory 32 bitowe mają zazwyczaj 32 bitowe rejestry i komunikują się z pamięcią za pomocą 32 bitowej magistrali. Mogą też adresować komórki pamięci za pomocą 32 bitów (czyli wspomniane wyżej 4 294 967 295 adresy: 4GB RAM). 64-bitowe mają dwa razy dłuższe (64 bit) rejestry i potrafią przetwarzać dwa razy większe porcje danych oraz obsługiwać za pomocą 64-bitowego adresowania ogromne ilości pamięci (przynajmniej teoretycznie, bo na razie nie ma takich potrzeb). Jest tylko jedna drobna wada… kod (programy) pisane specjalnie na 64-bitowe architektury mogą zajmować więcej pamięci szczególnie jeżeli są zrobione niedbale. Chodzi o odpowiednie rozłożenie danych tak aby nie pozastawiać za dużo wolnych miejsc w „obszarach” 64-bitów (tak z grubsza).

Apple-A7-fast

Co zrobił Apple.
Jak wiemy Apple od kilku lat projektuje własne procesory oparte o architekturę ARM (najpopularniejszą w urządzeniach mobilnych). Niecałe dwa lata temu architektura ARM została rozszerzona o wersje v8 w pełni 64-bitową. Nie tylko powiększono rejestry i szyny adresów oraz danych ale wprowadzono nowy trochę zmieniony względem wersji 32 bit zestaw instrukcji dla trybu 64 bitowego. Podwojono także ilość rejestrów ogólnego przeznaczenia (jest ich teraz 31). Specjalna jednostka przetwarzania równoległego (NEON) też została wyposażona w większą ilość rejestrów (32 zamiast 16). Dlaczego ilość rejestrów jest tak ważna? W rejestrach program przechowuje dane na jakich wykonuje najczęstsze operacje bo ma do nich natychmiastowy dostęp bez sięgania do pamięci, które zawsze jest wielokrotnie (czasem nawet kilkadziesiąt razy) wolniejsze. Dodatkowo to właśnie na danych w rejestrach przeprowadzane są kalkulacje.
Kilka firm ogłosiło plany użycia nowej wersji architektury ARM v8 ale to Apple jako pierwszy i na razie jedyny pokazał gotowy chip i działające urządzenie (iPhone 5s).
Apple nie tylko użył 64-bitowej architektury ARM v8 ale posunął się ciut dalej. Nie licencjonuje gotowych rdzeni procesorów ARM (rdzenie Cortex) lecz projektuje je sam. Dzięki temu ma pełną swobodę w doborze „klocków” z jakich robi swoje procesory (A6 i A7).
Tak trochę zbaczając z tematu. Układ A7 otwiera drogę do zastosowania procesorów ARM w komputerach Apple co może uniezależnić go całkowicie od Intela. Pisałem już trochę o tym w: Co lepsze ARM czy Intel?
Oczywiście 64-bitowy procesor nic nam nie da (a nawet zaszkodzi) jeżeli nie będziemy mieć 64-bitowego systemu operacyjnego. iOS 7 jest 64-bitowy i jest na razie jedynym mobilnym systemem operacyjnym obsługującym w pełni ten tryb. Tu znów dygresja. Samsung się zaczął chwalić, że już niebawem skopiuje A7 i zrobi „własny” procesor 64 bitowy dla urządzeń mobilnych. Moim zdaniem nie musi się śpieszyć bo nic nie zapowiada aby Android stał się systemem 64-bitowym w najbliższym czasie, a bez tego będzie to para w gwizdek…

I tym zawiłym sposobem dochodzimy do sedna wpisu.
Wielu z Was pewnie zaniepokoiło to mieszanie w architekturach. Obawiacie się problemów ze zgodnością oprogramowania z systemem i sprzętem. Trochę racji w tych obawach jest, bo temat można łatwo schrzanić (Microsoft potrafi) ale Apple z tak wielkim doświadczeniem w znacznie trudniejszych konwersjach (Motorola - PowerPC, PowerPC - Intel, System klasyczny - OS X, a w nich też przejście 32-64 bity) dobrze się przygotowało.
O procesorze w A7 już wiemy, że bez problemu wykona jednocześnie kod 32- i 64-bitowy. A co z systemem? iOS 7 też jest tak zaprojektowany aby jednocześnie uruchamiać programy 32- i 64-bitowe w komfortowych dla każdego rodzaju warunkach dzięki podwójnemu zestawowi wszystkich bibliotek (frameworków). Jeżeli w systemie wykonywane są tylko aplikacje 64-bitowe to ładowane są tylko wersje bibliotek 64-bit. Jeżeli pojawi się jakiś program starszy to dostanie 32-bitowe odpowiedniki bibliotek jakich chce użyć. Zaletą jest bezkonfliktowa praca aplikacji na maksymalnej wydajności. Wadą jest dodatkowe zużycie pamięci RAM gdy pracują programy różnych typów. Nie wiemy jeszcze ile pamięci Apple upchnął w A7 ale moim zdaniem jest tam 2GB RAM (dwa razy więcej niż w iPhone 5) co pokryje dodatkowe zapotrzebowanie z dużą nawiązką. Choć może Apple tym razem nie poskąpił i dał 4GB o czym przekonamy się niebawem. Kolejnym kosztem jest pewne zwiększenie zajętości pamięci flash przez system (te podwójne biblioteki). Myślę, że ubędzie z 300MB miejsca w iPhone 5s.

Wracając do zgodności. O stare programy jeżeli tylko działają na iOS 7 nie musimy się martwić. Zadziałają na 64-bitowym A7 bez problemów. Trochę więcej bólów głowy mają teraz programiści chcący przenieść swoje aplikacje na wyżyny 64-bitów. Nie wystarczy w XCode dodać „arm64” do opcji kompilacji. Trzeba sprawdzić czy nie robiło się jakiś sztuczek lub obejść. W trybie 64-bit pozmieniało się trochę w „szerokościach” danych i jeżeli programista podchodziło do typów danych niedbale to jego aplikacja może w trybie 64-bit się wywalać. Oczywiście Apple stworzył dokładna instrukcję konwersji i wypunktował na co należy zwracać szczególną uwagę.

Zrzut ekranu 2013-09-13 o 08.39.12

Po pierwsze aplikacja musi być zgodna z iOS 7 i może być zgodna z iOS 6 (nie da się skompilować programu zawierającego kod 64-bitowy zgodnego z iOS 5).

arm64bit XCode5

Jak widać na obrazku wyżej standardowo kod generowany jest na 32-bitowe (armv7, armv7s) i 64-bitowe (arm64) procesory jednocześnie (zawiera osobne kody dla każdej z architektur) i tak będzie robiona i aktualizowana zdecydowana większość programów. Oczywiście może zdarzyć się szalony programista, który zrobi program tylko na 64-bit (iPhone 5s) w ramach wybryku ale nie ma się czym przejmować.

Co do przyszłości i zgodności.
Widać, że z iOS 7 Apple znacząco utrudnił pisanie programów zgodnych jeszcze z iOS 5. Czyli mój iPad 1 już raczej pozostanie z obecną biblioteką programów i wielu aktualizacji nie mam się co spodziewać. iPhone 3GS z iOS 6 da się jeszcze używać przynajmniej rok (do następnej wersji iOS pewnie 8) bo większość deweloperów zachowa zgodność z iOS 6. Nie powinniśmy się martwić specjalnie o los naszych obecnych zgodnych z iOS 7 lecz 32-bitowych urządzeń. Sam Apple wprowadził właśnie nowego 32-bitowego iPhone 5c i ciągle jeszcze wszystkie jago iPady są 32-bitowe (pewnie niebawem się to zmieni ale na pewno zostaną w produkcji jakieś 32-bitowe). Choć lekka niepewność pozostaje przy iPhone 5. O ile w ofercie pozostał iPhone 4s i raczej o aktualizacje systemu dla niego możemy być spokojni (pewnie jeszcze na iOS 8 się załapie) to iPhone 5 wyleciał z oferty zastąpiony wewnętrznie prawie identycznym iPhone 5c. Prawie… Oczywiście wypuszczenie w przyszłości aktualizacji do iOS 8(?) dla iPhona 5c czy 4s i pozostawienie na lodzie iPhona 5 było by wielką złośliwością marketingową ale nie możemy tego wykluczyć. Taki los spotkał iPada 1. Choć Apple raczej nie robi na złość abonentom z 2-letniki kontraktami w AT&T ;-)

ARM 64-bitowy od Apple. Oj będzie się działo i to nie tylko na rynku mobilnym! ;-)



Informacje okazały się przydatne?
Daj znać znajomym o tym wpisie i zrób to po applowsku ;-)
MacWyznawca udostępnij wpisMacWyznawca udostępnij wpis