Procesory
Artykuł
Mateusz Brzostek, Czwartek, 2 marca 2017, 15:06

Mikroarchitektura Zen

Mikroarchitekturę Zen, która będzie podstawą procesorów Ryzen i przyszłych APU oraz punktem wyjścia do dalszego rozwoju, opisywaliśmy w artykule „AMD Zen – rzut oka na architekturę”. Tutaj podsumujemy, powtórzymy i uzupełnimy te informacje.

Jeden wątek znów w łaskach

W Zen zastosowano inną koncepcję wielowątkowości niż w rodzinie Bulldozer-Excavator (K15). Zamiast klastrowej wielowątkowości (CMT), w której dwa rdzenie zespolono w moduł dzielący niektóre zasoby i jednostki wykonawcze, w Zen wykorzystano pewną formę SMT (Simultaneous Multi-Threading – symultaniczna wielowątkowość). Technikę SMT wykorzystuje większość nowoczesnych wysokowydajnych procesorów; między innymi wszystkie układy Intela poza rodziną Atom, serwerowe procesory SPARC i POWER8.

Technika CMT z rodziny K15 jest bliższa pod względem wydajności, powierzchni rdzenia i liczby tranzystorów dwóm osobnym rdzeniom. Współdzielone są te części procesora, które – jak spodziewają się projektanci – najczęściej mają wolne zasoby obliczeniowe. SMT jest znacznie bliższa pojedynczemu rdzeniowi; inwestycja w powierzchnię rdzenia i liczbę tranzystorów jest o wiele mniejsza niż w CMT. W Zen jeden rdzeń może prowadzić jednocześnie dwa wątki, podobnie jak desktopowe procesory Intela. W SMT znakomita większość zasobów procesora jest dostępna dla jednego wątku, jeśli drugi ich nie używa. Jeśli trzeba, prawie wszystkie zasoby rdzenia można wykorzystać do przyspieszenia wykonywania jednowątkowego kodu, podczas gdy w CMT drugi rdzeń w żaden sposób nie pomaga pierwszemu w jednowątkowych zadaniach. Do implementacji SMT w Zen wrócimy za chwilę.

Front-end

Front-end procesora, w którym pobiera się instrukcje z pamięci, przewiduje się skoki, dekoduje instrukcje i przygotowuje je do wykonania, jest pierwszą oznaką, że mamy do czynienia z architekturą zupełnie inną niż K15.

Sieć neuronowa przewidująca skoki

Układ przewidywania skoków w Zen był owiany tajemnicą, ale teraz się dowiedzieliśmy, że korzysta z mechanizmu perceptronowego jako jednego z elementów pomagających w decyzji. Zastosowanie perceptronu do przewidywania skoków zostało opisane w literaturze naukowej kilkanaście lat temu, ale Zen to pierwszy potwierdzony przypadek użycia sieci neuronowej w praktyce. Co prawda producenci procesorów zwykle nie ujawniają tych informacji – eksperymenty sugerują, że Intel począwszy od architektury Haswell korzysta z układu przewidywania IT-TAGE (więcej informacji znajdziecie w artykule na stronie „The Journal of Instruction-Level Parallelism”). Nie wiemy jednak, czy na przykład Apple nie wykorzystuje perceptronu w architekturze Hurricane (procesory A10) – jeden z architektów Zen, Jim Keller, pracował wcześniej w Apple i mógł mieć doświadczenie w tej technice.

Perceptronowy układ przewidywania skoków najprawdopodobniej uczy się większej próbki kodu, niż mieści okno OoO (ok. 200 instrukcji), i pamięta jej historię. Pamiętajmy, że nawet taki zakres uczenia odpowiada ułamkom sekundy w czasie rzeczywistym; sieć neuronowa nie uczy się w dłuższym okresie, a procesor nie zmienia wydajności w zależności od programów, których najczęściej używamy.

Pamięć podręczna L1

Pamięć podręczna L1 dla instrukcji ma o połowę większą pojemność niż w Excavatorze – 64 kB dla każdego rdzenia, podczas gdy w Excavatorze 96 kB L1I było wspólne dla dwurdzeniowego modułu.

Jako metodę na zwiększenie wydajności i efektywności energetycznej wykorzystano pierwszy raz niewielką pamięć podręczną (o nieujawnionym rozmiarze) przechowującą zdekodowane mikrooperacje. Układ przewidywania skoków decyduje, czy kolejne instrukcje należy pobrać z pamięci L1I i zdekodować, czy wystarczy je pobrać spośród niedawno zdekodowanych mikrooperacji i od razu wysłać do wykonania. Dzięki temu mechanizmowi dekoder i pamięć L1I nie zawsze są wykorzystywane i można je czasowo wyłączyć, by oszczędzić energię. Jeśli instrukcja zostanie odnaleziona w tej pamięci mikrooperacji, może zostać od razu wysłana do wykonania i nie przechodzi przez trwające kilka cykli dekodowanie – to skraca potok wykonawczy i zwiększa wydajność w niektórych scenariuszach.

Z pamięci L1I można pobrać 32 bajty na cykl zegara, a dekoder dekoduje cztery operacje na cykl; to tyle samo, ile przypadało na cały moduł w architekturze K15. Z kolejki mikrooperacji do jednostek wykonawczych trafia sześć mikrooperacji stałoprzecinkowych (lub cztery zmiennoprzecinkowe) w cyklu zegara – o połowę więcej niż w całym module K15.

Ponownie zastosowano mechanizmy łączenia makrooperacji i mikrooperacji, w ulepszonej względem K15 formie. Kolejka mikrooperacji przechowuje niektóre pary mikrooperacji w skompresowanej formie i rozdziela je na dwie dopiero przy wysyłaniu do części wykonawczej.

Zen ma znacznie większe okno out-of-order, czyli śledzi kod w poszukiwaniu skoków i zależności ze znacznie większym wyprzedzeniem niż Excavator. AMD nie ujawnia, z jak dużym: rozmiar kolejki mikrooperacji i pamięci podręcznej zdekodowanych mikrooperacji nie jest znany. Porównanie rozmiaru innych wewnętrznych buforów do architektur Haswell, Broadwell i Skylake pozwala sądzić, że okno OoO w Zen to około 200 instrukcji (podobnie jak w przypadku układów Haswell i Broadwell).

Nowoczesny zestaw instrukcji

Zestaw instrukcji Zen został rozszerzony o najbardziej przydatne instrukcje znane z CPU Intela: RDRAND i RDSEED (do generowania liczb losowych), instrukcje przyspieszające szyfrowanie algorytmami wykorzystującymi funkcje SHA oraz tryby ograniczonego dostępu do pamięci SMAP i SMEP. Dodano też kilka nowych instrukcji zaprojektowanych specjalnie dla Zen, dotyczących pamięci podręcznej: jedną można wyczyścić całą linię cache, druga umożliwia łączenie 4-kilobajtowych stron w 32-kilobajtowe. Obie mogą posłużyć głównie do optymalizacji wydajności, o ile oprogramowanie i system operacyjny ich użyją.

Konkurs Palit Polska
Spis treści
Ocena artykułu:
Ocen: 36
Zaloguj się, by móc oceniać
Artykuły spokrewnione
Aktualności spokrewnione
Facebook
Ostatnio komentowane