SiFive U8 oficjalnie. Pierwszy procesor RISC-V, który ma szansę powalczyć z ARM
Ostatnimi czasy o modelu programowym RISC-V mówi się coraz więcej, ale dotychczas jakoś nie miało to szczególnego przełożenia na jego rozwój. Jasne, kilku potentatów pokroju WD czy Red Hata zadeklarowało zaangażowanie, ograniczając jednak swój wysiłek do projektowania prostych mikrokontrolerów. W końcu pojawia się światełko w tunelu.
Można by rzec, że – pomimo powszechnej mody na RISC-V – główne ognisko rozwoju tej architektury wciąż pozostaje niezmienne. Mowa o firmie SiFive, założonej w 2015 roku przez naukowców z Uniwersytetu w Berkeley, którzy są też autorami całej koncepcji RISC-V.
W roku 2017 firma SiFive zaprezentowała czipy z serii U5. Stały się one pierwszymi w pełni funkcjonalnymi procesorami RISC-V na świecie. Należy przez to rozumieć, że potrafią pobrać i zdekodować rozkaz, po czym wykonać go i przeprowadzić zapis do pamięci. Przed nimi w ISA RISC-V budowano głównie proste mikrokontrolery, będące - w pewnym uproszczeniu – samą jednostką arytmetyczno-logiczną, uzależnioną od procesora centralnego w innej architekturze.
Na modelu U54 udało się wreszcie odpalić Linuksa. Powiedzieć jednak, że wydajność tego sprzętu pozostawiała wiele do życzenia, to jak nie powiedzieć nic. Przy cenie rzędu 999 dol. za płytkę deweloperską z 8 GB DDR4 RAM, która zbiera baty od kilkuletniej Cortex-A57, skusić na tę zabawkę mogli się co najwyżej fani plucia pod wiatr i masochiści innego typu.
Wydana rok później seria U7 nie była dużo lepsza. Niby przejście na model dual-issue (możliwość przesunięcia dwóch instrukcji w potoku w jednym cyklu zegara) dało już pewien zalążek dobrego, ale nie ma co się oszukiwać: podstawowa superskalarność w dzisiejszych czasach to żaden rarytas, lecz psi obowiązek inżynierów tworzących jakikolwiek procesor. Oczywiście brawa należą się za eksperyment z raczkującą RISC-V. Tylko że oklaski obliczeń nie przyśpieszają.
Koniec protez, powitajmy procesor
Ale oto nadszedł dla SiFive czas, aby porzucić protetykę i zająć się sprzętem będącym czymś więcej niż przetarciem szlaków. Poznajcie debiutanta z października 2019 roku – serię U8.
Mikroarchitektura SiFive U8 to trójfazowy out-of-order; pierwsza implementacja RISC-V z możliwością wykonywania poza kolejnością, o 12-etapowym potoku i trzech jednostkach wykonawczych. Co kluczowe, koncepcja OoO jest tu bardzo współczesna. Mianowicie układ korzysta z fizycznego rejestru, przesuwając tylko wskaźniki do operandów, a nie duże porcje danych jak starsze ARM-y czy choćby AMD Bulldozer. Ciekawostka: jako pierwszy z takiej koncepcji właśnie korzystał Sandy Bridge i to dawało mu w swoim czasie ogromną przewagę.
Jednostka pobierania ma możliwość żądać z pamięci L1I 16 bajtów kodu na cykl i przekazać je do kolejki we front-endzie. Jako że model programowy RISC-V cechuje się zmienną długością instrukcji, w odróżnieniu od chociażby ARM, nie da się wskazać dokładniej liczby rozkazów, jakie pojawią się na wyjściu z dekodera w cyklu. Przyjmując najbardziej powszechny format 32-bit, wynik wynosi cztery. Sam dekoder jest czterodrożny, więc wszystko gra.
Ale do wykonania przekazuje tylko trzy operacje na cykl. Dlaczego? W dokumentacji wyjaśnienia nie ma. Niemniej w teorii zachwianie równowagi pomiędzy pobieraniem a przekazaniem do wykonywania umożliwia lepsze zarządzanie błędnymi przewidywaniami. Przypuszczalnie pozwala także uprościć blok wykonawczy. Choć wyjaśnienie równie dobrze może być znacznie prostsze. SiFive wiele mówi o skalowalności. Przyszłe układy na pewno zwiększą przepustowość, a wtedy dekoder będzie już przygotowany na dodatkowe jednostki.
Skoro wykonywanie poza kolejnością, to oczywiście musi być bufor ROB (ang. ReOrder Buffer). Towarzyszą mu trzy niezależne dyspozytory dla operacji, odpowiednio: stałoprzecinkowych, zmiennoprzecinkowych oraz load/store. W tym miejscu warto nadmienić, że U8 póki co nie wspiera wektoryzacji. Rozszerzenie wektorowe ma być wprowadzone w najbliższej przyszłości w ramach czipu U87. Obecny to U84, nawiasem mówiąc. Możliwe, że SiFive dołoży wyspecjalizowany blok dla operacji macierzowych/SIMD i oto rozwiązanie zagadki z akapitu wyżej.
Niestety, producent nie dzieli się wiedzą na temat bloków FP i L/S. Wystarczyć musi wiedza na temat bloku stałoprzecinkowego, co jednak nie oznacza, że będzie nudno. Zwróćcie uwagę na trzy potoki, z których każdy ma własną kolejkę, jak również specyficzne ALU.
Tylko jeden pełni rolę typowej jednostki arytmetyczno-logicznej. Kolejny obsługuje skoki, a ostatni ma funkcjonalność rozszerzoną o mnożenie i dzielenie liczb całkowitych.
Panie i panowie, SiFive U84
Jak już zdążyłem gdzieś tam wspomnieć między wierszami, mikroarchitektura U8 debiutuje w formie procesora U84. To z grubsza czterordzeniowy czip o taktowaniu 2,66 GHz, z 2 MB pamięci L2, wytwarzany w procesie litograficznym klasy 7 nm. Według danych producenta, w benchmarku SPECint2006 osiąga wydajność 5,3 raza lepszą niż U54 zegar do zegara i nawet 7,2 raza lepszą, uwzględniając wzrost częstotliwości zegara taktującego.
Jest to zatem poziom Cortex-A72. Konstrukcji nie najnowszej, ale wystarczającej do średniej klasy smartfonów czy urządzeń internetu rzeczy. RISC-V zaczyna wyglądać tym samym jak sensowna alternatywa dla ARM, przynajmniej w średnich i dolnych partiach katalogu.
A warto przy tym zwrócić uwagę, że o ile wydajność to poziom A72, o tyle rozmiar rdzenia jest mniejszy niż A55, i to o ponad 20 proc. (Rdzeń A55 ma jakieś 0,36 mm²).
Zresztą, tę akurat zależność SiFive widzi doskonale, oferując de facto SoC z czterema rdzeniami U8, czterema U7 i koprocesorem S2, który może służyć chociażby do zarządzania bezpieczeństwem. Brakuje rzetelnych danych na temat zużycia energii w porównaniu do ARM, ale rozmiar czipu i technologia 7 nm nakazują sądzić, że jest on co najmniej konkurencyjny. Co by nie mówić, panie i panowie, oto pierwszy CPU RISC-V z szansą na komercyjne wykorzystanie.
Teraz pozostaje czekać na U87 i zapowiadane rozszerzenia wektorowe, które z oczywistych przyczyn powinny pomóc jeszcze bardziej wywindować poprzeczkę. Miło widzieć, że na skostniałym rynku architektur, zdominowanym od lat przez x86 i ARM, dzieje się coś świeżego ;)