DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

20.04.2002 Michaił Kuźminski

Artykuł analizuje architekturę x86-64 zaproponowaną przez AMD i omawia niektóre jej zalety i wady w porównaniu z innymi architekturami 64-bitowymi, głównie Intel / HP IA-64. Podano krótkie omówienie mikroarchitektury procesorów AMD Hammer, w których architektura x86-64 zostanie zaimplementowana po raz pierwszy. Wydajność Hammera porównuje się z innymi wysokowydajnymi procesorami dzisiaj i jutro.

Jeśli wszystkie wydajne architektury RISC mikroprocesorów wydane od późnych lat 90-tych są 64-bitowe (Сompaq / DEC Alpha, SGI / MIPS R1x000, IBM Power, HP PA-8x00, Sun UltraSPARC), to główne architektury CISC (Intel x86, IBM S / 390) przechodzą z 32 do 64 bitów właśnie teraz (IA-64, IBM z / Architecture).

Przejście z S / 390 na z / Architecture wygląda na dość naturalne rozszerzenie, podczas gdy przejście z x86 (obecnie IA-32) na IA-64 oznacza w rzeczywistości całkowitą zmianę systemu instrukcji. Myślę, że wynika to z faktu, że x86 rozpoczął swój historyczny rozwój z systemami 8, a następnie 16-bitowymi. Dlatego zestaw instrukcji, który pozostawał względnie statyczny przez wiele lat ze względu na kompatybilność, z czasem stał się raczej „nienaturalny” z punktu widzenia innych 32-bitowych procesorów.

Tak więc, jeśli IBM ewoluował do platformy 64-bitowej, przejście z x86 na IA-64 jest rewolucją; zgodność jest zapewniona tylko poprzez emulację sprzętową. Nie jest jeszcze jasne, czy Intel chce w przyszłości całkowicie zrezygnować z IA-32 na rzecz IA-64, ale fakt, że całe oprogramowanie dla IA-64 musi być co najmniej ponownie przetłumaczone - nie mówiąc o dalszej optymalizacji dla IA-64 - wydaje się jasne ... Oczywiście przejście na platformę IA-64 zajmie dużo czasu i będzie bardzo kosztowne.

AMD poszło zupełnie inną drogą. Zaproponowała własną modernizację architektury x86, która (podobnie jak w przypadku IBM) jest naturalnym ewolucyjnym rozwinięciem - tak jak kiedyś x86 zostało zaktualizowane z 16 do 32 bitów.

Dlaczego 32-bitowe platformy CISC dopiero teraz stają się 64-bitowe, chociaż zapotrzebowanie na aplikacje 64-bitowe wzrosło już kilka lat temu? Oprócz zauważonej już złożoności przejścia (oczywistej w przypadku IA-64 i z / Architecture), należy również zwrócić uwagę na gwałtowne obniżenie kosztów pamięć o dostępie swobodnym jednocześnie zwiększając pojemność modułów pamięci. W rezultacie limit pojemności 4 GB dla systemów 32-bitowych jest już dość osiągalny w nowoczesnych komputerach PC. Dlaczego więc nie zwiększyć wydajności serwera, dodając więcej pamięci, skoro nie jest to tak drogie?

Architektura X86-64

Wydaje się, że różnice między architekturą x86-64 a IA-32 są nawet mniejsze niż różnice między IBM z / Architecture a S / 390. AMD stara się podkreślić, że wprowadzone zmiany są minimalne, choć analiza pełny opis pozwala zidentyfikować wystarczającą liczbę drobnych niuansów dotyczących jednak przede wszystkim twórców systemu oprogramowaniea nie aplikacje.

Naprawdę nie ma tak wielu kluczowych zmian w x86-64 w porównaniu z obecnym stanem IA-32 i są one w pewnym sensie podobne do tych, które zostały wprowadzone podczas przejścia z 16-bitowej na 32-bitową architekturę x86. Te innowacje obejmują:

  • 64-bitowe adresy wirtualne (w określonej implementacji możliwa jest mniejsza głębia bitowa);
  • „płaska” (płaska) przestrzeń adresowa z pojedynczą przestrzenią kodów, danych i stosu;
  • 64-bitowy licznik poleceń (RIP);
  • tryb adresowania względem licznika poleceń;
  • rejestry rozszerzeń ogólny cel (liczba całkowita) do 64 bitów;
  • dodanie 8 nowych rejestrów ogólnego przeznaczenia (R8-R15);
  • dodanie 8 kolejnych rejestrów SSE XMM8-XMM15 o 128 bitowej głębi (odpowiada rozszerzeniu SSE2 zaproponowanemu przez firmę Intel).
Postać: 1. Przykład rozbudowy rejestrów ogólnego przeznaczenia

Dodatkowe rejestry i „wskazówki” dotyczące rozmiarów danych są wprowadzane jako przedrostek polecenia. Zestaw rejestrów głównych x86-64 pokazano na rys. 1. Rejestry są 64-bitowe, z wyjątkiem 32-bitowego rejestru EFLAGS, 128-bitowych rejestrów HMM i 80-bitowych rejestrów zmiennoprzecinkowych ST. Architektura x86-64 obejmuje między innymi rozszerzenia IA-32 SSE2 wprowadzone w Pentium 4.

Na rys. 1 pokazuje, jak nowe rejestry 64-bitowe są rozszerzone w stosunku do rejestrów 32-bitowych w IA-32. Rejestr A jest adresowany jako AX dla operacji 16-bitowych, EAX dla operacji 32-bitowych i RAX dla operacji 64-bitowych. Podczas wykonywania operacji 32-bitowych, w których rejestr liczbowy służy jako rejestr wynikowy, wartości 32-bitowe są uzupełniane zerami do wartości 64-bitowych. Operacje na 8- i 16-bitowych rejestrach całkowitych zachowują najważniejsze bity niezmienione.

Aby pracować z 64-bitowym adresowaniem w x86-64, wprowadzono tryb Long Mode (nazwijmy go „trybem rozszerzonym”). Tryb pracy jest ustawiany przez bit sterujący LMA (Long Mode Active), który jest ładowany, gdy mikroprocesor przechodzi w tryb rozszerzony. W trybie rozszerzonym rejestry segmentowe ES, DS, FS, GS, SS są ignorowane. Rejestr CS (deskryptor segmentu kodu) zawiera bity określające tryby pracy mikroprocesora.

W x86-64 tryb rozszerzony ma dwa „tryby podrzędne”: tryb 64-bitowy i tryb zgodności. Tryb zgodności zapewnia zgodność binarną z 16-bitowymi i 32-bitowymi trybami x86. Wybór podtrybu jest kontrolowany przez bit CS.L. Jeśli ustawiona na 0 (tryb zgodności), 64-bitowy system operacyjny działający w trybie LMA może uruchamiać starsze 16-bitowe i 32-bitowe aplikacje x86. Bit CS.D jest odpowiedzialny za wybór rozmiaru operandu.

Domyślnie w trybie 64-bitowym (LMA bit cocked, CS.L \u003d 1, CS.D \u003d 0) używane są adresy 64-bitowe i operandy 32-bitowe. Używając prefiksów poleceń, możesz zmienić rozmiar operandu (ustawić go na 64 lub 16 bitów), a także zmienić rozmiar adresu (ustawić go na 32 bity). Tabele 1 i 1 wskazują główne typy trybów procesora i tryby działania systemu operacyjnego i aplikacji.

Dane te pokazują, że procesory o architekturze x86-64 mogą współpracować zarówno z istniejącymi 16-bitowymi i 32-bitowymi, jak i nowymi 64-bitowymi systemami operacyjnymi. W tym drugim przypadku, w trybie zgodności, możliwe jest jednoczesne wykonywanie aplikacji 16-bitowych i 32-bitowych poprzez ustawienie odpowiednich bitów w poszczególnych segmentach kodu. Jednak aplikacje 32-bitowe mogą używać pierwszych 4 GB pamięci wirtualnej.

Aby poznać specyfikę mikroprocesorów o architekturze x86-64, konieczne jest przeanalizowanie rejestrów EAX / EBX / ECX / EDX, w których umieszczane są wyniki polecenia CPUID (wywołując go, tak jak poprzednio, wstaw 8000_0000h w EAX). Jeśli 29. bit w EAX to 1, mikroprocesor jest w trybie rozszerzonym.

W x86-64 jest wiele interesujących ulepszeń, szczególnie w przypadku zadań programowania systemowego. Jako przykład zauważamy wprowadzenie nowego rejestru priorytetów zadań TPR, który służy do przyspieszenia przetwarzania przerwań. Aby uzyskać szczegółowe informacje, zapoznaj się z opisem x86-64.

Mikroarchitektura młota

Procesor Athlon należy do siódmej generacji architektury x86 realizowanej przez AMD. Pierwsze procesory, w których zastosowano architekturę x86-64, nosiły nazwę kodową Hammer i reprezentują ósmą generację procesorów x86 firmy AMD. Utrzymała się w nich tendencja do pewnego odchodzenia od zestawu instrukcji procesorów AMD od pełnej tożsamości z Intelem x86. Jeśli jednak wcześniej różnice były związane z wprowadzeniem nowych poleceń 3DNow! Przez AMD, to teraz Hammer, w przeciwieństwie do x86, staje się 64-bitowy. Hammer wykorzystuje 64-bitowe wewnętrzne „szyny” używane do komunikacji. Wirtualna przestrzeń adresowa jest 48-bitowa, a fizyczna przestrzeń adresowa - 40-bitowa.

Cele AMD przy tworzeniu tej rodziny mikroprocesorów, oprócz oczywistego celu wspierania x86-64, były następujące:

  • jeśli to możliwe, minimalny wzrost obszaru mikroukładu;
  • zapewnienie możliwości dalszego, niezakłóconego wzrostu częstotliwości zegara procesora na obecnym poziomie rozwoju technologii;
  • zapewniając jednocześnie przyspieszenie dla aplikacji 64-bitowych i 32-bitowych. Ogólną ideę mikroarchitektury Hammera przedstawiono na rys. 2.

Dzisiejsze najpotężniejsze procesory RISC zwykle integrują pamięć podręczną L2 o dużej pojemności z mikroprocesorem. Zarówno Intel, jak i AMD w swoich wysokowydajnych procesorach zmniejszyły ostatnio pojemność pamięci podręcznej L2 z 512 kB do 256 kB, jednocześnie integrując ją z procesorem. Ale w Pentium 4 Northwood programiści Intela ponownie rozszerzyli pamięć podręczną L2 do 512KB. Nie ma odpowiednich oficjalnych danych na temat Hammera; jednak pojemność pamięci podręcznej L2 może znacznie wpłynąć na jej wydajność. Według niektórych analityków pojemność pamięci podręcznej L2 w starszych modelach Hammera będzie czterokrotnie większa niż w nowoczesnych modelach Athlona.

Bufory szybkiego przekazywania w tym procesorze zostały ulepszone w porównaniu z Athlonem. Hammer Level 1 I-TLB ma pojemność 40 linii (o 16 linii więcej niż poprzednio) i jest w pełni asocjacyjny. TLB poziomu 1 mają te same cechy. Oba TLB obsługują strony pamięci 4KB, 2 MB i 4 MB.

I-TLB drugiego poziomu, podobnie jak D-TLB drugiego poziomu, zawierają po 512 linii (dwa razy więcej niż w Athlonie) i są częściowo asocjacyjne 4-kanałowe. Jak wskazano w TLB, opóźnienia są zmniejszone w porównaniu z Athlonem. Ponadto możliwość rozdzielenia TLB między kilka procesów jest zaimplementowana sprzętowo (służy do tego specjalny „filtr podpalenia”).

Oczywiście wzrost pojemności TLB i obsługa stron pamięci duże rozmiary są przeznaczone do użytku w systemach o dużej pojemności pamięci; jest to naturalne w przypadku aplikacji 64-bitowych. Z kolei możliwość dzielenia TLB może poprawić wydajność wielozadaniowych systemów operacyjnych w aplikacjach serwerowych.

Tradycyjnym kierunkiem doskonalenia nowoczesnych mikroprocesorów jest poprawa dokładności przewidywania gałęzi. Hammer ma 2-kilometrową tablicę adresów skoku, a także globalną tablicę historii skoków zawierającą 16-kilobitowe 2-bitowe liczniki (4 razy więcej niż w Athlonie). Wreszcie, pojemność stosu adresów zwrotnych wynosi 12 linii.

Ważną funkcją zwiększającą wydajność jest integracja kontrolera RAM z Hammerem. Pozwala to zarówno zwiększyć przepustowość, jak i zmniejszyć opóźnienie. Te cechy będą się automatycznie poprawiać wraz ze wzrostem częstotliwości procesora. Ta funkcja jest unikalna dla architektury x86; Compaq w swoim najnowsze procesory Alpha EV7 podąża podobną drogą.

Kontroler pamięci będzie miał 8- lub 16-bajtowy interfejs do pamięci DDR. W tym drugim przypadku nadchodzi Dwukanałowa pamięć DDR, 4 zarejestrowane moduły DIMM na kanał. AMD obiecuje obsługę zarówno zarejestrowanych, jak i niebuforowanych modułów DIMM dla pamięci DDR PC1600 / PC2100 / PC2700. Podczas używania PC2700 w wersji dwukanałowej wydajność RAM osiągnie 5,3 GB / s. Dla porównania procesor Intel McKinley, który wymaga zwiększonej przepustowości pamięci ze względu na architekturę IA-64, będzie wyposażony w magistralę systemową tylko nieco szybciej - 6,4 GB / s.

Wykorzystanie technologii HyperTransport przy budowaniu systemów opartych na Hammerze zredukuje opóźnienia RAM wraz ze wzrostem częstotliwości zegara mikroprocesora, automatycznie zwiększy przepustowość tzw. Sond snoop przy zachowaniu spójności cache w systemach wieloprocesorowych ze wzrostem częstotliwości, a na koniec przeskaluje przepustowość i pojemność pamięci RAM wraz ze wzrostem liczby procesorów w systemie.

Przedni koniec potoku obejmuje pobieranie i dekodowanie instrukcji (ryc. 2). Logika działania tych etapów w Hammerze stała się bardziej skomplikowana, zwiększył się stopień pakowania instrukcji wysyłanych przez dekodery do planistów. W porównaniu z Athlonem, długość tej części potoku wzrosła o 2 etapy, tak że całkowita długość potoku Hammer integer wynosi 12, a potoku zmiennoprzecinkowego 17 stopni. Zdaniem twórców powinno to przyczynić się do płynnego wzrostu częstotliwości taktowania procesora wraz z poprawą technologii wytwarzania. Początkowy plan zakłada użycie technologii krzemu na izolatorze o grubości 0,13 mikrona; w drugiej połowie 2003 r. planowane jest przejście do 0,09 mikrona.

Należy zauważyć, że nie ma oficjalnych danych na temat obszaru zajmowanego przez Hammera. Tymczasem pojawiły się doniesienia, że \u200b\u200bprocesor ClawHammer będzie miał powierzchnię zaledwie 105 mm 2, podczas gdy Athlon / Palomino, wykonany tą samą technologią na 0,13 mikrona, będzie miał 80 mm 2. Dla porównania, obszar McKinleya, sądząc po danych przedstawionych przez Intela na międzynarodowej konferencji ISSCC 2002, wynosi 464 mm2.

Wady i zalety długich rurociągów są dobrze znane: łatwiej jest zwiększyć częstotliwość taktowania, ale jest więcej strat na przepełnieniach rurociągu, w szczególności w przypadku błędnego przewidzenia odgałęzienia. Interesujące jest porównanie długości rurociągu Hammera z innymi nowoczesnymi mikroprocesorami Intela. Pentium 4, który osiągnął rekordową częstotliwość taktowania 2,2 GHz, podwoił długość potoku w porównaniu z Pentium III wykorzystującym technologię HyperPipeline do 20 stopni. Miał ten sam cel, pozwalając na niezakłócony wzrost szybkości zegara; Intel mówi o 10 GHz w latach 2005-2006. Z kolei McKinley zredukował długość rurociągu do 8 etapów w porównaniu z 10 w Itanium, ale jego oczekiwana częstotliwość to 1 GHz.

Jak wiadomo, wydajność zależy nie tylko od częstotliwości zegara, ale także od liczby instrukcji faktycznie wykonywanych na cykl zegara. AMD twierdzi, że w Hammerze liczba ta wzrośnie. Ale na jakiej częstotliwości Hammer będzie działał, nie jest podawany; możemy założyć, że liczba ta wyniesie około 2 GHz.

Systemy budowlane oparte na Hammerze

Przeanalizowaliśmy główne cechy mikroarchitektury Hammer, z wyjątkiem wykorzystania technologii HyperTransport. Jest używany w Hammerze zarówno do łączenia systemu I / O, jak i do organizowania komunikacji międzyprocesorowej. W rzeczywistości, dzięki wbudowanemu kontrolerowi pamięci RAM Hammera i zastosowaniu technologii HyperTransport, Hammer integruje podstawowe funkcje chipsetu (a dokładniej mostek północny).

Sama technologia HyperTransport jest rozwijana przez konsorcjum o tej samej nazwie, założone przez AMD, Sun Microsystems, Cisco Systems, Nvidia, Transmeta i Apple Computer. Myślę, że potrzeby rozwoju takiej technologii były podyktowane przede wszystkim pojawieniem się wąskich gardeł w systemach I / O w komputerze PC i generalnie magistrale PCIktórych charakterystyka wydajnościowa nie spełnia wymagań dzisiejszych wysokowydajnych kart sieciowych i dysków twardych we / wy.

Kanały HyperTransport z tymi samymi pinami co PCI zapewniają znacznie wyższą przepustowość, z wartością szczytową 3,2 GB / s. Kanały HyperTransport mają 16 bitów szerokości i zapewniają 1,6 miliarda transmisji na sekundę w każdym kierunku. HyperTransport umożliwia połączenia punkt-punkt z pełnym dupleksem i dzielonym przetwarzaniem transakcji. Takie cechy tej technologii pozwalają na wykorzystanie jej do organizacji komunikacji między procesorami; w tym drugim przypadku, w przeciwieństwie do I / O, opcja HyperTransport jest używana ze spójnością pamięci podręcznej.

Postać: 3. Schemat budowy systemów 4-procesorowych w oparciu o Hammer

Procesory Hammer mają po trzy porty dla kanałów HyperTransport (rys. 3) oraz port do kontrolera pamięci RAM. Dlatego procesor zawiera przełącznik XBOX, który kieruje polecenia i dane między tymi portami a interfejsem żądań systemu (kolejka SRQ). Ta kolejka ma 24 linie, a kolejka do kontrolera DRAM (Memory Command Queue) ma 20 linii. Do komunikacji z podsystemem I / O w Hammerze używany jest Host Bridge, a następnie pozostałe dwa kanały HyperTransport są używane w komunikacji międzyprocesorowej.

Jedyną rzeczą, która nie jest wbudowana w Hammer, jest interfejs AGP; dlatego chip, który zajmuje miejsce mostka północnego (rys. 4), musi obsługiwać ten interfejs. Ma to być AGP 8X.

Most południowy jest połączony z tym mikroukładem. Chociaż AMD tradycyjnie oferuje chipset dla swoich nowych procesorów i oczywiście zrobi to dla firmy Hammer, Nvidia i VIA Technologies są już świadome rozwoju południowego mostka dla tego procesora. Ponadto w systemach wieloprocesorowych oczekuje się „bramy” między HyperTransport i PCI-X; możliwe jest użycie podobnych środków dla innych standardów I / O.

Postać: 4. Architektura systemów wieloprocesorowych opartych o Hammer

A) system jednoprocesorowy

B) system dwuprocesorowy

B) system czteroprocesorowy

Schematy pokazane na ryc. 4, zademonstrować efektywność budowania systemów wieloprocesorowych w oparciu o Hammer. W takich komputerach wraz ze wzrostem liczby procesorów rośnie nie tylko moc obliczeniowa, pojemność i przepustowość pamięci RAM, ale także zasoby podsystemu I / O. Tak więc w systemie 8-procesorowym dostępne będą 64 (8x8) modułów DIMM (do 128 GB) i 4 kanały HyperTransport o łącznej przepustowości 25 GB / s dla transmisji dupleksowej.

AMD ogłosiło chipset z serii 8000, który będzie dostępny w czwartym kwartale 2002 roku. Zawiera chipy AMD-8151 (interfejsy z AGP 3.0), AMD-8131 (most z HyperTransport do PCI-X) i AMD-8111 (koncentrator I / O, zapewnia obsługę PCI-32/33 MHz, USB, IDE itp. .P.).

Interesujące jest zorganizowanie zapewnienia spójności pamięci podręcznej za pomocą kanałów HyperTransport z liczbą procesorów od 4 i więcej: kilka ścieżek między procesorami utworzonych przez kanały HyperTransport bierze udział w przetwarzaniu odpowiednich żądań, co przyczynia się do przyspieszenia pracy. Zasadniczo można budować systemy z więcej niż 8 procesorami Hammer, ale wymaga to przełącznika HyperTransport.

Opóźnienia podczas pracy z lokalną (najbliższą mikroprocesorowi) pamięcią RAM nieznacznie zwiększają się podczas uzyskiwania dostępu do pamięci „zdalnej”. W niezaładowanym systemie 4-procesorowym opóźnienie wynosi 140 ns, a w podobnym systemie 8-procesorowym 160 ns. To pozwala nam mówić o architekturze SMP, a nie o ccNUMA. Jednocześnie zastosowanie technologii przełączania zamiast szyn systemowych pozwala na osiągnięcie wysokiej wydajności w zakresie przepustowości pamięci. W przypadku operacji takich jak kopiowanie jest to 8 GB / s dla systemu 4-procesorowego, co według AMD jest znacznie większe niż w przypadku architektur magistrali.

Czekam na Hammera

Hammer rozpocznie wysyłkę mniej więcej w trzecim kwartale 2002 roku. Pierwszym mikroprocesorem w tej rodzinie będzie ClawHammer, który koncentruje się na systemach jedno- i dwuprocesorowych; wtedy pojawi się SledgeHammer. Choć tak naprawdę Hammer powinien konkurować z mikroprocesorami architektury IA-64 (do tego czasu powinien pojawić się McKinley), to można przypuszczać, że w przyszłości Hammer będzie w stanie zastąpić Athlona w całym spektrum zastosowań (ale może to zająć więcej niż rok) ... Oznacza to również, że Hammer może konkurować z Pentium 4.

Oprócz istniejących 32-bitowych systemów operacyjnych, NetBSD, FreeBSD i Linux, a także nowoczesne wersje systemu Windows, zostały przeniesione na 64-bitową architekturę Hammer.

Zalety x86-64 i Hammera to:

  • kompatybilność z aplikacjami 16- i 32-bitowymi o wysokim poziomie wydajności wykonania;
  • względna (w porównaniu do IA-64) łatwość przejścia z x86 i, odpowiednio, brak konieczności ponoszenia nadmiernych kosztów finansowych na to przejście;
  • mniejsze ryzyko niepowodzenia nowej architektury;
  • łatwość tworzenia i wdrażania;
  • zajmuje mało miejsca, co zwiększa wydajność i ułatwia skalowanie zegara.

Można powiedzieć, że dzięki wybranemu podejściu „ewolucyjnemu” można bardziej wiarygodnie przewidzieć sukces w zwiększaniu produktywności.

Wymienionym zaletom towarzyszą potencjalnie „niebezpieczne” momenty dla AMD. Architektura x86-64 nie jest tak „rewolucyjna” jak IA-64; ponadto liczba rejestrów nie wygląda na wystarczająco dużą w porównaniu z nowoczesnymi procesorami RISC, co, jak wiadomo, komplikuje optymalizację programu.

AMD będzie musiało wykazać, że wzrost wydajności można osiągnąć przede wszystkim dzięki technologii (i odpowiadającemu jej wzrostowi taktowania), a nie architekturze. Jak dotąd zostało to z powodzeniem udowodnione, w szczególności przez Pentium 4, ale odwrotne dowody z IA-64 nie zostały jeszcze otrzymane.

Aby tworzyć aplikacje 64-bitowe, będziesz musiał opracować kompilatory optymalizujące, o których informacje nie są jeszcze dostępne. Wreszcie, nowoczesny przemysł komputerowy jest bliski wyboru nowych standardów we / wy - Infiniband, PCI-X, 3GIO, HyperTransport. Ścisłe przywiązanie do technologii HyperTransport może wynieść AMD na szczyt, ale wiąże się też z pewnym ryzykiem.

Jeśli chodzi o obszary zastosowań, w których potrzebna jest architektura 64-bitowa, AMD wskazuje przede wszystkim na DBMS, CAD, narzędzia do tworzenia cyfrowej „treści”. Zdaniem autora na procesory Hammer może być aktywnie zapotrzebowanie w szybko rozwijającym się segmencie rynku - klastrach (głównie klastrach linuksowych) z węzłami dwuprocesorowymi.

Obecnie taka platforma oparta na Athlonie MP jest bardzo popularna; podobne systemy oparte na Pentium 4 / Xeon są znacznie droższe. Jeśli ten wskaźnik zostanie utrzymany, AMD będzie mogło liczyć na sukces w tej części rynku.

Praca ta była wspierana przez Rosyjską Fundację Badań Podstawowych, projekt 01-07-90072.

Literatura
  1. Michaił Kuźminski, „Krótki przegląd IA-64”. „Systemy otwarte”, 1999, nr 9-10
  2. Michaił Kuźminski, „Mikroarchitektura Itanium”. Open Systems, nr 9, 2001
  3. Mikhail Kuzminsky, "Architektura Z. Nowoczesne 64-bitowe komputery mainframe firmy IBM". „Systemy otwarte”, 2001, nr 10
  4. „Biała księga dotycząca technologii x86-64”, 2001, AMD
  5. „Technologia 64-bitowa AMD. Przegląd programistów architektury AMD x86-64”, AMD, 2001, styczeń.
  6. „Architektura procesora AMD ósmej generacji. White Paper”, AMD, 2001, październik
  7. F. Weber, „Architektura mikroprocesorowa AMD nowej generacji”, Forum mikroprocesorów, 2001

Michaił Kuźminski ( [email chroniony]) - starszy pracownik naukowy, Centrum Wsparcia Komputerowego, Instytut Chemii Organicznej, RAS (Moskwa).



Autor wystarczająco zaryzykował, włączając ten materiał do podręcznika, gdyż publikowane w naszych czasach informacje o konkretnych modelach mikroprocesorów stają się nieaktualne jeszcze pod drukarnią. Jednak ze względu na kompletność dotyczącą nowoczesnych architektur 64-bitowych, ten rozdział uzasadnia jego obecność w tym samouczku.

10.1 Architektura Intel Core 2

Ósma generacja procesorów Intel, zwana Core 2, bez cienia wątpliwości można nazwać rewolucyjną.

Inżynierowie Intela, po dość długim opóźnieniu w stosunku do AMD, nie wymyślili radykalnie nowej architektury. Jak zwykle wszystko nowe jest dobrze zapomniane. Conroe opiera się na rozwoju mobilnego procesora Pentium M - tak udanego, że niektórzy producenci zaczęli go używać nie tylko do laptopów, ale także do stacjonarnych stacji roboczych. Z kolei Pentium M też nie pojawił się od zera. Jego protoplastą jest Pentium III, o którym wiadomo, że jest ewolucyjną kontynuacją Pentium Pro.

Odpowiedni łańcuch ewolucyjny wygląda następująco: Pentium Pro  Pentium II  Pentium III  Pentium M  Core 2.

Ten przypadek jest przykładem, w którym krok wstecz był znaczącym krokiem naprzód. Jeśli zbytnio wyabstrahujemy ze szczegółów, programiści z firmy Intel wykonali następujące czynności. Do 1995 roku stworzyli dość udany procesor Pentium Pro, zwiększyli jego moc (Pentium II, Pentium III), opracowali mechanizm zmniejszania zużycia energii (Pentium M) i stworzyli efektywny system interakcji między kilkoma rdzeniami procesora (Core 2). Schemat ten jest raczej arbitralny, ponieważ na każdym z etapów pojawiły się inne istotne ulepszenia (takie jak przejście na architekturę 64-bitową), ale niektóre odziedziczone funkcje są nadal zachowane.

W zależności od segmentu docelowego procesory mają własne cechy technologiczne. W przypadku systemów stacjonarnych przeznaczone są Conroe-L (jeden rdzeń), Allendale (dwa rdzenie), Conroe i Wolfdale (dwa rdzenie), Kentsfield i Yorkfield (cztery rdzenie). Nazwy kodowe Merom i Penryn niosą ze sobą produkty przeznaczone dla segmentu rynku mobilnego. Najnowszą reinkarnacją architektury Core 2 będą sześciordzeniowe procesory firmy Dunnington.

Następna generacja procesorów po Core 2 jest sprzedawana pod marką Core i7 (architektura Nehalem).

Należy zauważyć, że konfiguracje sześciordzeniowe nie zapewniają sześciokrotnego wzrostu wydajności w porównaniu z konfiguracjami jednordzeniowymi. Przyczyny tkwią w osobliwościach pracy z pamięcią. W niektórych zadaniach, zamiast poprawiać wydajność, można nawet zmniejszyć prędkość działania. Wynika to z faktu, że większość oprogramowania nie została jeszcze przystosowana do działania na platformach wieloprocesorowych (wielordzeniowych).

Co się zmieniło w Intel Core 2 w porównaniu z Pentium 4? Jedną z istotnych różnic jest odejście od długo-potokowej architektury NetBrust, której głównym zadaniem było zapewnienie pewnej przewagi w warunkach „wyścigu gigahercowego”. Ponadto nastąpiło znaczne zmniejszenie długości przenośnika. W architekturze Core jego długość wynosi 14 kroków, podczas gdy w poprzedniej generacji procesorów było to 31 kroków (rdzeń Prescotta), co stanowi ponad dwukrotną redukcję. Ale pierwsze procesory NetBrust na rdzeniu Northwood zostały przetaktowane z 1,6 do 3,4 GHz. Nie będzie zbędne przypominanie, że taki wzrost częstotliwości taktowania był obarczony nadmiernym zużyciem energii (dla topowych procesorów TDP osiągnął 160-170 W). Jednak, jak pokazała praktyka, wszystkie te gigaherce w niewielkim stopniu przełożyły się na wzrost produktywności.

Pojemność pamięci podręcznej L2 w nowych modelach waha się od 3 MB dla Wolfdale-3M do 12 MB dla Yorkfield.

Zanim przejdziemy do badania schematu strukturalnego, zwracamy uwagę na kluczowe punkty technologiczne leżące u podstaw architektury rdzenia:

    Intel Wide Dynamic Execution - zapewnia do pięciu mikrooperacji na cykl zegara.

    Intel Intelligent Power Capability to zbiór technologii zaprojektowanych w celu znacznego zmniejszenia zużycia energii.

    Intel Advanced Smart Cache - zakłada obecność wspólnej pamięci podręcznej L2 dla wszystkich rdzeni, która jest dynamicznie przydzielana między nimi w zależności od wykonywanych zadań.

    Intel Smart Memory Access to zestaw technologii służących do optymalizacji algorytmów dostępu do pamięci i wstępnego ładowania danych.

    Intel Advanced Digital Media Boost to technologia zaprojektowana w celu optymalizacji dekodowania treści multimedialnych. Obsługuje wszystkie 128-bitowe polecenia SSE, SSE2 i SSE3 powszechnie używane w aplikacjach multimedialnych i graficznych w jednym cyklu zegara.

    Technologia Intel 64 - tryb 64-bitowy (EM64T) obliczania liczb całkowitych i arytmetyki adresów. Umożliwia pracę z liczbami o dużej szerokości bitowej, a także adresowanie ponad 1 TB pamięci. Architektura 32-bitowa pozwalała zaadresować nie więcej niż 4 GB pamięci RAM. Narzuca to pewne ograniczenia podczas pracy z dużymi ilościami danych.

Artykuł ujawnia znaczenie terminu „64 bity”. Artykuł pokrótce przedstawia historię rozwoju systemów 64-bitowych, opisuje najpopularniejsze w tej chwili 64-bitowe procesory architektury Intel 64 oraz 64-bitowy system operacyjny Windows.

Wprowadzenie

W ramach architektury komputerów termin „64-bitowy” oznacza 64-bitowe liczby całkowite i inne typy danych o rozmiarze 64 bitów. Systemy „64-bitowe” mogą oznaczać 64-bitowe architektury mikroprocesorowe (np. EM64T, IA-64) lub 64-bitowe systemy operacyjne (np. Windows XP Professional x64 Edition). Można mówić o kompilatorach, które generują 64-bitowy kod programu.

W tym artykule omówiono różne kwestie związane z technologiami 64-bitowymi. Artykuł przeznaczony jest dla programistów, którzy chcą rozpocząć tworzenie programów 64-bitowych i jest skierowany do programistów Windows, ponieważ dla nich kwestia znajomości systemów 64-bitowych jest najbardziej istotna.

Historia systemów 64-bitowych

Wersja 64-bitowa dopiero niedawno wkroczyła w życie większości użytkowników i programistów aplikacji. Jednak praca z danymi 64-bitowymi ma długą historię.

1961: IBM wypuszcza superkomputer IBM 7030 Stretch, który używa 64-bitowych słów danych, 32-bitowych lub 64-bitowych instrukcji maszynowych.

1974: Control Data Corporation wprowadza na rynek superkomputer wektorowy CDC Star-100, który wykorzystuje 64-bitową architekturę słów (poprzednie systemy CDC miały architekturę 60-bitową).

1976: Cray Research wypuszcza pierwszy superkomputer Cray-1, który implementuje 64-bitową architekturę słów i będzie służył jako podstawa dla wszystkich kolejnych superkomputerów wektorowych Cray.

1985: Cray wypuszcza UNICOS, pierwszą 64-bitową implementację systemu operacyjnego Unix.

1991: MIPS Technologies produkuje pierwszy 64-bitowy procesor R4000, który implementuje trzecią iterację architektury MIPS swojej firmy. Ten procesor jest używany w stacjach roboczych SGI, począwszy od modelu IRIS Crimson. Kendall Square Research wypuszcza swój pierwszy superkomputer KSR1 oparty na ich zastrzeżonej 64-bitowej architekturze RISC z systemem OSF / 1.

1992: Digital Equipment Corporation (DEC) przedstawia całkowicie 64-bitową architekturę Alpha, będącą pomysłem projektu PRISM.

1993: DEC wypuszcza 64-bitowy, podobny do Uniksa system operacyjny DEC OSF / 1 AXP (później przemianowany na Tru64 UNIX) dla swoich systemów Alpha.

1994: Intel ogłasza plany rozwoju 64-bitowej architektury IA-64 (wraz z firmą Hewlett-Packard), następcy ich 32-bitowych procesorów IA-32. Datę premiery ustalono na lata 1998-1999. SGI wypuszcza IRIX 6.0 z 64-bitową obsługą chipsetu R8000.

1995: Sun wprowadza na rynek 64-bitową rodzinę procesorów SPARC UltraSPARC. HAL Computer Systems, spółka zależna Fujitsu, wprowadza na rynek stacje robocze oparte na 64-bitowym procesorze SPARC64 pierwszej generacji, opracowanym niezależnie przez HAL. IBM produkuje mikroprocesory A10 i A30 oraz 64-bitowe procesory PowerPC AS. IBM wydaje również 64-bitową aktualizację systemu AS / 400, która może przekształcić system operacyjny, bazy danych i aplikacje.

1996: Nintendo wprowadza konsola do gier Nintendo 64 oparte na tańszym wariancie MIPS R4000. Firma HP udostępnia 64-bitową implementację własnej architektury PA-RISC PA-8000 w wersji 2.0.

1997: IBM wprowadza na rynek linię RS64 64-bitowych procesorów PowerPC / PowerPC AS.

1998: Sun wypuszcza Solaris 7 z pełną obsługą 64-bitowego UltraSPARC.

1999: Intel wydaje zestaw instrukcji dla architektury IA-64. AMD publicznie ogłasza swój zestaw 64-bitowych rozszerzeń dla IA-32, który został nazwany x86-64 (później zmieniono nazwę na AMD64).

2000: IBM wypuszcza swój pierwszy 64-bitowy mainframe zSeries z900, zgodny z ESA / 390 i nowym systemem operacyjnym z / OS.

2001: Intel w końcu wprowadza linię 64-bitowych procesorów, obecnie nazywanych Itanium, do serwerów o wysokiej wydajności. Projekt nie spełnił oczekiwań ze względu na liczne opóźnienia we wprowadzaniu na rynek IA-64. NetBSD staje się pierwszym systemem operacyjnym działającym na procesorze Intel Itanium od czasu jego wydania. Ponadto firma Microsoft wydaje również 64-bitową edycję systemu Windows XP dla architektury Itanium IA-64, chociaż zachowuje możliwość uruchamiania aplikacji 32-bitowych przy użyciu warstwy pośredniej WoW64.

2003: AMD wprowadza linie procesorów Opteron i Athlon 64 oparte na architekturze AMD64, która jest pierwszą 64-bitową architekturą procesorów opartą na architekturze x86. Apple przedstawia 64-bitowy procesor PowerPC 970 „G5” firmy IBM. Intel twierdzi, że chipy procesorów Itanium pozostaną jedynymi 64-bitowymi procesorami opracowanymi przez Intela.

2004: W odpowiedzi na komercyjny sukces AMD, Intel przyznaje, że tworzył klon rozszerzeń AMD64 o nazwie IA-32e (później przemianowany na EM64T, a następnie ponownie Intel 64). Firma Intel wydaje również zaktualizowane wersje rodzin procesorów Xeon i Pentium 4 z obsługą nowych instrukcji.

2004: VIA Technologies wprowadza 64-bitowy procesor Isaiah.

2005: 31 stycznia firma Sun wypuszcza system Solaris 10 z obsługą procesorów AMD64 / Intel 64. 30 kwietnia Microsoft wypuszcza system Windows XP Professional x64 Edition dla procesorów AMD64 / Intel 64.

2006: Sony, IBM i Toshiba wprowadzają 64-bitowy procesor Cell dla PlayStation 3, serwerów, stacji roboczych i nie tylko. Microsoft wypuszcza system Windows Vista z 64-bitową obsługą procesorów AMD64 / Intel 64, która obsługuje 32-bitową zgodność. Wszystkie aplikacje i komponenty systemu Windows są 64-bitowe, jednak wiele z nich ma wersje 32-bitowe zawarte w systemie jako wtyczki ze względu na kompatybilność.

2009: Podobnie jak Windows Vista, Windows 7 firmy Microsoft zawiera pełną wersję 64-bitową dla procesorów AMD64 / Intel 64, a większość nowych komputerów ma domyślnie 64-bitową wersję. Został wydany Mac OS X 10.6, „Snow Leopard” firmy Apple, który ma jądro 64-bitowe i jest przeznaczony dla procesorów AMD64 / Intel 64, ale ten system jest instalowany domyślnie tylko w niektórych najnowszych modelach komputerów Apple. Większość aplikacji dostarczanych z systemem Mac OS X 10.6 jest teraz również 64-bitowych.

Więcej o historii rozwoju systemów 64-bitowych można dowiedzieć się w artykule Johna Maszy „The Long Road to 64 Bits” oraz w encyklopedycznym artykule w Wikipedii „64-bit”.

Programowanie stosowane i systemy 64-bitowe

W chwili pisania tego tekstu w 2010 roku najbardziej znane i rozpowszechnione są dwie 64-bitowe architektury mikroprocesorów: IA64 i Intel 64.
  1. IA-64 64-bitowa architektura mikroprocesorowa opracowana wspólnie przez firmy Intel i Hewlett Packard. Jest zaimplementowany w mikroprocesorach Itanium i Itanium 2. Bardziej szczegółowe informacje o architekturze IA-64 można znaleźć w następujących artykułach Wikipedii: „IA-64”, „Itanium”, „Itanium 2”. Architektura Itanium jest obsługiwana przez wielu dostawców serwerów: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI i Unisys. Dostawcy ci dołączyli do Intela i wielu twórców oprogramowania, aby utworzyć Itanium Solutions Alliance, aby ulepszyć architekturę i przyspieszyć tempo przenoszenia oprogramowania.
  2. Intel 64 (AMD64 / x86-64 / x64 / EM64T) - Ta architektura jest rozszerzeniem architektury x86 z pełną kompatybilnością wsteczną. Istnieje wiele wariantów nazwy tej architektury, co prowadzi do nieporozumień, choć w rzeczywistości wszystkie te nazwy oznaczają to samo: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e, Intel 64, x64. Aby dowiedzieć się więcej o tym, jak powstało tak wiele nazw, zobacz artykuł w Wikipedii „X86-64”. Procesory o architekturze Intel 64 są szeroko stosowane komputery osobiste... I najprawdopodobniej twój komputer jest wyposażony w procesor o tej architekturze.
Ważne jest, aby zrozumieć, że IA-64 i Intel 64 (AMD64) są zupełnie różnymi, niekompatybilnymi ze sobą architekturami mikroprocesora. W dalszej części artykułu rozważymy tylko architekturę Intel 64 (x64 / AMD64), jako bardziej popularną wśród twórców oprogramowania aplikacyjnego dla systemu operacyjnego Windows. Dla zwięzłości, model programowania Intel 64 dostępny dla programisty w wersji 64-bitowej system Windowsnazywane są Win64.

Architektura Intel 64 (AMD64)

Omawiana architektura Intel 64 jest prostym, ale potężnym, kompatybilnym wstecz rozszerzeniem starszej przemysłowej architektury x86. Dodaje 64-bitową przestrzeń adresową i rozszerza zasoby rejestru, aby zapewnić lepszą wydajność rekompilowanych programów 64-bitowych. Architektura zapewnia obsługę starszego 16-bitowego i 32-bitowego kodu aplikacji i systemów operacyjnych bez ich modyfikacji lub ponownej kompilacji.

Charakterystyczną cechą Intel 64 jest obsługa szesnastu 64-bitowych rejestrów ogólnego przeznaczenia (x86-32 miał osiem 32-bitowych rejestrów). Obsługiwane są 64-bitowe operacje arytmetyczne i logiczne na liczbach całkowitych. Obsługiwane są 64-bitowe adresy wirtualne. Aby zaadresować nowe rejestry dla rozkazów wprowadzono "przedrostki rozszerzeń rejestrów", dla których wybrano zakres kodów 40h-4Fh, używanych dla poleceń INC<регистр> i DEC<регистр> w trybach 32 i 16 bitowych. Instrukcje INC i DEC w trybie 64-bitowym muszą być zakodowane w bardziej ogólnej, dwubajtowej formie.

Rejestry:

16 uniwersalnych 64-bitowych rejestrów całkowitych (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15),
8 80-bitowych rejestrów zmiennoprzecinkowych (ST0 - ST7),
8 64-bitowych rejestrów rozszerzeń multimedialnych (MM0 - MM7, wspólna przestrzeń z rejestrami ST0 - ST7),
16 128-bitowych rejestrów SSE (XMM0 - XMM15),
64-bitowy wskaźnik RIP i 64-bitowy rejestr flag RFLAGS.

Potrzeba architektury 64-bitowej jest podyktowana przez aplikacje, które wymagają dużej przestrzeni adresowej. Przede wszystkim są to wysokowydajne serwery, systemy zarządzania bazami danych, systemy CAD i oczywiście gry. Takie aplikacje odniosą znaczące korzyści z 64-bitowej przestrzeni adresowej i zwiększonej liczby rejestrów. Niewielka liczba rejestrów dostępnych w starszej architekturze x86 ogranicza wydajność obliczeniową. Zwiększona liczba rejestrów zapewnia wystarczającą wydajność dla wielu aplikacji.

Podkreślmy główne zalety architektury x86-64:

  • 64-bitowa przestrzeń adresowa;
  • rozszerzony zestaw rejestrów;
  • zestaw poleceń znanych programistom;
  • możliwość uruchamiania starych aplikacji 32-bitowych w wersji 64-bitowej system operacyjny;
  • możliwość korzystania z 32-bitowych systemów operacyjnych.

64-bitowe systemy operacyjne

Prawie wszystkie nowoczesne systemy operacyjne mają teraz wersje dla architektury Intel 64. Na przykład Microsoft dostarcza Windows XP x64. Główni programiści systemów UNIX dostarczają również wersje 64-bitowe, takie jak Linux Debian 3.5 x86-64. Nie oznacza to jednak, że cały kod takiego systemu jest całkowicie 64-bitowy. Część kodu systemu operacyjnego i wiele aplikacji może pozostać 32-bitowych, ponieważ Intel 64 zapewnia zgodność wsteczną z aplikacjami 32-bitowymi. Na przykład 64-bitowa wersja systemu Windows używa specjalnego trybu WoW64 (Windows na Windows 64), który tłumaczy wywołania z aplikacji 32-bitowych na zasoby 64-bitowego systemu operacyjnego.

WoW64

Windows-on-Windows 64-bit (WoW64) to podsystem systemu operacyjnego Windows, który umożliwia uruchamianie aplikacji 32-bitowych we wszystkich 64-bitowych wersjach systemu Windows.

Podsystem WoW64 nie obsługuje następujących programów:

  • programy skompilowane dla 16-bitowych systemów operacyjnych;
  • programy trybu jądra skompilowane dla 32-bitowych systemów operacyjnych.
Istnieją różnice w WoW64 w zależności od architektury procesora. Na przykład 64-bitowa wersja systemu Windows zaprojektowana dla procesora Intel Itanium 2 używa WoW64 do emulacji instrukcji x86. Ta emulacja jest dość zasobochłonna w porównaniu z WoW64 dla architektury Intel 64, ponieważ przełącza z trybu 64-bitowego do trybu zgodności podczas wykonywania programów 32-bitowych.

WoW64 na architekturze Intel 64 (AMD64 / x64) nie wymaga emulacji instrukcji. Tutaj podsystem WoW64 emuluje tylko środowisko 32-bitowe, ze względu na dodatkową warstwę między aplikacją 32-bitową a 64-bitową Windows API... Gdzieś ta warstwa jest cienka, gdzieś niezbyt. Dla przeciętnego programu utrata produktywności spowodowana obecnością takiej warstwy wyniesie około 2%. W przypadku niektórych programów ta wartość może być wyższa. Dwa procent to niewiele, ale należy pamiętać, że aplikacje 32-bitowe działają trochę wolniej w 64-bitowych systemach operacyjnych Windows niż w środowisku 32-bitowym.

Kompilowanie 64-bitowego kodu nie tylko eliminuje potrzebę WoW64, ale także zapewnia dodatkowy wzrost wydajności. Wynika to ze zmian architektonicznych w mikroprocesorze, takich jak wzrost liczby rejestrów ogólnego przeznaczenia. W przypadku przeciętnego programu można oczekiwać wzrostu wydajności o 5-15% po prostej rekompilacji.

Ze względu na obecność warstwy WoW64 programy 32-bitowe działają mniej wydajnie w środowisku 64-bitowym niż w środowisku 32-bitowym. Mimo to proste aplikacje 32-bitowe mogą odnieść jedną korzyść z uruchamiania ich w środowisku 64-bitowym. Prawdopodobnie wiesz, że program skompilowany za pomocą przełącznika / LARGEADDRESSAWARE: YES może przydzielić do 3 gigabajtów pamięci, jeśli 32-bitowy system operacyjny Windows jest uruchamiany z przełącznikiem / 3gb. Tak więc ten sam 32-bitowy program działający w systemie 64-bitowym może przydzielić prawie 4 GB pamięci (w praktyce około 3,5 GB).

Podsystem WoW64 izoluje programy 32-bitowe od programów 64-bitowych, przekierowując wywołania do plików i rejestru. Zapobiega to przypadkowemu dostępowi programów 32-bitowych do danych aplikacji 64-bitowych. Na przykład 32-bitowa aplikacja, która uruchamia plik DLL z katalogu% systemroot% \\ System32, może przypadkowo uzyskać dostęp do 64-bitowego pliku DLL, który jest niezgodny z programem 32-bitowym. Aby tego uniknąć, podsystem WoW64 przekierowuje dostęp z folderu% systemroot% \\ System32 do folderu% systemroot% \\ SysWOW64. To przekierowanie pomaga zapobiegać błędom zgodności, wymagając pliku DLL zaprojektowanego specjalnie do pracy z aplikacjami 32-bitowymi.

Więcej z mechanizmami przekierowania system plików Rejestr można znaleźć w sekcji MSDN „Uruchamianie aplikacji 32-bitowych”.

Model programowania Win64

Podobnie jak w Win32, rozmiar strony w Win64 to 4Kb. Pierwsze 64 KB przestrzeni adresowej nigdy nie jest wyświetlane, więc najmniejszy prawidłowy adres to 0x10000. W przeciwieństwie do Win32, systemowe biblioteki DLL są ładowane powyżej 4 GB.

Osobliwością kompilatorów dla Intel 64 jest to, że mogą one najskuteczniej wykorzystywać rejestry do przekazywania parametrów do funkcji, zamiast używać stosu. Pozwoliło to twórcom architektury Win64 pozbyć się takiej koncepcji, jak konwencja wywoływania (konwencja wywoływania). W Win32 można stosować różne konwencje: __stdcall, __cdecl, __fastcall i tak dalej. W Win64 jest tylko jedna konwencja wywoływania. Spójrzmy na przykład, jak cztery argumenty liczb całkowitych są przekazywane w rejestrach:

  • RCX: pierwszy argument
  • RDX: drugi argument
  • R8: trzeci argument
  • R9: czwarty argument
Argumenty po pierwszych czterech liczbach całkowitych są przekazywane na stosie. W przypadku argumentów typu float używane są rejestry XMM0-XMM3 oraz stos.

Różnica w konwencjach wywoływania prowadzi do tego, że w tym samym programie nie można używać zarówno kodu 64-bitowego, jak i 32-bitowego. Innymi słowy, jeśli aplikacja jest kompilowana w trybie 64-bitowym, wszystkie używane biblioteki (DLL) również muszą być 64-bitowe.

Przekazywanie parametrów przez rejestry jest jedną z innowacji, dzięki której programy 64-bitowe są bardziej wydajne niż programy 32-bitowe. Dodatkowe korzyści w zakresie wydajności można uzyskać, używając 64-bitowych typów danych.

Przestrzeń adresowa

Podczas gdy 64-bitowy procesor może teoretycznie adresować 16 eksabajtów pamięci (2 ^ 64), Win64 obsługuje obecnie 16 terabajtów (2 ^ 44). Dzieje się tak z kilku powodów. Obecne procesory mogą zapewnić dostęp tylko do 1 terabajta (2 ^ 40) pamięci fizycznej. Architektura (ale nie sprzęt) może rozszerzyć tę przestrzeń do 4 petabajtów (2 ^ 52). Jednak w tym przypadku dla tabel stronicowania, które mapują pamięć, wymagana jest ogromna ilość pamięci.

Oprócz tych ograniczeń ilość pamięci dostępnej w określonej wersji 64-bitowego systemu operacyjnego Windows zależy również od względów komercyjnych firmy Microsoft. Poniżej znajdują się informacje o ilości pamięci obsługiwanej przez różne wersje 64-bitowych wersji systemu Windows:

Windows XP Professional - 128 GB;
Windows Server 2003, Standard - 32 GB;
Windows Server 2003, Enterprise - 1 TB;
Windows Server 2003, Datacenter - 1 TB;
Windows Server 2008, Datacenter - 2 TB;
Windows Server 2008, Enterprise - 2 TB;
Windows Server 2008, Standard - 32 GB;
Windows Server 2008, serwer sieciowy - 32 GB;
Vista Home Basic - 8 GB;
Vista Home Premium - 16 GB;
Vista Business - 128 GB;
Vista Enterprise - 128 GB;
Vista Ultimate - 128 GB;
Windows 7 Home Basic - 8 GB;
Windows 7 Home Premium - 16 GB;
Windows 7 Professional - 192 GB;
Windows 7 Enterprise - 192 GB;
Windows 7 Ultimate - 192 GB;

Rozwój aplikacji 64-bitowych

Najbardziej kompletne zagadnienia związane z tworzeniem aplikacji 64-bitowych są omówione w trakcie "

Pytanie: Architektura procesora - co to jest?
Odpowiedź: Termin „architektura procesora” jest obecnie niejednoznaczny. Z punktu widzenia programistów architektura procesora oznacza jego zdolność do wykonywania określonego zestawu kodów maszynowych. Większość nowoczesnych procesorów do komputerów stacjonarnych to procesory x86 lub zgodne z Intelem o architekturze IA32 (32-bitowa architektura procesora Intel). Jego fundamenty położył Intel w procesorze i80386, ale w kolejnych generacjach procesorów był on uzupełniany i rozbudowywany zarówno przez samego Intela (wprowadzono nowe zestawy instrukcji MMX, SSE, SSE2 i SSE3), jak i przez producentów zewnętrznych (zestawy instrukcji EMMX, 3DNow! And Extended 3DNow !, opracowane przez AMD). Jednak twórcy sprzętu komputerowego nadali pojęciu „architektura procesora” nieco inne znaczenie (czasami, aby się nie pomylić, używa się terminu „mikroarchitektura”). Z ich punktu widzenia architektura procesorów odzwierciedla podstawowe zasady wewnętrznej organizacji poszczególnych rodzin procesorów. Na przykład architektura procesorów Intel Pentium została określona jako procesory P5, Pentium II i Pentium III - P6, a popularny w niedawnej przeszłości Pentium 4 należał do architektury NetBurst. Po tym, jak Intel zamknął architekturę P5 dla producentów zewnętrznych, jego główny konkurent, AMD, został zmuszony do opracowania własnej architektury, K7 dla procesory Athlon oraz Athlon XP i K8 dla Athlona 64.

Pytanie: Które procesory są lepsze, 64-bitowe czy 32-bitowe? I dlaczego?
Odpowiedź: Dość udane 64-bitowe rozszerzenie klasycznej 32-bitowej architektury IA32 zostało zaproponowane w 2002 roku przez AMD (pierwotnie nazywane x86-64, obecnie AMD64) w rodzinie procesorów K8. Po pewnym czasie Intel zaproponował własne oznaczenie - EM64T (Extended Memory 64-bit Technology). Jednak niezależnie od nazwy istota nowej architektury jest taka sama: bitowość głównych rejestrów wewnętrznych procesorów 64-bitowych podwoiła się (z 32 do 64 bitów), a 32-bitowe instrukcje kodu x86 otrzymały 64-bitowe odpowiedniki. Ponadto ze względu na rozszerzenie szerokości magistrali adresowej znacznie wzrosła ilość pamięci adresowanej przez procesor.

I wszystko. Więc ci, którzy oczekują znacznego wzrostu wydajności od 64-bitowych procesorów, będą rozczarowani - ich wydajność w zdecydowanej większości nowoczesnych aplikacji (które są w większości wyostrzone dla IA32 i prawdopodobnie nie zostaną ponownie skompilowane dla AMD64 / EM64T w dającej się przewidzieć przyszłości) tak samo jak stare dobre procesory 32-bitowe. Pełen potencjał architektury 64-bitowej ujawni się dopiero w odległej przyszłości, kiedy pojawią się (lub mogą się nie pojawić) ogromne ilości aplikacji zoptymalizowanych pod kątem nowej architektury. W każdym razie najbardziej efektywne przejście na wersję 64-bitową będzie miało miejsce w przypadku programów pracujących z bazami danych, programów CAD / CAE oraz programów do pracy z treściami cyfrowymi.

Pytanie: Co to jest rdzeń procesora?
Odpowiedź: W ramach tej samej architektury różne procesory mogą się znacznie różnić od siebie. Te różnice są zawarte w różnych rdzeniach procesorów, które mają pewien zestaw ściśle określonych cech. Najczęściej różnice te wynikają z różnych częstotliwości magistrali systemowej (FSB), rozmiarów pamięci podręcznej L2, obsługi niektórych nowych systemów instrukcji lub procesów technologicznych, za pomocą których produkowane są procesory. Często wymiana rdzenia w tej samej rodzinie procesorów wiąże się z wymianą gniazda procesora, co prowadzi do problemów z dalszą kompatybilnością płyt głównych. Jednak w procesie ulepszania jądra producenci muszą wprowadzić w nim drobne zmiany, które nie mogą udawać „nazwy własnej”. Takie zmiany nazywane są wersjami jądra i najczęściej są oznaczane kombinacjami alfanumerycznymi. Jednak w nowych wersjach tego samego jądra mogą pojawić się dość zauważalne innowacje. Na przykład Intel wprowadził obsługę 64-bitowej architektury EM64T do poszczególnych procesorów Pentium 4 właśnie w trakcie zmiany wersji.

P: Jaka jest przewaga dwurdzeniowych procesorów nad jednordzeniowymi?
Odpowiedź: Najważniejszym wydarzeniem 2005 roku było pojawienie się procesorów dwurdzeniowych. Do tego czasu klasyczne jednordzeniowe procesory prawie całkowicie wyczerpały swoje rezerwy wzrostu produktywności z powodu wzrostu częstotliwości roboczej. Przeszkodą było nie tylko zbyt duże odprowadzanie ciepła przez procesory pracujące na wysokich częstotliwościach, ale także problemy z ich stabilnością. Tak więc została zamówiona szeroka ścieżka rozwoju procesorów na najbliższe lata, a ich producenci, chcąc nie chcąc, musieli opanować nowy, intensywny sposób zwiększania wydajności produktów. Najbardziej zwinnym na rynku procesorów do desktopów, jak zawsze, okazał się Intel, który jako pierwszy zapowiedział dwurdzeniowy procesory Intel Pentium D i Intel Extreme Edition... Jednak AMD z Athlonem64 X2 pozostawało w tyle za konkurentem dosłownie o kilka dni. Niewątpliwą zaletą dwurdzeniowych procesorów pierwszej generacji, w skład których wchodzą wyżej wymienione procesory, jest ich pełna kompatybilność z istniejącymi płyty główne (oczywiście dość nowoczesne, na których wystarczy zaktualizować BIOS). W szczególności druga generacja procesorów dwurdzeniowych Intel Core 2 Duo „wymaga” specjalnie zaprojektowanych chipsetów i nie działa ze starymi płytami głównymi.

Nie należy zapominać, że do tej pory tylko profesjonalne oprogramowanie jest mniej lub bardziej zoptymalizowane do pracy z procesorami dwurdzeniowymi (w tym do pracy z grafiką, danymi audio i wideo), podczas gdy dla użytkownika biurowego lub domowego czasami zyskuje drugi rdzeń procesora. ale znacznie częściej jest to ciężar własny. W takim przypadku zalety dwurdzeniowych procesorów są widoczne gołym okiem tylko wtedy, gdy na komputerze są uruchomione pewne zadania w tle (skanowanie w poszukiwaniu wirusów, zapora programowa itp.). Jeśli chodzi o wzrost wydajności w istniejących grach, jest on minimalny, chociaż pojawiły się już pierwsze gry popularnych gatunków, w pełni wykorzystujące wykorzystanie drugiego rdzenia.

Jeśli jednak dziś pojawia się kwestia wyboru procesora do komputera do gier ze średniego lub wyższego przedziału cenowego, to w każdym razie lepiej jest preferować dwurdzeniowy lub nawet 4-rdzeniowy procesor niż jednordzeniowy analog o nieco wyższej częstotliwości, ponieważ rynek stale przesuwa się w kierunku systemów wielordzeniowych i zoptymalizowane przetwarzanie równoległe. Trend ten utrzyma się w najbliższych latach, więc udział oprogramowania zoptymalizowanego pod kątem wielu rdzeni będzie systematycznie wzrastał, a już niedługo może nadejść moment, w którym wielordzeniowy stanie się absolutną koniecznością.

Pytanie: Co to jest pamięć podręczna?
Odpowiedź: Wszystkie nowoczesne procesory mają cache (w języku angielskim - cache) - tablicę ultraszybkiej pamięci o dostępie swobodnym, która jest buforem pomiędzy kontrolerem stosunkowo wolnej pamięci systemowej a procesorem. Bufor ten przechowuje bloki danych, z którymi aktualnie pracuje procesor, co znacznie zmniejsza liczbę wywołań procesora do niezwykle wolnej (w porównaniu do szybkości procesora) pamięci systemowej. To znacznie zwiększa ogólną wydajność procesora.

Co więcej, w nowoczesnych procesorach pamięć podręczna od dawna nie jest pojedynczą tablicą pamięci, jak kiedyś, ale jest podzielona na kilka poziomów. Najszybsza, ale stosunkowo niewielka pamięć podręczna pierwszego poziomu (oznaczona jako L1), z którą współpracuje rdzeń procesora, jest najczęściej dzielona na dwie połowy - pamięć podręczną instrukcji i pamięć podręczną danych. Pamięć podręczna L2 współdziała z pamięcią podręczną L1, która z reguły ma znacznie większą objętość i jest mieszana, bez rozdzielania na pamięć podręczną instrukcji i pamięć podręczną danych. Niektóre procesory do komputerów stacjonarnych, na przykładzie procesorów serwerowych, również czasami uzyskują pamięć podręczną L3. Pamięć podręczna L3 jest zwykle jeszcze większa, chociaż nieco wolniejsza niż L2 (ze względu na to, że magistrala między L2 i L3 jest węższa niż magistrala między L1 i L2), ale w każdym przypadku jego prędkość jest nieporównywalnie większa niż prędkość pamięć systemowa.

Istnieją dwa typy pamięci podręcznej: pamięć podręczna na wyłączność i pamięć podręczna niewyłączna. W pierwszym przypadku informacje w pamięci podręcznej wszystkich poziomów są wyraźnie określone - każdy z nich zawiera wyłącznie oryginalne informacje, podczas gdy w przypadku pamięci podręcznej niewyłącznej informacje mogą być kopiowane na wszystkich poziomach buforowania. Dziś trudno powiedzieć, który z tych dwóch schematów jest bardziej poprawny - w obu są zarówno wady, jak i zalety. Wyłączny schemat buforowania jest używany w procesorach AMD, a niewyłączny schemat jest używany w procesorach Intel.

Pytanie: Jaka jest magistrala procesora?
Odpowiedź: Magistrala procesora (inaczej - systemowa), zwana najczęściej FSB (Front Side Bus), to zbiór linii sygnałowych połączonych zgodnie z ich przeznaczeniem (dane, adresy, sterowanie), które mają określone parametry elektryczne i protokoły przesyłania informacji. W ten sposób FSB działa jako kanał magistrali między procesorem (lub procesorami) a wszystkimi innymi urządzeniami w komputerze: pamięcią, kartą graficzną, dyskiem twardym i tak dalej. Tylko procesor jest bezpośrednio podłączony do magistrali systemowej, pozostałe urządzenia są do niego podłączone poprzez specjalne kontrolery, skupione głównie w mostku północnym układu logicznego systemu (chipsetu) płyty głównej. Chociaż mogą być wyjątki - na przykład w procesorach AMD z rodziny K8 kontroler pamięci jest zintegrowany bezpośrednio z procesorem, zapewniając tym samym znacznie wydajniejszy interfejs pamięć-procesor niż rozwiązania Intela, które pozostają wierne klasycznym kanonom organizacji zewnętrznego interfejsu procesora. Główne parametry FSB niektórych procesorów przedstawiono w tabeli

procesor częstotliwość FSB, MHz Typ FSB Teoretyczna przepustowość FSB, Mb / s
Intel Pentium III 100/133 AGTL + 800/1066
Intel Pentium 4 100/133/200 QPB 3200/4266/6400
Intel Pentium D. 133/200 QPB 4266/6400
Intel Pentium 4 EE 200/266 QPB 6400/8533
Intel Core 133/166 QPB 4266/5333
Intel Core 2 200/266 QPB 6400/8533
AMD Athlon 100/133 EV6 1600/2133
AMD Athlon XP 133/166/200 EV6 2133/2666/3200
AMD Sempron 800 HyperTransport <6400
AMD Athlon 64 800/1000 HyperTransport 6400/8000

Procesory Intel wykorzystują magistralę systemową QPB (Quad Pumped Bus), która przesyła dane cztery razy na cykl, podczas gdy magistrala systemowa EV6 procesorów AMD Athlon i Athlon XP przesyła dane dwa razy na cykl (Double Data Rate). Architektura AMD64, zastosowana przez AMD w procesorach Athlon 64 / FX / Opteron, wykorzystuje nowe podejście do organizacji interfejsu CPU - tutaj zamiast magistrali procesora FSB i do komunikacji z innymi procesorami wykorzystują: szybką magistralę szeregową (pakietową) HyperTransport, zbudowaną według schematu Peer -to-Peer (punkt-punkt), zapewniający dużą prędkość wymiany danych przy stosunkowo niewielkim opóźnieniu.

Przejście na 16-bitowe mikroprocesory - i8086 i inne podobne moce obliczeniowe - charakteryzowało się skokiem jakościowym we wszystkich głównych cechach MP: nie tylko zwiększeniem głębi bitowej, ale istotną zmianą w architekturze, systemie poleceń, zasadach organizacji struktury. Oprócz tego pokazanego na ryc. 2.4, maszyna użytkownika i8086 będzie zawierała 1 MB pamięci i dwa obszary portów wejściowych i wyjściowych po 64 KB każdy.

Rozważmy „maszynę użytkownika” opartą na i8086 (К1810ВМ86):

7 0 7 0
TOPÓR AH glin Bateria
RON Bx BH BL Baza
CX CH CL Licznik
DX DH DL Dane
15 0
Rejestry SP Wskaźnik stosu
wskaźniki BP Wskaźnik podstawowy
Indeks SI Indeks operandów
rejestry DI Indeks wyników
15 0
CS Segment kodu
Segmentowy DS Segment danych
rejestry SS Segment stosu
ES Dodaj segment. dane
15 0
IP Licznik poleceń
FLAGI Rejestr funkcji

Postać: 2.4. MP i8086 - maszyna użytkownika

Twórcy i8086 starali się zachować możliwość ciągłości oprogramowania i8080, więc podzbiór rejestrów i8080 można wyróżnić w i8086 (odpowiedni podzbiór jest również przechowywany w systemie instrukcji). Oprócz operacji z 16-bitowymi rejestrami ogólnego przeznaczenia (RON) AX..DX, możliwy jest dostęp do każdego bajtu tych rejestrów - AL..DL, AH..DH. W niektórych poleceniach RON wykonują domyślne funkcje liczników, rejestrów indeksowych itp. (patrz rys. 2.4).

16-bitowe rejestry BP, SI, DI są używane do tworzenia adresów pamięci wykonawczej (patrz poniżej), SP to wskaźnik stosu, IP to licznik programu (SC), F to rejestr flag. Młodszy bajt F całkowicie powtarza format rejestru funkcji i8080, a starszy bajt ma ślad. format:

DF określa kierunek modyfikacji adresów tablic w poleceniach łańcuchowych (zwiększanie lub zmniejszanie adresu);

JEŚLI maskuje zewnętrzne przerwanie na wejściu INT (przy IF \u003d 1 przerwanie jest włączone);

TF steruje krok po kroku pracą mikroprocesora. Jeśli TF \u003d 1, po wykonaniu każdego polecenia automatycznie generowane jest przerwanie z wektorem 4 (patrz rozdział 7).

Przydział przestrzeni adresowej.

Przestrzeń adresowa MP jest określana w i8086 przez szerokość magistrali adres / dane + adres i wynosi 2 20 \u003d 1 MB. W tej przestrzeni adresowej IP dostępne są jednocześnie cztery segmenty, z których dwa (DS i ES) są przeznaczone do umieszczania danych, CS to segment kodu (do umieszczania programu), a SS to segment stosu.

Rozmiary segmentów są określane przez szerokość bitową adresów logicznych poleceń, danych i stosu. Adresy logiczne instrukcji i stosu (wierzchołki) są przechowywane w 16-bitowych rejestrach odpowiednio IP i SS, a adres logiczny danych jest obliczany w poleceniu (patrz poniżej) i również ma 16 bitów. Zatem rozmiar każdego segmentu w i8086 wynosi 64 KB. Pozycja segmentu w przestrzeni adresowej (jego adres początkowy) jest określona przez zawartość rejestru segmentu o tej samej nazwie. Tworzenie adresu fizycznego ilustruje schemat na rys. 2.5.

Z rys. 2.5 widać, że granica segmentu w przestrzeni adresowej może być ustawiona nie arbitralnie, ale w taki sposób, że początkowy adres segmentu jest wielokrotnością 16.

15 0
Rejestr segmentów .0 0 0 0
15 0
Adres logiczny
19 0
Adres fizyczny

Postać: 2.5. Tworzenie adresu fizycznego

Domyślnie rejestry segmentowe są wybierane w celu utworzenia fizycznego adresu śledzenia. sposób: podczas odczytywania polecenia po adresie IP używany jest CS, przy dostępie do danych - DS lub ES, podczas dostępu do stosu - SS. Za pomocą specjalnych przedrostków do polecenia (prefiksu) można przypisać do użytku dowolny rejestr segmentowy (z wyjątkiem pary CS: IP, której nie można modyfikować). Granice segmentów można tak dobrać, aby segmenty były odizolowane od siebie, przecinały się lub nawet całkowicie się pokrywały. Na przykład, jeśli załadujesz CS \u003d SS \u003d DS \u003d ES \u003d 0, wtedy wszystkie segmenty będą się ze sobą pokrywać i zaczną się od adresu zerowego - jest to wariant zorganizowania przestrzeni adresowej i8080.

Metody adresowania

i metody formowania adresu wykonawczego

Polecenie i8086 może mieć od 1 do 6 bajtów. Format polecenia pokazano na rys. 2.6.

1 bajt 2 bajty 3..6 bajtów
CPC re W MOD REG R / M [Stronniczość. dane]
7 2 1 0 7 6 5 3 2 0

Postać: 2.6. Format poleceń MP i8086

Większość instrukcji i8086 ma podwójny adres, przy czym jeden adres określa rejestr procesora, a drugi pamięć lub rejestr. Pola poleceń mają następujące cele:

D - określa kierunek przesyłania informacji: gdy D \u003d 1 REG jest odbiornikiem, w przeciwnym razie - źródłem;

W - określa długość argumentów w poleceniu: dla W \u003d 1 długość operandów wynosi 16 bitów (słowo - słowo), w przeciwnym razie - 8 bitów (bajt);

REG - określa rejestr dla pierwszego operandu zgodnie z tab. 2.3:

REG (R / M) Zarejestrować
W \u003d 0 W \u003d 1
glin TOPÓR
CL CX
DL DX
BL Bx
AH SP
CH BP
DH SI
BH DI

Pola R / M i MOD określają, w jaki sposób tworzony jest adres drugiego operandu, który najczęściej znajduje się w pamięci. Stół. 2.4 pokazuje sposoby tworzenia adresów pamięci dla dwóch wartości pola MOD.

R / M MOD \u003d 00 MOD \u003d 01
Adres logiczny Człon Adres logiczny Człon
BX + SI DS BX + SI + d8 DS
BX + DI DS BX + DI + d8 DS
BP + SI SS BP + SI + d8 SS
BP + DI SS BP + DI + d8 SS
SI DS SI + d8 DS
DI DS DI + d8 DS
d16 DS BP + d8 DS
Bx DS BX + d8 DS

Stół. 2.4 d8 i d16 średnie, odpowiednio, 8- i 16-bitowe przesunięcie (3 i 3 + 4 bajty poleceń). Podczas operacji na d8 dokonywane jest „rozszerzenie znaku” do 16 bitów - bity 15..8 przyjmują wartość bitu 7 (znak).

Gdy MOD \u003d 10, używane są te same rejestry, co w przypadku MOD \u003d 01 (patrz Tabela 2.4), ale zamiast d8 używane jest d16.

Gdy MOD \u003d 11, drugim operandem polecenia jest rejestr określony przez pole R / M zgodnie z tab. 2.3.

Zatem operand w pamięci może być adresowany bezpośrednio (MOD \u003d 00, R / M \u003d 110) lub pośrednio poprzez zawartość rejestrów bazowych (BP, BX) lub indeksowych (SI, DI), a także ich sumę. Tryby adresowania są przeznaczone do wydajnej implementacji języków wysokiego poziomu. Na przykład, do prostej zmiennej można uzyskać dostęp w trybie adresowania bezpośredniego, a do elementu tablicy można uzyskać dostęp w trybie adresowania pośredniego poprzez BX, SI. Tryb adresowania przez BP jest przeznaczony do uzyskiwania dostępu do danych z segmentu stosu, co jest wygodne przy implementacji procedur rekurencyjnych i kompilatorów wysokiego poziomu.

DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu