Procesory

HyperTransport 3.0. Nowe instrukcje. Przewidywanie rozgałęzień

Procesory z serii K10 w wersji desktopowej będą też korzystały z nowej technologii HyperTransport 3.0. Dzięki temu transfer danych pomiędzy procesorem, a pozostałymi podzespołami komputera będzie szybszy niż w dotychczasowych wersjach tej magistrali i wyniesie maksymalnie 10,4 GB / sekundę. Jest to wydajność ponad 2.5-krotnie wyższa od dotychczasowej wersji HT, z której można było wycisnąć co najwyżej 4 GB / sekundę przy taktowaniu jej zegarem 1 GHz. Dzięki szybszej magistrali zwiększy się skalowalność całego systemu. W rozwiązaniach serwerowych szybsze HT pojawi się w późniejszym terminie.

HyperTransport 3.0 to jednak nie tylko wyższa wydajność, a również oszczędność energii. Dzięki temu, że HT 3.0 pozwala procesorowi na bieżąco zmieniać taktowanie oraz liczbę bitów przesyłanych w jednym cyklu zegara po tej magistrali, w momencie gdy procesor nie jest obciążony, będzie redukował swój zegar, a przy okazji pobierał mniej energii.

Nowy HyperTransport jest zgodny wstecz. Dzięki temu procesory K10 będzie więc można instalować w płytach głównych z gniazdem AM2. Będą jednak działały z wolniejszym taktowaniem magistrali HT i obniżoną prędkością transferu.

Nowe instrukcje

Lista rozkazów w procesorach K10 została rozszerzona o kilka nowych instrukcji:

1. Rozszerzone operacje bitowe na rejestrach ogólnego przeznaczenia: LZCNT i POPCNT
2. Instrukcje przetwarzania rejestrów SSE, czyli zestaw SSE4a: EXTRQ, INSERTQ, MOVNTSS i MOVNTSD

Warto zauważyć, że rozszerzenie SSE4a to coś zupełnie innego niż wprowadzane przez Intela dodatki w postaci SSE4.1 i SSE 4.2. Na początku z pewnością spowoduje to mały zamęt i konieczność dostosowywania kompilatorów i oprogramowania do obsługi kolejnych rozszerzeń.

Warstwy wirtualizacji w architekturze x86

AMD rozwija też swoje technologie wirtualizacyjne. Wirtualizacja jest technologią umożliwiającą jednoczesne uruchamianie kilku systemów operacyjnych w tym samym czasie bez znaczącego spadku wydajności. Jednym z usprawnień K10 w sferze wirtualizacji jest implementacja technologii nested paging. Strony pamięci maszyn wirtualnych są w przypadku tej technologii zagnieżdżone w nadrzędnej tablicy stron. W sytuacji, gdy w buforze TLB nie znajdują się odniesienia do żądanej strony pamięci, procesor automatycznie wykonuje wszystkie wymagane przekształcenia tablic. Nested paging stanowi spory krok naprzód w stosunku do starszej technologii shadow paging, przy zastosowaniu której, operacje na tablicach stron pamięci maszyn wirtualnych pożerały sporą część zasobów procesora.


Przewidywanie rozgałęzień

Procesor, który wykonuje serię rozgałęziających się instrukcji powinien umieć przewidzieć najbardziej prawdopodobny przebieg operacji. Dzięki temu będzie w stanie uniknąć przerw w przetwarzaniu kodu. Jedną z większych bolączek architektury K8 była niezdolność przewidywania rozgałęzień pośrednich, które nie mają ustalonego adresu skoku.

W rozgałęzieniach tego rodzaju adres skoku obliczany jest na bieżąco podczas wykonywania programu. Zwykle pojawiają się one podczas interpretacji instrukcji warunkowych, bądź przy wywołaniach funkcji adresowanych i wirtualnych stosowanych w programowaniu obiektowym. K8 zawsze pobierał blok kodu, kierując się adresem ostatniego rozgałęzienia, a w przypadku jego zmiany opróżniał potok. Jeśli adres zmieniał się często, pomyłki przy zgadywaniu procesor wykonywał praktycznie bez przerwy. Pierwszym układem, w którym zastosowano moduł przewidywania dynamicznie zmieniających się adresów rozgałęzień pośrednich, był Pentium M. Brak podobnego algorytmu w K8 powodował, że procesor nie miał rewelacyjnej wydajności podczas wykonywania kodu obiektowego.

Na szczęście K10 może się pochwalić sporymi poprawkami na tym polu. W nowej architekturze zaimplementowano algorytm przewidywania adresów rozgałęzień warunkowych, który korzysta z 512-elementowej tablicy. Wzrosła też objętość rejestru pozwalającego określić typowy przebieg rozgałęzień na podstawie wyników uprzednio wykonanych instrukcji - z 8 do 12 bitów. Inżynierowie AMD zdecydowali się również na zwiększenie do 24 pozycji wielkości stosu adresów zwrotnych. Stos ten umożliwia szybkie pobranie adresu zwrotnego i kontynuowanie wykonywania kodu bez zwyczajowego oczekiwania na wynik funkcji RET.

Dzięki wprowadzonym ulepszeniom, K10 powinien radzić sobie ze złożonym kodem obiektowym dużo lepiej od poprzednika. Jak wypadnie w praktyce, okaże się po wykonaniu odpowiednich benchmarków.