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

Czy architektura ARM jest bardziej energooszczędna?

Architektury ARM i MIPS często są uważane za z natury bardziej energooszczędne od x86. Znając najważniejsze dziś ograniczenia w cyfrowych obliczeniach, trudno uzasadnić, dlaczego miałoby tak być. Czas wykonania programu i zużyta do tego energia są ostatecznie ograniczone prędkością pamięci, stopniem skomplikowania procesora i tym, jak bardzo da się zrównoleglić kod. Jeśli każdy procesor wykonuje ten sam program, korzysta z takich samych rodzajów pamięci i jest w podobnym stopniu zaawansowany technicznie, to co może się różnić?

Jak pokazują współczesne badania, w procesorach o dzisiejszym stopniu skomplikowania sama architektura nie ma widocznego wpływu na efektywność energetyczną. Źródło: „Power Struggles: Revisiting the RISC vs. CISC Debate on Contemporary ARM and x86 Architectures”, E. Blem, J. Menon, K. Sankaralingam, University of Wisconsin, 2013. To nie znaczy, że nigdy i nigdzie nie miała wpływu: w bardzo małych procesorach, w których budżet energetyczny i budżet tranzystorów są bardzo ograniczone, architektura wciąż ma znaczenie.

Przeciętny procesor ARM jest bardziej energooszczędny od przeciętnego procesora x86 – ale nie jest to zasługą jego architektury. Architektura ARM zaczęła swój rozwój od wspomnianych małych i energooszczędnych procesorów i w ostatniej dekadzie zmierza ku większym i wydajniejszym. Procesory x86 przez długie lata miały być tylko wydajne, efektywność energetyczna i całkowita energooszczędność dopiero w ostatniej dekadzie zaczęły być istotne. ARM rozwija się „wzwyż”, a x86 – „w dół”; procesory ARM stają się coraz większe i wydajniejsze, co jest konieczne do wykorzystania ich w wysokowydajnych smartfonach, komputerach przenośnych i serwerach.

Wydajność procesora, maksymalna częstotliwość taktowania, liczba tranzystorów, zajmowana powierzchnia i zużywana energia zależą głównie od techniki produkcji oraz decyzji projektowych podjętych przez konstruktorów. Rdzenie Airmont w Xeonie Phi mają tę samą architekturę x86 co rdzenie Skylake w procesorach Core i7, wykonają nawet ten sam program bez rekompilacji, ale nie mają z nimi o wiele więcej wspólnego. Te pierwsze osiągają taktowanie do 1,5 GHz, mają czterodrożną symultaniczną wielowątkowość (SMT) i ograniczone możliwości wykonywania instrukcji poza kolejnością. Drugie występują w wersjach taktowanych z częstotliwością od 1,2 GHz do 4 GHz, mają dwudrożną wielowątkowość i najbardziej zaawansowane możliwości wykonywania kodu out-of-order spośród wszystkich procesorów. Podobne różnice znajdziemy w procesorach ARM – najmniejsze, takie jak Cortex-M0, nie mają nawet tak bogatego zestawu instrukcji jak rdzenie Apple, Qualcomma czy Cortex-A57.

ARM kontra x86 a liczba tranzystorów

Jak wspomnieliśmy, architektura jak najbardziej ma znaczenie, kiedy projektanci procesora mają do dyspozycji mocno ograniczoną liczbę tranzystorów. Tak zwany „podatek x86”, czyli liczba tranzystorów, jaką trzeba poświęcić na stosunkowo skomplikowany dekoder instrukcji x86, jest tym bardziej dotkliwy, im mniej tranzystorów mamy do dyspozycji. Podczas pierwszych zapowiedzi procesora AMD K12 jego projektant, Jim Keller, powiedział, że wykorzystanie architektury ARM pozwala mu przeznaczyć więcej tranzystorów na funkcje zwiększające wydajność. To dość ogólne stwierdzenie, o którego prawdziwości mogą być przekonani dzisiaj tylko projektanci K12 (i tylko dla nich ma ono znaczenie).

Koszt tranzystorów stale maleje wraz z postępem w litografii i nawet w najbardziej ograniczonych budżetem energetycznym procesorach będzie można sobie pozwolić na „podatek x86”. Na razie płaci go tylko Intel w swoich układach Quark, bez większego skutku: o komercyjnych zastosowaniach Quark niezwiązanych z budżetem marketingowym Intela nic nie wiadomo.

Co jest łatwiejsze w programowaniu?

Ze względu na skomplikowanie kodu dzisiejszych programów użytkowych mikrooptymalizacją zajmują się wyłącznie kompilatory. Programiści pracują w językach wysokopoziomowych i korzystają z przygotowanych wcześniej bibliotek standardowych. Oczywiście, staranna optymalizacja kodu ciągle jest możliwa i konieczna, ale programiści po prostu podążają za ogólnymi wytycznymi, a twórcy kompilatorów dbają o to, żeby w zależności od architektury procesora dały one jak najlepszy efekt. O łatwości programowania decyduje ostatecznie dostępność i jakość narzędzi programistycznych, a nie architektura procesora.

2