Procesory

Nieudana transformacja

przeczytasz w 4 min.

W 2000 roku firma Intel postanowiła odejść od wywodzącej się od Pentium Pro wewnętrznej architektury RISC. Nowa wewnętrzna architektura o  nazwie NetBurst zadebiutowała w procesorach Pentium 4. Teoretycznie mikroarchitektura NetBurst została zaprojektowana pod kątem osiągania bardzo dużych częstotliwości zegara taktującego (między innymi wydłużono potok wykonawczy do 20 etapów, a w kolejnych odsłonach tej architektury – np. w jądrze o kodowej nazwie Prescott – liczył on nawet 31 etapów), w  praktyce okazało się, że w seryjnie produkowanych procesorach nigdy nie udało się uzyskać taktowania wyższego niż 4 GHz.

Wydłużony potok wykonawczy w architekturze NetBurst
Wydłużony potok wykonawczy w architekturze NetBurst

Dość szybko okazało się, że bez możliwości dalszego przyspieszania zegara mikroarchitektura NetBurst zaczęła wyraźnie przegrywać pod względem wydajności z konkurencyjnymi procesorami Athlon firmy AMD. Mimo to Intel konsekwentnie „obstawał” przy swojej technologii i ją rozwijał. W kolejnych wersjach Pentium 4 wprowadzono m.in. technologię współbieżnej wielowątkowości (HyperThreading), która pozwala na fizyczne, jednoczesne (równoległe) przetwarzanie dwóch wątków tego samego programu lub przetwarzanie dwóch programów naraz przez jeden rdzeń procesora, co znacząco zwiększało wydajność komputera. Pojawiła się też rozszerzona 64-bitowa architektura EM64T (Extended Memory 64 Technology).

Produkcji procesorów z architekturą NetBurst zaniechano dopiero w 2008 roku. W międzyczasie Intel wrócił do sprawdzonej architektury Pentium III, którą rozwinął i unowocześnił. Poligonem doświadczalnym dla niej były mobilne procesory Intel Core oraz Intel Core Duo, bazujące na jądrze o kodowej nazwie Yonah, na których przetestowano założenia nowej mikroarchitektury Intel Core Microarchitecture – m.in. współużytkowaną pamięć cache oraz strukturę wielordzeniową, wytwarzaną w jednym kawałku krzemu. Układy te stały się podstawą do zaprojektowania procesorów  Intel Core 2 Duo (nazwa kodowa Conroe), a później architektury Nehalem oraz kości Intel Core i3, i5 i i7 z najnowszym jądrem Sandy Bridge.

Kolejna rewolucja – AMD64 i EM64T

W 2003 roku, wraz z wprowadzeniem na rynek przez firmę AMD układów  Opteron (serwery) oraz Athlon 64 na rynku zadebiutowało kolejne rozszerzenie programowej architektury x86 – tym razem do 64-bitów. Co ciekawe, było to pierwsze w historii rozszerzenie modelu programowego, które opracowane zostało przez firmę AMD, a nie jak dotąd przez Intela – choć, gwoli ścisłości, trzeba zaznaczyć, że obie firmy nad nim pracowały wspólnie, jednak to AMD zdecydowała się jako pierwsza je zaimplementować w swoich produktach. 

Athlony 64 i serwerowe Opterony wykorzystywały mikroarchitekturę K8 znaną też pod nazwą Hammer – wymienione procesory wykorzystywały jądra odpowiednio o kodowych nazwach Clawhammer i Sledgehammer. Mikroarchitektura Hammer wykorzystywała 64-bitowy model programistyczny o  nazwie AMD64, nazywany też x86-64, a w wypadku układów Intela znany jako EM64T, który jest prostym rozwinięciem dotychczas stosowanej w  procesorach x86 32-bitowej architektury IA-32.

Rozwinięcie modelu programistycznego x86-64 polega na rozszerzeniu zestawu instrukcji x86 o rozkazy operujące na 64-bitowych operandach. Zwiększona została liczba rejestrów ogólnego przeznaczenia z ośmiu do szesnastu. Dodatkowo liczba 128-bitowych rejestrów SSE używanych w  instrukcjach SIMD również zwiększona została z ośmiu do szesnastu. Powiększenie liczby widocznych dla programisty rejestrów pozwoliło na około 5-15% zwiększenie wydajności.

W architekturze x86-64 zwiększono liczbę rejestrów, zarówno ogólnego przeznaczenia, jak i rejestrów SSE.
W architekturze x86-64 zwiększono liczbę rejestrów, zarówno ogólnego przeznaczenia, jak i rejestrów SSE

Jedną z przyczyn, która spowodowała pojawienie się potrzeby rozszerzenia możliwości architektury x86 było coraz większe zapotrzebowanie programów na dostępną w systemie pamięć operacyjną. 32-bitowa architektura x86 pozwala na zaadresowanie 4 GB pamięci, z  czego dla aplikacji - w zależności od systemu operacyjnego - dostępnych jest najczęściej 2 GB lub 3 GB. Architektura x86-64 definiuje jednak nie 64-bitową przestrzeń adresową, ale została ona „przycięta” do 48 bitów – niestety w aktualnych implementacjach architektury x86-64 szyna danych została jeszcze bardziej ograniczona – ma 40-bitów. Pozwala ona obsłużyć 1 TB fizycznej i 280 TB wirtualnej przestrzeni adresowej.

W architekturze x86-64 przewiduje dwa główne tryby pracy – tryb Long i  tryb Legacy. Pierwszy z nich jest podstawowym trybem działania procesora w architekturze x86-64. Jest to kombinacja 64-bitowego trybu pracy i  zgodnego wstecz trybu 32-bitowego. W trybie Long 64-bitowy system operacyjny może uruchamiać zarówno programy 64-, jak i aplikacje 32-bitowe oraz programy 16-bitowe – możliwość uruchamiania tych ostatnich zależy jedynie od mechanizmów zawartych w systemie operacyjnym, a nie od samego procesora.

Drugi z trybów – tryb Legacy, jest używany przez 16-bitowe i 32-bitowe systemy operacyjne – w tym 32-bitową wersję systemu Windows 7. Jak można się domyślić mogą być w nim używane jedynie programy 16- i 32-bitowe – nie ma w tym trybie możliwości uruchomienia programów 64-bitowych. Procesor zgodny z architekturą x86-64 po włączeniu zasilania jest uruchamiany w trybie Legacy, a mówiąc ściślej w trybie rzeczywistym 8086, i do trybu Long musi zostać przełączony przez uruchomiony program (system operacyjny).

Oczywiście również Intel dysponuje obecnie procesorami 64-bitowymi zgodnymi z architekturą x86-64. Są to układy ze wspomnianą wyżej technologią EM64T (Extended Memory 64 Technology). Projekt wdrożenia przez Intela 64-bitowych rozszerzeń x86-64 znany pod kodową nazwą Yamhill ogłoszony został w lutym 2004 roku na konferencji IDF. Pierwszy procesor Intela z rozszerzeniami EM64T pojawił się w czerwcu 2004 roku – był to serwerowy Xeon z rdzeniem Nocona, który obsługiwał 64-bitowe instrukcje nieoficjalnie. Domowo-biurowe procesory z rdzeniem Prescott, produkowane od lutego 2004 roku, miały tę technologię zablokowaną. Oficjalna premiera technologii EM64T nastąpiła w 2005 roku, wraz z  premierą procesorów Pentium 4 z jądrem Prescott-2M. Trzecim producentem procesorów zgodnych z programową architekturą x86-64 jest tajwańska firma VIA – procesory począwszy od modelu VIA Nano (nazwa kodowa Isaiah) z 2008 roku. 

Wprowadzenie rozszerzeń x86-64 to nie ostatnia ważna zmiana w modelu programowym x86. Od czasu jej wprowadzenia pojawiły się bowiem kolejne rozszerzenia modelu programowego, jak następne wersje SSE (ostatnia z  nich to SSE 4.2), rozbudowujące listę instrukcji oraz, przede wszystkim, wektorowe rozszerzenie AVX (Advanced Vector Extensions). W AVX wprowadzono 256-bitowe rejestry, które są dwa razy większe niż wykorzystywane w rozszerzeniach SSE. Nowych rejestrów jest w sumie 16 (osiem dotychczasowych rejestrów SSE wydłużono ze 128 do 256 bitów oraz dodano osiem nowych) i noszą one nazwy YMM0...YMM15. Dodano 19 rozkazów  działających wyłącznie na rejestrach YMM oraz czteroargumentowe rozkazy akumulujące wyniki mnożenia wektorów liczb zmiennoprzecinkowych (12 instrukcji), a także sześć rozkazów wspomagających szyfrowanie AES. W  sumie zestaw rozkazów w najnowszych procesorach zgodnych z  architekturą x86 liczy obecnie 678 instrukcji.

Rozszerzenie rejestrów w modelu programowym x86 związanym z wprowadzeniem instrukcji AVX
Rozszerzenie rejestrów w modelu programowym x86 związanym z wprowadzeniem instrukcji AVX