Niniejszy artykuł jest pierwszą częścią opisu technicznego procesorów Haswell. Skupimy się w nim na organizacji logicznej procesora i zmianach w mikroarchitekturze. Oprócz modernizacji samego rdzenia procesora Haswell nastąpiły zasadnicze zmiany w produkcji i fizycznej budowie układu – tym zajmiemy się niebawem w drugiej części.
Rdzeń Haswell zostanie wykorzystany przez Intela w każdej linii produktów. Układy z tym rdzeniem mają się znaleźć w tabletach z lepszej półki, ultraprzenośnych laptopach, komputerach biurkowych i serwerach. Rdzeń x86 jest tylko jednym z elementów budowy takiego czipu: w zależności od potrzeb krzemowe jądra będą zawierały różne konfiguracje rdzeni Haswell, pamięci podręcznych ostatniego poziomu, układów graficznych, kontrolerów RAM itp.
Ewolucja rdzenia x86
Choć teoretycznie Haswell to całkiem nowa architektura, tradycyjnie zapożycza bardzo dużo z poprzednich. Prześledźmy drogę instrukcji, od pobrania jej z pamięci do zapisania jej wyniku.
Front-end – pobieranie, dekodowanie i kolejka instrukcji
Ogólna budowa tej części procesora pozostała taka sama jak w Sandy Bridge. Przypomnijmy, że w tej drugiej architekturze zastosowano dodatkowy bufor, przechowujący zdekodowane ciągi instrukcji w postaci mikrooperacji. Kiedy w kolejce pojawia się wcześniej wykonywana grupa instrukcji, można pominąć pobieranie instrukcji z pamięci podręcznej L1I i wysyłanie ich do dekodera, a zamiast tego pobrać gotowe, zdekodowane mikrooperacje z tego bufora. Ta technika jednocześnie zwiększa wydajność (bo instrukcja jest szybciej wydawana jednostkom wykonawczym) i oszczędza energię (bo dekoder zużywa jej więcej niż dodatkowy bufor mikrooperacji). Poza tym ze wspomnianego bufora można pobrać w jednym transferze 32 B instrukcji, dwa razy więcej niż z pamięci L1I. To przyspiesza pobieranie rozbudowanych instrukcji SIMD (na przykład AVX).
Kolejny raz zwiększono pulę instrukcji do przekolejkowania. Procesor obserwuje ich ciąg i decyduje, które można wykonać poza kolejnością. Haswell wybiega w przyszłość w tych spekulacjach o 1/3 dalej niż Nehalem oraz Westmere i o 1/7 dalej niż Sandy Bridge oraz Ivy Bridge. Pewnym usprawnieniom (jak zwykle sekretnym) poddano też jednostkę przewidywania skoków.
Dekoder rozkazów i jednostki wykonawcze
Najważniejszą zmianą w dekoderze rozkazów jest obsługa zestawu instrukcji AVX2. Przypomnijmy, że AVX (Advanced Vector Extensions) jest obsługiwany przez procesory Sandy Bridge, Ivy Bridge, Bulldozer i Piledriver. To zestaw instrukcji SIMD (jedna instrukcja, wiele danych), który dzięki poszerzeniu wszystkich zmiennoprzecinkowych SSE z 128 b do 256 b pozwala jedną instrukcją przetwarzać dwa razy więcej danych. AVX2 poszerza do 256 b również SSE operujące na liczbach całkowitych. Haswell obsługuje też instrukcje FMA, czyli mnożenie dwóch liczb i dodawanie wyniku do trzeciej, wszystko w jednej instrukcji. Dzięki FMA dwie operacje trwające w sumie osiem cykli można zastąpić jedną. Dodatkowo zyskujemy precyzję, bo zamiast dwóch zaokrągleń (wyniku mnożenia i wyniku dodawania) następuje tylko jedno: końcowego wyniku.
Warto zauważyć, że FMA to operacje żywcem przeniesione ze świata procesorów graficznych do instrukcji x86, a AVX2, jako sposób na wektorowe przetwarzanie danych, jest koncepcyjnie podobny do sposobu, w jaki pracują GPU. Paradoksalnie AVX2 może być dla Intela krokiem w kierunku unifikacji CPU i GPU – oczywiście w odległej przyszłości. Wykorzystanie zalet instrukcji AVX2 i FMA wymaga, rzecz jasna, co najmniej skompilowania od nowa, a najlepiej dokładnej optymalizacji oprogramowania. Sporo czasu upłynie, zanim zauważymy korzyści w popularnych programach.
Obsługa AVX2 wymaga sporych zmian w jednostkach wykonawczych. Dodano nową jednostkę arytmetyki stałoprzecinkowej. Ma ona odciążyć bardziej uniwersalne główne jednostki arytmetyczne, żeby mogły w tym czasie wykonywać operacje wektorowe.
Jeśli chcemy przetwarzać więcej danych, to trzeba też dostarczyć ich więcej do jednostek wykonawczych. Żeby „nakarmić” je danymi, dodano nową jednostkę generowania adresów do zapisywania danych do pamięci; dzięki temu dwie pozostałe mogą się zająć operacjami pobierania z niej nowych danych. Podwojono przepustowość pamięci podręcznej L1D (przechowującej dane) i L2. Szybsze pobieranie z pamięci podręcznych zwiększy wydajność także w obecnych programach.
TSX – sprzętowa pamięć transakcyjna
Choć już od dawna sprzedaje się praktycznie wyłącznie procesory wielowątkowe, mnóstwo problemów z programowaniem wielowątkowym pozostaje nierozwiązanych. Jednym z nich jest jednoczesny dostęp dwóch wątków do tych samych danych (jednego zakresu adresów w pamięci). Najczęściej w programowaniu stosuje się podejście polegające na tym, że każdy wątek blokuje dane, których używa, od momentu, w którym zaczyna ich potrzebować, do momentu, kiedy skończy wszelkie operacje i zapisze wynik. Takie podejście przy więcej niż jednym wątku może prowadzić do zakleszczeń:
Oczywiście, jest wiele technik pozwalających ominąć te problemy, ale wszystkie wymagają dodatkowych linii kodu, a im więcej wątków, tym trudniej je zastosować. Podobny problem rozwiązano już dawno w bazach danych przy użyciu transakcji; ten sam pomysł od lat jest wykorzystywany w technice STM (Software Transactional Memory – programowa pamięć transakcyjna). W tej koncepcji wszystkie operacje na pamięci są pogrupowane w transakcje, które muszą zostać wykonane w całości: do jednej transakcji może należeć odczytanie z pamięci i (po obliczeniach) zapisanie wyniku. Transakcja musi zostać wykonana w całości, żeby nie było ryzyka błędu, gdyby jakiś wątek nadpisał innemu ważne dane. By uniknąć zakleszczeń, każdemu wątkowi daje się tymczasową kopię danych, która zostanie zapisana do pamięci dopiero po potwierdzeniu, że nie nadpisuje niczego ważnego.
Transakcyjny dostęp do pamięci można zastosować przy użyciu technik programistycznych, ale wiąże się to ze znacznymi (nawet kilkukrotnymi) spadkami wydajności. Aby można było wykorzystać zalety tej techniki, konieczne jest przyspieszanie sprzętowe. Kilka procesorów miało już taką możliwość. Na przykład IBM BlueGene/Q (używany w 4 z 10 najszybszych superkomputerów) obsługuje sprzętowo pamięć transakcyjną, a Transmeta Crusoe i Efficeon używały tej techniki (w niewidoczny dla programisty sposób) do emulowania zestawu instrukcji x86.
Mikroarchitektura Haswell również umie sprzętowo wspomagać pamięć transakcyjną. Programiści będą mieć dostęp do tej funkcji na dwa sposoby. Pierwszym jest RTM (Restricted Transactional Memory), w którym za pomocą trzech nowych instrukcji można w kodzie programu rozpocząć, zakończyć i przerwać transakcję. RTM jest „tradycyjną” implementacją pamięci transakcyjnej; pozwala programiście na pełną kontrolę nad transakcjami i wymaga napisania wielowątkowych algorytmów od nowa.
Drugim interfejsem jest HLE (Hardware Lock Elision – sprzętowe likwidowanie blokad), technika wykorzystująca możliwości sprzętu związane z pamięcią transakcyjną do przyspieszenia napisanych w tradycyjny sposób programów. HLE pozwala programiście oznaczyć partie kodu, w których między dwoma wątkami może wystąpić konflikt w dostępie do danych. Kiedy procesor napotka „blokadę” danych, optymistycznie zakłada, że nie jest ona potrzebna, i pozwala więcej niż jednemu wątkowi operować na jednych danych. Każdy wątek będzie w rzeczywistości operował na własnej, tymczasowej kopii fragmentu pamięci. Jeżeli zostanie wykryty konflikt, oba wątki zostaną cofnięte do stanu sprzed blokady pamięci i będą wykonywane w tradycyjny sposób.
HLE jest prostym sposobem na przerobienie tradycyjnego, blokującego pamięć programu na transakcyjny. Przede wszystkim nie wymaga pisania programu od zera, a jedynie małych zmian, rekompilacji i dołączenia dodatkowych bibliotek. Jest też kompatybilny z procesorami pozbawionymi jego obsługi: te po prostu zignorują wspomniane znaczniki obejmujące partię kodu. HLE, ponieważ opiera się na prostym sprzętowym wykrywaniu konfliktów, będzie skuteczny w przypadku, gdy program musi zachowawczo, „na wszelki wypadek”, blokować pamięć, żeby zapewnić poprawny wynik. W niektórych przypadkach HLE może nawet obniżać wydajność – ale programiści, którzy chcą użyć tej techniki, i tak muszą zrekompilować program, powinni też sprawdzić wydajność.
Trudno ocenić, w jakim stopniu HLE przyda się w programach użytkowych. Blokowanie dostępu do pamięci to tylko jeden z problemów, z którymi trzeba się zmierzyć w programowaniu wielowątkowym. Myślimy, że na początku sprzętowa pamięć transakcyjna znajdzie zastosowanie w wyspecjalizowanych programach biznesowych i naukowych, a na korzyści dla domowych użytkowników trzeba będzie czekać latami.
Ewolucja układu graficznego
Wbudowany układ graficzny jest już stałym elementem procesorów (APU albo SoC-ów), a Intel od paru lat obiecuje coraz wyższą i wyższą wydajność kolejnych jego generacji. Haswell jest pod tym względem ewolucyjnym krokiem naprzód.
GPU w tych procesorach jest dalszym rozwinięciem architektury GPU znanej z Sandy Bridge i Ivy Bridge. Ogólna budowa pozostała bez zmian:
GPU z Sandy Bridge od początku projektowano tak, żeby można było zbudować kilka modeli różniących się wydajnością. Jednostki wykonawcze (EU – execution units) pogrupowano po 10 (w Sandy Bridge i Ivy Bridge – po 6); procesor może mieć jedną, dwie lub cztery takie grupy. Plotki mówią o trzech modelach:
- GT1 – 6 EU (reszta wyłączona), odpowiednik HD Graphics 2500 w Ivy Bridge;
- GT2 – 20 EU (dwa bloki włączone), odpowiednik HD Graphics HD 4000;
- GT3 – 40 EU (cztery bloki po 10), opcjonalna dodatkowa pamięć.
GT1 i GT2 będą prawdopodobnie budowane z tego samego krzemowego jądra, w którym część jednostek wykonawczych będzie wyłączona. Warto zauważyć, że najniższy model w rodzinach Sandy Bridge, Ivy Bridge i Haswell ciągle ma sześć jednostek wykonawczych – wydajność w niskim segmencie wzrasta zatem tylko o tyle, o ile poprawia się sprawność programowalnych jednostek cieniowania i ich taktowanie. Środkowy model w Sandy Bridge miał 12 jednostek wykonawczych, w Ivy Bridge – 16, a w Haswellu – 20: Intel wyraźnie chce zwiększyć klasę tych średnich GPU. Za to trzeci model, GT3, jest zupełnie nową propozycją: Intel nie miał dotychczas tak wydajnego układu graficznego. Prawdopodobnie będzie zbudowany z innego krzemowego jądra niż wolniejsze modele, ma być też wyposażony w dodatkową pamięć o stosunkowo dużej pojemności umieszczoną w jednej obudowie z procesorem. Szczegóły konstrukcyjne tego rozwiązania są bardzo ciekawe i mają daleko idące skutki – ale o tym opowiemy w drugiej części tego artykułu. Dość powiedzieć, że wytwarzanie procesorów z układem GT3 będzie znacznie droższe od produkcji niższych modeli.
Samą architekturę poszczególnych części GPU również usprawniono. Front-end, „karmiący” jednostki wykonawcze danymi oraz instrukcjami, poszerzono tak, aby mógł zapewnić pracę znacznie większej ich liczbie. Większość z tych wyspecjalizowanych obwodów będzie mieć dwa razy większą wydajność, żeby 40 EU w modelu GT3 nie leżało odłogiem. Oczywiście, większa przepustowość front-endu poprawi również wydajność najniższego modelu w niektórych scenariuszach, ale w większości przypadków będzie niewykorzystanym zapasem. To cena modularności, którą inżynierowie chętnie zapłacili, zwłaszcza że nie kosztowało to zbyt dużo dodatkowej powierzchni jądra.
GPU Haswella będzie też obsługiwało nowoczesne interfejsy programistyczne: DirectX 11.1 i OpenCL 1.2. OpenGL będzie obsługiwany tylko w zgodzie ze specyfikacją 4.0 – opublikowaną zaledwie 3 lata temu...
Nowy transkoder wideo... z polepszaczem
Największe zmiany zaszły chyba w fioletowym bloku z powyższego diagramu – jednostkach obróbki wideo. Sprzętowy koder/dekoder wideo, wyspecjalizowana maszyna obliczeniowa stojąca za funkcją Quick Sync, będzie miał nowe możliwości:
- kodowanie SVC, czyli strumienia wideo zawierającego kilka obrazów; przydatne między innymi w wideokonferencjach i strumieniowaniu przez różnej jakości łącza;
- dekodowanie MJPEG – to format wyjściowy wielu kamer internetowych; sprzętowe dekodowanie ma zmniejszyć zużycie energii w trakcie rozmów wideo;
- kodowanie MPEG-2 – tak, formatu używanego na płytach DVD, czyli nośnikach z kolekcji naszych pradziadów, dziś przydatnego jeszcze do strumieniowania wideo do niektórych urządzeń zgodnych z DLNA.
Oprócz tego GPU w Haswellu będzie mieć nowy wyspecjalizowany układ do obróbki (nie kodowania) ruchomych obrazów. Jego zadaniem jest poprawianie jakości wideo. Część tych funkcji (odszumianie, usuwanie przeplotu, korekcja kolorów) jest już dziś dostępna w procesorach z funkcją Quick Sync, ale w Haswellu będzie ich więcej i zapewnią je oddzielne, wyspecjalizowane podsystemy. Dwie najważniejsze nowe funkcje to konwersja prędkości, czyli konwertowanie strumienia wideo pomiędzy 24 kl./sek., 30 kl./sek. i 60 kl./sek., oraz stabilizacja drgającego obrazu. Ta druga powinna Wam się kojarzyć z funkcjami od dawna wbudowanymi w sterowniki AMD Catalyst. Różnica polega na tym, że obróbka (nie kodowanie) wideo z użyciem APU AMD to funkcja całkowicie programowa. Odpowiednie algorytmy są wykonywane przez uniwersalne maszyny obliczeniowe: procesor i jednostki obliczeniowe GPU. Intel Quick Sync wraz ze wspomnianymi nowymi funkcjami to rozwiązanie sprzętowe, w którym dane są przetwarzane przez wąsko wyspecjalizowane jednostki. Wyspecjalizowany układ jest bardziej energooszczędny od uniwersalnego, ale umie robić tylko jedno, ewentualnie zapewnia też możliwość skromnej konfiguracji. Złotego środka między tymi dwoma podejściami po prostu nie ma, cokolwiek by mówili specjaliści od reklamy. Jedno jest pewne: Haswellowy polepszacz wideo musi być dobrze udokumentowany i w jak największym stopniu konfigurowalny, jeśli ma być używany nie tylko na slajdach z prezentacji marketingowych. Quick Sync z procesorów Sandy Bridge i Ivy Bridge był krytykowany właśnie za słabą konfigurowalność i ścisłą reglamentację interfejsu programistycznego. Dopiero niedawno zaczęło się to poprawiać, gdy Intel udostępnił Media SDK 2013.
Podsumowanie: Haswell w skrócie
Pod względem mikroarchitektury, zarówno rdzeni x86, jak i układu graficznego, Haswell przynosi ewolucję Ivy Bridge. W ulepszaniu rdzeni x86 skupiono się na dalszym zwiększaniu wydajności pojedynczego wątku. Część z tych usprawnień przyspieszy istniejące programy:
- większa przepustowość pamięci podręcznych L1 i L2,
- trafniejsze przewidywanie skoków,
- szersze okno przekolejkowania rozkazów,
- dodatkowe jednostki wykonawcze do prostych operacji arytmetycznych,
- szybsze przełączanie między maszyną wirtualną a systemem gospodarzem.
Inne usprawnienia są związane z nowymi instrukcjami i będą korzystne tylko dla nowego oprogramowania. Instrukcje AVX2 pozwolą znacznie zwiększyć wydajność w obliczeniach na liczbach całkowitych, a mnożenie łączone z dodawaniem (FMA) przyspieszy arytmetykę na liczbach rzeczywistych. Do tego sprzętowa obsługa pamięci transakcyjnej powinna znacznie ułatwić pisanie rozbudowanych programów wielowątkowych.
Ulepszony układ graficzny będzie kompatybilny z DirectX 11.1 i OpenCL 1.2. Sprzętowy transkoder wideo zostanie wzbogacony o obsługę nowych formatów i dodatkowe funkcje polepszające jakość obrazu.
Gdzie ta rewolucja?
Największe i najbardziej znaczące zmiany w Haswellu nie dotyczą mikroarchitektury, ale są związane z jej fizyczną implementacją. Wiele technik i trików produkcyjnych zostanie w Haswellu pierwszy raz wykorzystanych na masową skalę. Jego najbardziej atrakcyjne cechy, czyli energooszczędność, zintegrowanie mostka południowego i znacznie wyższa wydajność GPU, są związane właśnie z techniką produkcji. Wszystkie te zagadnienia poruszymy już niebawem w drugiej części tego artykułu.