Alpha HOWTO Autor: Neal Crook neal.crook@reo.mts.digital.com, Digital Equipment (edycja: David Mosberger davidm@azstarnet.com) v0.11, 6 Czerwca 1997 Wersja polska: Leszek Urbańński tygrys@fidonet.org.pl v0.1, 22 Lipca 1998 Ten dokument jest ogólnym przedstawieniem istniejących procesorów Alpha, chipsetów do nich, oraz systemów opartych na tych procesorach. Opisuję sprzęt, a nie oprogramowanie, ukazując mój obszar doświad czenia. Chociaż jestem pracownikiem Digital Equipment Corporation, nie jest to oficjalna wypowiedź Digitala, a wszystkie opinie tu wyrażone są moimi opiniami, nie zaś Digitala. Dokument został napisany w stan dardzie ISO-8859-2. Oryginał tego dokumentu znajduje się pod adresem http://www.azstarnet.com/~axplinux/. ______________________________________________________________________ Table of Contents: 1. Co to jest Alpha 2. Czym jest Digital Semiconductor 3. Procesory Alpha 4. Wydajność 21064 i 21066 5. Kilka uwag o zegarach 6. Chipsety 7. Płyty główne 8. O bajtach 9. PALcode 10. Przenoszenie systemu na Alphę 11. Więcej informacji 12. Bibliografia 13. Od tłumacza ______________________________________________________________________ 1. Co to jest Alpha Alpha jest 64-bitową architekturą RISC Digitala. Projekt Alpha został rozpoczęty w połowie 1989 roku, jego celem było stworzenie wysokowydajnej alternatywy dla użytkowników VAX'a. Nie była to pierwsza architektura RISC zaprojektowana przez Digitala, ale jako pierwsza osiągnęła sukces rynkowy. Kiedy Digital ogłosił wyprodukowanie Alphy w marcu 1992, zdecydował się wejść na rynek półprzewodników, sprzedając mikroprocesory Alpha. Alpha jest czasami nazywana Alphą AXP, z tajemniczych powodów, które nie są warte wyjaśniania. Wystarczy powiedzieć, że jest to jedno i to samo. 2. Czym jest Digital Semiconductor Digital Semiconductor (DS) jest oddziałem firmy Digital Equipment Corporation (Digital - nie lubimy nazwy DEC), który sprzedaje półprzewodniki. Do produktów Digitala zaliczają się procesory (CPU), chipsety, mostki PCI-PCI i układy peryferyjne PCI dla telekomunikacji i multimediów. 3. Procesory Alpha Obecnie istnieją dwie generacje rdzenia CPU (core), które są implementacją architektury Alpha: ˇ EV4 ˇ EV6 Są różne opinie na temat znaczenia ,,EV'' (uwaga D.M.: prawdziwa odpowiedź to oczywiście ,,Electro Vlassic" ``[1]''), numer odpowiada generacji technologii CMOS Digitala, w której został wykonany rdzeń. A więc EV4 był pierwotnie zaimplementowany w CMOS4. Z biegiem czasu, procesor zwiększa swoją wydajność, poprzez optyczne pomniejszenie do następnej generacji procesu CMOS. EV45 jest więc rdzeniem EV4 zaimplementowanym w technologii CMOS5. Istnieje duża różnica pomiędzy dostosowywaniem projektu do danej technologii, a implementowaniem go od podstaw w tej technologii (nie będę się jednak teraz w to wgłębiał). Jest też parę innych symboli: CMOS4S (pomniejszenie CMOS4) i CMOS5L. Prawdziwi technofile będą chcieli wiedzieć, że CMOS4 jest technologią 0.75 mikronową, CMOS5 jest technologią 0.5 mikronową, a CMOS6 0.35 mikronową. A oto konkretne procesory z różnymi rdzeniami: 21064-150,166 EV4 (pierwotnie), EV4S (obecnie) 21064-200 EV4S 21064A-233,275,300 EV45 21066 LCA4S (rdzeń EV4, z jednostką zmiennoprzecinkową EV4) 21066A-233 LCA45 (rdzeń EV4, ale z jednostką zmiennoprzecinkową EV45) 21164-233,300,333 EV5 21164A-417 EV56 21264 EV6 Rdzeń EV4 jest dwuinstrukcyjny (dual-issue), znaczy to, że może wykonać dwie instrukcje na jednostkę zegara, posiada superpotokowy rdzeń z jednostką liczb całkowitych (superpipelined core with integer unit), jednostkę zmiennoprzecinkową i przewidywanie instrukcji (branch prediction). Jest w pełni krosowalny (bypassed), korzysta z technologii 64-bitowej i ośmiokilobajtowych pamięci cache, po jednej dla Instrukcji i Danych. Jednostki cache obsługują technologię ,,write-through'' - nigdy nie zostają ,,zanieczyszczone''. Rdzeń EV45 ma parę usprawnień w stosunku do EV4 - usprawniono trochę jednostkę zmiennoprzecinkową i dodano 16KB cache (po jednym dla Instrukcji i Danych, obsługuje parzystość). (uwaga D.M.: w wiadomości email Neil Crook zauważył, że zmiany w jednostce FPU (jednostka zmiennoprzecinkowa, ang. floating point unit) poprawiają wydajność podzielnika. Podzielnikowi FPU EV4 dzielenie o pojedyńczej precyzji zabiera 34 cykle zegara, a dzielenie o podwójnej precyzji 63 cykle (niezależnie od danych). Dla porównania FPU EV45 zabiera to zwykle 19 cykli (do 34) i 29 cykli (do 63) (zależnie od danych).) Rdzeń EV5 jest czteroinstrukcyjny, superpotokowany, w pełni krosowalny itp. Posiada 8 kilobajtowe pamięci cache, po jednej dla I i D. Cache te obsługują metodę ,,write-through''. Ma też 96 kilobajtowy trójdrożny cache drugiego poziomu Scache (w procesorze), używający metody ,,write-back'' (może zostać zanieczyszczony). Całkowity wzrost wydajności EV4->EV5 jest większy niż wzrost spowodowany samym zwiększeniem szybkości zegara. Została też ulepszona mikroarchitektura, dla zmniejszenia opóźnień producenta/klienta na niektórych trasach danych. EV56 posiada mikroarchitekturę podobną do EV5, jednakże dodaje nowe instrukcje dla 8 i 16-bitowych obciążeń (zobacz sekcję ,,``O bajtach''''. Instrukcje te znajdują zastosowanie głównie w sterownikach urządzeń. Rdzeń EV56 jest zaimplementowany w CMOS6, który jest technologią 2.0V. 21064 został ukończony w marcu 1992. Używa rdzenia EV4, ze 128-bitową szyną danych. Szyna obsługuje ,,łatwe'' podłączenie zewnętrznego cache'u drugiego poziomu, z rozmiarem bloku 256 bitów. Zegar Bcache jest konfigurowalny całkowicie programowo. 21064 może też być skonfigurowana do używania 64-bitowej szyny zewnętrznej (nie jestem jednak pewien, czy jakakolwiek płyta główna dostępna w sprzedaży używa tego trybu). 21064 nie wymusza żadnego sposobu używania Bcache'u, jednakże zazwyczaj jest on skonfigurowany jako write-back cache. 21064 zawiera obejścia pozwalające zewnętrznemu sprzętowi utrzymać zgodność cache'u z Bcache'm i wewnętrzną pamięcią podręczną, ale nie polecam tego sposobu. 21066 używa rdzenia EV6; zawiera wewnętrzny kontroler pamięci oraz mostek PCI. Dla oszczędzania wyprowadzeń procesora, kontroler pamięci ma 64-bitową szynę danych (ale wewnętrzne pamięci podręczne mają rozmiar blokowy 256 bitów, tak jak 21064, a więc wypełnienie bloku zajmuje 4 cykle zegara szyny). Kontroler pamięci obsługuje zewnętrzny Bcache i zewnętrzne DRAM'y. Częstotliwość zegara Bcache i DRAM'ów jest konfigurowana całkowicie programowo, może być dostosowana do rozdzielczości cyklu zegara CPU. Czterocyklowy proces wypełniania bloku cache nie jest taki zły, na jaki wygląda, ponieważ dostęp do DRAM'u działa w trybie stronicowania. Niestety, kontroler pamięci nie obsługuje żadnego z nowych ezoterycznych DRAM'ów (SDRAM, EDO lub BEDO), ani synchronicznych RAM pamięci podręcznej. Interfejs szyny PCI jest w pełni zgodny z normą rev2.0 i działa na częstotliwości 33MHz. 21164 ma 128-bitową szynę danych; obsługuje odczyt rozdzielony (split read), do 2 odczytów na raz (pozwala to na stuprocentowe wykorzystanie szyny danych w idealnych warunkach - można teoretycznie przesyłać 128 bitów danych w każdym cyklu zegara szyny). 21164 pozwala na łatwe podłączenie zewnętrznego cache'u trzeciego poziomu (Bcache), pozwala na synchronizację zewnętrznych systemów ze wszystkimi pamięciami podręcznymi. Rozwiązania wieloprocesorowe są więc łatwe do zaimplementowania. 21164A został ukończony w październiku 1995. Używa rdzenia EV56; jego wyprowadzenia są kompatybilne z 21164, jednak wymaga on oddzielnych szyn zasilających - wszystkie piny zasilania pobierające +3.3V w 21164 zostały podzielone na dwie grupy; jedna pobiera 2.0V dla rdzenia CPU, a druga 3.3V dla sekcji I/O (wejścia-wyjścia). Inaczej niż w innych implementacjach, wyprowadzenia 21164 nie tolerują pięciu woltów. Rezultatem tych zmian jest niekompatybilność płyt głównych 21164 z procesorami 21164A (zauważ jednak, że zaprojektowanie płyty 21164A obsługującej 21164 nie byłoby trudne). 21164A ma też kilka nowych wyprowadzeń dla obsługi nowych 8 i 16-bitowych obciążeń. Polepsza też obsługę synchronicznych SRAM'ów do implementacji zewnętrznego Bcache. 4. Wydajnośśćć 21064 i 21066 21064 i 21066 mają ten sam rdzeń (EV4). Jeżeli ten sam program zostanie uruchomiony na 21064 i 21066, przy takiej samej szybkości zegara, różnica w wydajności jest tylko rezultatem większej przepustowości Bcache/pamięci. Każdy wątek kodu, mający duży współczynnik współpracy z wewnętrznymi pamięciami cache, będzie wykonywał się tak samo na obu jednostkach. Istnieją dwa główne ograniczniki wydajności: 1. Kod który wykonuje dużą liczbę zapisywań. Chociaż 21064 i 21066 mają bufory zapisu, żeby pokryć niektóre opóźnienia to i tak kod który intensywnie zapisuje będzie zdławiony przez przepustowość zapisu na szynie systemowej. To zjawisko zwiększa się, ponieważ wewnętrzna pamięć podręczna cache działa w trybie ,,write- through''. 2. Kod, który chce traktować liczby zmiennoprzecinkowe (float) jako całkowite (integer). Architektura Alphy nie pozwala na przysyłanie w trybie rejestr-rejestr z rejestrów całkowitych na zmiennoprzecinkowe. Taka konwersja musi być dokonana w pamięci (i dlatego, ponieważ wewnętrzna pamięć podręczna działa w trybie w-t, w Bcache). (uwaga D.M.: wygląda na to, że zarówno EV4, jak i EV45 mogą wykonać konwersj...
Porozmawiajmy.TV