artykuły

Rzecz o procesorach ARM, ich pojedynku z procesorami x86 oraz ich przyszłości

Anatomia ARM

82 6 sierpnia 2016, 09:00 Mieszko Krzykowski, Mateusz Brzostek

Najważniejsze implementacje architektury ARMv8-A

Stworzone przez ARM

Firma ARM oferuje wiele różnych projektów rdzeni CPU, podzielonych na dwie główne rodziny. Cała gama rdzeni jest potrzebna do zrealizowania czegoś w rodzaju metaarchitektury ARM, czyli sposobu, w jaki CPU ARM są wykorzystywane w układach system-on-a-chip (SoC).

Propozycja makroarchitektury ARM polega na przetwarzaniu heterogenicznym, czyli użyciu kilku różnych maszyn obliczeniowych w ramach jednego systemu i przypisywaniu zadań do tej maszyny, która najlepiej sobie z nimi poradzi. Co jest najlepsze – o tym decyduje projektant. Czasem najlepsza jest wydajność (np. w superkomputerach złożonych z GPU i CPU), ale w urządzeniach przenośnych – które są głównymi odbiorcami zaawansowanych rdzeni ARM – najważniejsza jest efektywność energetyczna, czyli złoty środek między wydajnością a energooszczędnością. Technika przetwarzania heterogenicznego ARM nazywa się big.LITTLE i polega na zastosowaniu w jednym SoC kilku niewielkich, niskoenergetycznych rdzeni oraz kilku rozbudowanych, wysokowydajnych, i przełączaniu się między nimi w zależności od zadań wykonywanych przez urządzenie.

W stanie spoczynku mają pracować lekkie rdzenie, które doskonale radzą sobie z zadaniami wykonywanymi w tle, kiedy użytkownik nie wymaga szybkiej reakcji urządzenia. Duże rdzenie mają być wykorzystywane do bardziej wymagających zadań, kiedy użytkownik nie chce czekać albo kiedy nie można marnować energii na podtrzymywanie pracy innych części urządzenia (np. ekranu, modemów radiowych) przez cały czas potrzebny powolnym rdzeniom na skończenie obliczeń.

Wspomniane dwie rodziny rdzeni ARM można (z małymi wyjątkami) podzielić na te, które w konfiguracjach big.LITTLE mają występować w charakterze części big, i te, które mają występować jako części LITTLE. Jako LITTLE wykorzystuje się rdzenie o uproszczonym front-endzie, które nie mogą wykorzystywać instrukcji poza kolejnością. Należą do nich:

  • Cortex-A32 – najmniejszy rdzeń w obecnie wykorzystywanej architekturze ARMv8-A, wyłącznie 32-bitowy
  • Cortex-A35 – najmniejszy 64-bitowy rdzeń ARM
  • Cortex-A53 – najbardziej rozbudowany rdzeń ARM in-order; polecany przez ARM jako następca popularnego Corteksa-A7 i A9. Obecnie najpopularniejszy po Corteksie-A9 rdzeń ARM.

Wszystkie wymienione rdzenie mają stosunkowo krótki potok wykonawczy (do ośmiu etapów) i są dwudrożnie superskalarne, czyli mogą wykonywać maksymalnie dwie instrukcje jednocześnie. Cortex-A32 jest przeznaczony do zastosowań wbudowanych, do wykorzystania jako główny procesor. Teoretycznie mógłby być stosowany w konfiguracji big.LITTLE, ale tylko w połączeniu z innym 32-bitowym procesorem ARMv8-A – a wszystkie inne są 64-bitowe.

Do bardziej wymagających zadań wykorzystuje się – również jako rdzenie big w wielordzeniowych SoC – rdzenie z rodziny wysokowydajnych procesorów out-of-order. Ich rozbudowany front-end, wymagany do wykonywania instrukcji poza kolejnością, wydłuża potok wykonawczy, zużywa znaczną część budżetu energetycznego procesora i zajmuje sporą powierzchnię, ale zapewnia wysoką wydajność w wykonywaniu jednowątkowego kodu. Należą do nich:

  • Cortex-A57 – podstawowy wysokowydajny rdzeń ARMv8-A. Stał się podstawą pierwszych 64-bitowych SoC dla wielu producentów.
  • Cortex-A72 – najwydajniejszy uniwersalny rdzeń ARMv8-A. Ewolucyjne ulepszenie A57. Jest od niego wydajniejszy zegar-w-zegar o kilkanaście procent. Dzięki optymalizacjom layoutuWięcej informacji w artykule „Parę słów na temat bezpieczeństwa sprzętu komputerowego” ma być lepiej przystosowany do działania przez dłuższy czas z najszybszym taktowaniem niż Cortex-A57.
  • Cortex-A73 – najnowszy projekt ARM, jeszcze niedostępny w żadnym SoC. Usprawniony energetycznie względem A57 i A72. Dzięki rozbudowanemu front-endowi ma krótszy potok wykonawczy niż A57 i A72 (10 zamiast 14 etapów). Porzucono w nim niektóre funkcje makroarchitekturalne konieczne do zintegrowania układu w specjalistycznych przemysłowych SoC.

Poza architekturą samych rdzeni CPU firma ARM oferuje inne składniki układów SoC: sposoby połączenia rdzeni w kilkurdzeniowe grupy ze wspólną pamięcią podręczną oraz magistrale zachowujące spójność pamięci i umożliwiające połączenie rdzeni ARM z różnymi koprocesorami. Niektóre z nich są w pewnym stopniu wbudowane w rdzeń ARM i są konieczne do budowy SoC do specyficznych zastosowań. Na przykład Cortex-A73 jest zoptymalizowany do wykorzystania w smartfonach i tabletach; nie ma magistrali AMBA5, koniecznej do budowy serwerowego SoC z więcej niż czterema rdzeniami albo z przestrzenią adresową pamięci wspólną dla rdzeni ARM i jakichś dodatkowych koprocesorów.

Stworzone przez licencjobiorców ARM

Szczegóły różnych mikroarchitektur ARM nie są tak chętnie ujawniane jak w przypadku nowych procesorów x86. Nie wiemy o nich nawet tyle co o rdzeniach Cortex przygotowywanych przez firmę ARM. Apple, Qualcomm czy Samsung nie ujawniają nawet takich danych jak pojemność pamięci podręcznej. Większość informacji o tych rdzeniach pochodzi z niezależnych analiz mikroskopowych i starannie dobieranych benchmarków syntetycznych. Wymienimy najważniejsze własne implementacje 64-bitowej architektury ARMv8.

  • Apple Twister – własny rdzeń Apple wykorzystywany w procesorach A9 i A9X. Następca mikroarchitektur Cyclone i Typhoon. Jeden z najszerszych rdzeni ARM (może wydawać sześć instrukcji jednocześnie) i jeden z najbardziej ukierunkowanych na wydajność pojedynczego rdzenia, co pozwala Apple stosować konfiguracje dwurdzeniowe zamiast co najmniej czterordzeniowych, jak u innych producentów.
  • Qualcomm Kryo – rdzeń używany m.in. w układzie Snapdragon 820, w obydwu rolach konfiguracji big.LITTLE: rdzenie big mają więcej pamięci podręcznej i szybsze taktowanie.
  • Samsung M1 – cztery takie rdzenie są wykorzystywane w układzie SoC Exynos 8 Octa 8890 w połączeniu z czterema Cortex-A53 w konfiguracji big.LITTLE. Rdzenie M1 są w tym czipie taktowane z częstotliwością do 2,6 GHz.
  • Nvidia Denver – procesor VLIW wykorzystujący tłumaczenie instrukcji ARM na wewnętrzny zestaw instrukcji (więcej informacji można znaleźć w artykule „Rozważania na temat ograniczeń technicznych i patentowych dotyczących architektury x86”). Wykorzystywany w dwurdzeniowej wersji układu Tegra K1, jest taktowany z częstotliwością do 2,5 GHz. Dwa rdzenie Denver drugiej generacji mają być wykorzystane w konsoli Nintendo NX obok czterech rdzeni Cortex-A57.
  • Cavium ThunderX – procesor serwerowy, pochodna architektury Octeon, stosowanej w układach zarządzających sieciami. Ma wydajność zbliżoną do osiągów Cortex-A57, ale krótki potok wykonawczy powoduje, że jest lepiej dostosowany do wykonywania kodu z dużą liczbą nieprzewidywalnych rozgałęzień.
  • Applied Micro X-Gene – procesor serwerowy, zaprojektowany głównie do zastosowań sieciowych. Obecnie dostępna druga generacja ma osiem rdzeni taktowanych z częstotliwością 2,4 GHz i jest produkowana w procesie technologicznym 40 nm. W przyszłym roku ma być dostępna trzecia generacja SoC w architekturze X-Gene, wyposażona w 32 rdzenie i wielokanałowy kontroler DDR4.

Nadchodzące

Wymienione poniżej procesory ARM są w fazie projektowania i od dłuższego czasu nie ma o nich żadnych nowych informacji.

  • AMD K12 – wysokowydajny procesor z czterodrożną wielowątkowością (SMT). Pierwsze prototypy były gotowe na początku tego roku; ma trafić do serwerów w 2017 roku.
  • Broadcom Vulcan – serwerowy procesor Broadcoma, również z czterodrożnym SMT. Ma być produkowany w procesie technologicznym 16 nm FinFET i osiągać taktowanie do 3 GHz. Jako jeden z pierwszych będzie wykorzystywał odświeżoną architekturę ARMv8.1-A.
4