Jednostka centralna

0 Comments
Zobacz też: budowa procesora
SCHEMAT BLOKOWY podstawowego komputera uniprocesor-procesor. Czarne linie wskazują przepływ danych, podczas gdy czerwone linie wskazują przepływ sterowania; strzałki wskazują kierunki przepływu.

Hardwired into a CPU”s circuitry is a set of basic operations it can perform, called a instruction set. Takie operacje mogą obejmować na przykład dodawanie lub odejmowanie dwóch liczb, porównywanie dwóch liczb lub przeskakiwanie do innej części programu., Każda podstawowa operacja jest reprezentowana przez określoną kombinację bitów, znaną jako kod opcode języka maszynowego; podczas wykonywania instrukcji w programie języka maszynowego, procesor decyduje, którą operację wykonać, „dekodując” kod opcode. Kompletna instrukcja języka maszynowego składa się z kodu opcode i, w wielu przypadkach, dodatkowych bitów, które określają argumenty operacji (na przykład, liczby, które mają być zsumowane w przypadku operacji dodawania). Idąc w górę skali złożoności, program języka maszynowego jest zbiorem instrukcji języka maszynowego, które wykonuje procesor.,

faktyczna operacja matematyczna dla każdej instrukcji jest wykonywana przez kombinacyjny układ logiczny w procesorze procesora, znany jako jednostka logiki arytmetycznej lub ALU. Ogólnie rzecz biorąc, procesor wykonuje instrukcję pobierając ją z pamięci, używając jej ALU do wykonania operacji, a następnie zapisując wynik do pamięci., Oprócz instrukcji do operacji matematycznych i logicznych, istnieją różne inne instrukcje maszynowe, takie jak te do ładowania danych z pamięci i przechowywania ich z powrotem, operacje rozgałęziające i operacje matematyczne na liczbach zmiennoprzecinkowych wykonywane przez jednostkę zmiennoprzecinkową (FPU) procesora.

Jednostka Kontrolnaedytuj

Główny artykuł: Jednostka Sterująca

jednostka sterująca (cu) jest składnikiem PROCESORA, który kieruje pracą procesora., Informuje pamięć komputera, jednostkę arytmetyczną i logiczną oraz urządzenia wejściowe i wyjściowe, jak reagować na instrukcje, które zostały wysłane do procesora.

kieruje pracą innych urządzeń, dostarczając sygnały czasowe i sterujące. Większość zasobów komputerowych jest zarządzana przez CU. Kieruje przepływ danych między procesorem a innymi urządzeniami. John von Neumann włączył jednostkę sterującą jako część architektury von Neumanna., W nowoczesnych konstrukcjach komputerowych jednostka sterująca jest zazwyczaj wewnętrzną częścią procesora, a jej ogólna rola i działanie pozostają niezmienione od czasu jej wprowadzenia.

jednostka logiki Arytmetycznejedytuj

Główny artykuł: Jednostka logiki arytmetycznej

symboliczna reprezentacja ALU i jego sygnałów wejściowych i wyjściowych

Jednostka logiki arytmetycznej (ALU) jest cyfrowym obwodem w procesorze, który wykonuje operacje arytmetyczno-bitowe., Wejścia do Alu to słowa danych, na których należy operować( zwane operandami), informacje o stanie z poprzednich operacji oraz kod z jednostki sterującej wskazujący, którą operację wykonać. W zależności od wykonywanej instrukcji, operandy mogą pochodzić z wewnętrznych rejestrów PROCESORA lub pamięci zewnętrznej, lub mogą być stałymi generowanymi przez samo ALU.

gdy wszystkie sygnały wejściowe osiadły i rozprzestrzeniły się przez obwody ALU, wynik wykonanej operacji pojawia się na wyjściach ALU., Wynik składa się zarówno ze Słowa danych, które mogą być przechowywane w rejestrze lub pamięci, jak i informacji o stanie, które są zazwyczaj przechowywane w specjalnym, wewnętrznym rejestrze CPU zarezerwowanym do tego celu.

jednostka generowania Adresówedytuj

Główny artykuł: jednostka generowania adresów

jednostka generowania adresów (Agu), czasami nazywana również jednostką obliczeniową adresów (ACU), jest jednostką wykonawczą wewnątrz procesora, która oblicza adresy używane przez procesor do uzyskania dostępu do pamięci głównej., Dzięki temu, że obliczenia adresów są obsługiwane przez oddzielne obwody działające równolegle z resztą procesora, można zmniejszyć liczbę cykli procesora wymaganych do wykonywania różnych instrukcji maszynowych, co przynosi poprawę wydajności.

podczas wykonywania różnych operacji Procesory muszą obliczać adresy pamięci wymagane do pobierania danych z pamięci; na przykład pozycje w pamięci elementów tablicy muszą być obliczone, zanim procesor będzie mógł pobrać dane z rzeczywistych lokalizacji pamięci., Obliczenia generowania adresów obejmują różne operacje arytmetyczne, takie jak dodawanie, odejmowanie, operacje modulo lub przesunięcia bitów. Często obliczanie adresu pamięci obejmuje więcej niż jedną ogólną instrukcję maszynową, która niekoniecznie szybko dekoduje i wykonuje. Dzięki włączeniu AGU do konstrukcji procesora, wraz z wprowadzeniem specjalistycznych instrukcji wykorzystujących AGU, różne obliczenia generowania adresów mogą być odciążone od reszty procesora i często mogą być wykonywane szybko w jednym cyklu procesora.,

możliwości AGU zależą od konkretnego procesora i jego architektury. Tak więc niektóre AGUs implementują i ujawniają więcej operacji obliczania adresów, podczas gdy niektóre zawierają również bardziej zaawansowane specjalistyczne instrukcje, które mogą działać na wielu operandach naraz. Co więcej, niektóre architektury CPU zawierają wiele jednostek Agu, więc więcej niż jedna operacja obliczania adresu może być wykonywana jednocześnie, przynosząc dalsze ulepszenia wydajności poprzez wykorzystanie nadskalarnej natury zaawansowanych projektów CPU., Na przykład Intel wykorzystuje wiele Agu w swoich Mikroarchitekturach Sandy Bridge i Haswell, które zwiększają przepustowość podsystemu pamięci procesora, umożliwiając równoległe wykonywanie wielu instrukcji dostępu do pamięci.

Memory management unit (MMU)Edit

Główny artykuł: Memory management unit

większość zaawansowanych mikroprocesorów (w komputerach stacjonarnych, laptopach, serwerach) ma jednostkę zarządzania pamięcią, tłumaczącą logiczne adresy na fizyczne adresy RAM, zapewniającą ochronę pamięci i możliwości stronicowania, przydatne dla pamięci wirtualnej., Prostsze procesory, zwłaszcza mikrokontrolery, zwykle nie zawierają MMU.cacheedit

pamięć podręczna CPU jest sprzętową pamięcią podręczną używaną przez jednostkę centralną (CPU) komputera w celu zmniejszenia średniego kosztu (czasu lub energii) dostępu do danych z pamięci głównej. Pamięć podręczna to mniejsza, szybsza pamięć, bliżej rdzenia procesora, która przechowuje kopie danych z często używanych głównych lokalizacji pamięci. Większość procesorów ma różne niezależne pamięci podręczne, w tym pamięci podręczne instrukcji i danych, gdzie pamięć podręczna danych jest zwykle zorganizowana jako hierarchia większej liczby poziomów pamięci podręcznej (L1, L2, L3, L4, itd.,).

wszystkie nowoczesne (szybkie) procesory (z kilkoma wyspecjalizowanymi wyjątkami) mają wiele poziomów pamięci podręcznej procesora. Pierwszy procesor, który używał pamięci podręcznej, miał tylko jeden poziom pamięci podręcznej; w przeciwieństwie do późniejszych pamięci podręcznych poziomu 1, nie był podzielony na L1d (dla danych) i L1i (dla instrukcji). Prawie wszystkie obecne procesory z pamięcią podręczną mają podzieloną pamięć podręczną L1. Mają również pamięć podręczną L2 i, w przypadku większych procesorów, pamięć podręczną L3. Pamięć podręczna L2 zwykle nie jest dzielona i działa jako wspólne repozytorium dla już podzielonej pamięci podręcznej L1. Każdy rdzeń PROCESORA wielordzeniowego ma dedykowaną pamięć podręczną L2 i zwykle nie jest współdzielony między rdzeniami., Pamięć podręczna L3 i pamięć podręczna wyższego poziomu są współdzielone między rdzeniami i nie są dzielone. Pamięć podręczna L4 jest obecnie rzadkością i jest zwykle stosowana w pamięci dynamicznej o dostępie losowym (DRAM), a nie w statycznej pamięci o dostępie losowym (SRAM), na osobnej matrycy lub chipie. Tak było również w przypadku L1, podczas gdy większe układy pozwoliły na integrację go i ogólnie wszystkich poziomów pamięci podręcznej, z możliwym wyjątkiem ostatniego poziomu. Każdy dodatkowy poziom pamięci podręcznej jest większy i jest różnie optymalizowany.,

istnieją inne typy pamięci podręcznych (które nie są liczone do „rozmiaru pamięci podręcznej” najważniejszych pamięci podręcznych wymienionych powyżej), takie jak bufor translacji lookaside (TLB), który jest częścią jednostki zarządzania pamięcią (MMU), którą ma większość procesorów.

bufory są zwykle wielkości dwóch: 4, 8, 16 itd. IBM Z13 posiada pamięć podręczną instrukcji L1 o pojemności 96 KiB.

wskaźnik Zegaraedytuj

Główny artykuł: wskaźnik zegara

większość procesorów to układy synchroniczne, co oznacza, że wykorzystują sygnał zegara do tempa swoich sekwencyjnych operacji., Sygnał zegara jest wytwarzany przez zewnętrzny obwód oscylatora, który generuje stałą liczbę impulsów w każdej sekundzie w postaci okresowej fali kwadratowej. Częstotliwość impulsów zegara określa szybkość, z jaką procesor wykonuje instrukcje, a co za tym idzie, im szybszy zegar, tym więcej instrukcji procesor będzie wykonywał w każdej sekundzie.

aby zapewnić prawidłowe działanie PROCESORA, czas zegara jest dłuższy niż maksymalny czas potrzebny na propagację (przenoszenie) wszystkich sygnałów przez procesor., Ustawiając okres zegara na wartość znacznie powyżej najgorszego opóźnienia propagacji, możliwe jest zaprojektowanie całego procesora i sposobu, w jaki przenosi on dane wokół „krawędzi” rosnącego i spadającego sygnału zegara. Ma to tę zaletę, że znacznie upraszcza procesor, zarówno z perspektywy projektowania, jak i z perspektywy liczby komponentów. Jednak niesie to również wadę, że cały procesor musi czekać na swoje najwolniejsze elementy, mimo że niektóre jego części są znacznie szybsze. Ograniczenie to zostało w dużej mierze skompensowane przez różne metody zwiększania równoległości procesora (patrz poniżej).,

jednak same ulepszenia architektoniczne nie rozwiązują wszystkich wad globalnie synchronicznych procesorów. Na przykład sygnał zegara podlega opóźnieniom jakiegokolwiek innego sygnału elektrycznego. Wyższe taktowanie w coraz bardziej złożonych procesorach utrudnia utrzymanie sygnału zegara w fazie (synchronizacji) w całym urządzeniu. Spowodowało to, że wiele nowoczesnych procesorów wymagało dostarczenia wielu identycznych sygnałów Zegara, aby uniknąć opóźniania pojedynczego sygnału na tyle znacząco, aby spowodować awarię procesora., Innym poważnym problemem, ponieważ częstotliwość taktowania dramatycznie wzrasta, jest ilość ciepła, które jest rozpraszane przez procesor. Stale zmieniający się zegar powoduje przełączanie wielu komponentów niezależnie od tego, czy są one używane w tym czasie. Ogólnie rzecz biorąc, element przełączający zużywa więcej energii niż element w stanie statycznym. W związku z tym, wraz ze wzrostem częstotliwości taktowania, wzrasta zużycie energii, co powoduje, że procesor wymaga większego rozpraszania ciepła w postaci rozwiązań chłodzenia procesora.,

jedną z metod radzenia sobie z przełączaniem niepotrzebnych komponentów jest tzw. clock gating, polegający na wyłączeniu sygnału zegara na niepotrzebne komponenty (skutecznie je wyłączając). Jest to jednak często uważane za trudne do wdrożenia i dlatego nie widzi powszechnego zastosowania poza konstrukcjami o bardzo małej mocy. Jednym z godnych uwagi najnowszych projektów procesorów, które wykorzystują rozbudowane Zegary gating jest Xenon oparty na IBM PowerPC używany w Xbox 360; w ten sposób wymagania dotyczące mocy Xbox 360 są znacznie zmniejszone., Innym sposobem rozwiązania niektórych problemów z globalnym sygnałem zegarowym jest całkowite usunięcie sygnału zegarowego. Podczas gdy usunięcie globalnego sygnału zegara sprawia, że proces projektowania jest znacznie bardziej skomplikowany pod wieloma względami, asynchroniczne (lub bez zegara) projekty mają wyraźne zalety w zakresie zużycia energii i rozpraszania ciepła w porównaniu z podobnymi projektami synchronicznymi. Chociaż jest to dość rzadkie, całe procesory asynchroniczne zostały zbudowane bez użycia globalnego sygnału zegara. Dwa godne uwagi przykłady to amulet zgodny z ARM i MiniMIPS zgodny z MIPS R3000.,

zamiast całkowicie usuwać sygnał zegara, niektóre konstrukcje procesora pozwalają pewnym częściom urządzenia być asynchroniczne, takie jak użycie asynchronicznego Alu w połączeniu z nadskalarnym pipeliningiem w celu osiągnięcia pewnych zysków z wydajności arytmetycznej. Chociaż nie jest całkowicie jasne, czy całkowicie asynchroniczne projekty mogą wykonywać na porównywalnym lub lepszym poziomie niż ich synchroniczne odpowiedniki, oczywiste jest, że wykonują co najmniej excel w prostszych operacjach matematycznych., To, w połączeniu z ich doskonałym poborem mocy i właściwościami rozpraszania ciepła, czyni je bardzo odpowiednimi dla komputerów wbudowanych.

Moduł Regulatora Napięciaedytuj

Główny artykuł: Moduł Regulatora Napięcia

wiele nowoczesnych procesorów ma zintegrowany moduł zarządzania mocą, który reguluje napięcie zasilania na żądanie do obwodów procesora, pozwalając mu zachować równowagę między wydajnością a poborem mocy.

Liczba liczbaedytuj

każdy procesor reprezentuje wartości liczbowe w określony sposób., Na przykład, niektóre wczesne komputery cyfrowe reprezentowały liczby jako znane wartości dziesiętne (baza 10), a inne używały bardziej nietypowych reprezentacji, takich jak trójki (baza trzy). Prawie wszystkie nowoczesne procesory reprezentują liczby w postaci binarnej, przy czym każda cyfra jest reprezentowana przez pewną dwuwymiarową wielkość fizyczną, taką jak „wysokie” lub „niskie” napięcie.

sześciobitowe słowo zawierające kodowaną binarnie reprezentację wartości dziesiętnej 40. Większość nowoczesnych procesorów wykorzystuje rozmiary słów, które są potęgą dwóch, na przykład 8, 16, 32 lub 64 bitów.,

związana z reprezentacją liczbową jest wielkością i precyzją liczb całkowitych, które może reprezentować procesor. W przypadku procesora binarnego jest to mierzone przez liczbę bitów (znaczących cyfr binarnej kodowanej liczby całkowitej), które procesor może przetworzyć w jednej operacji, która jest powszechnie nazywana rozmiarem słowa, szerokością bitów, szerokością ścieżki danych, dokładnością całkowitą lub rozmiarem całkowitym. Rozmiar liczby całkowitej procesora określa zakres wartości całkowitych, na których może on bezpośrednio działać., Na przykład 8-bitowy procesor może bezpośrednio manipulować liczbami całkowitymi reprezentowanymi przez osiem bitów, które mają zakres 256 (28) dyskretnych wartości całkowitych.

zakres liczb całkowitych może również wpływać na liczbę miejsc pamięci, które CPU może bezpośrednio adresować (adres jest wartością całkowitą reprezentującą określoną lokalizację pamięci). Na przykład, Jeśli procesor binarny używa 32 bitów do reprezentowania adresu pamięci, to może bezpośrednio adresować 232 miejsca pamięci. Aby obejść to ograniczenie i z różnych innych powodów, niektóre procesory używają mechanizmów (takich jak przełączanie banków), które umożliwiają adresowanie dodatkowej pamięci.,

procesory o większych rozmiarach wymagają więcej obwodów, a co za tym idzie są fizycznie większe, kosztują więcej i zużywają więcej energii (a tym samym generują więcej ciepła). W rezultacie mniejsze mikrokontrolery 4 – lub 8-bitowe są powszechnie stosowane w nowoczesnych aplikacjach, mimo że dostępne są procesory o znacznie większych rozmiarach (takich jak 16, 32, 64, a nawet 128-bitowe). Jednak gdy wymagana jest wyższa wydajność, zalety większego rozmiaru słowa (większe zakresy danych i przestrzenie adresowe) mogą przeważać nad wadami. Procesor może mieć wewnętrzne ścieżki danych krótsze niż rozmiar słowa, aby zmniejszyć rozmiar i koszty., Na przykład, nawet jeśli zestaw instrukcji IBM System/360 był 32-bitowym zestawem instrukcji, System/360 Model 30 i Model 40 miały 8-bitowe ścieżki danych w jednostce arytmetyczno-logicznej, tak że 32-bitowy dodatek wymagał czterech cykli, po jednym na każde 8 bitów operandów, a nawet jeśli zestaw instrukcji Motorola 68000 series był 32-bitowym zestawem instrukcji, Motorola 68000 i Motorola 68010 miały 16-bitowe ścieżki danych w jednostce arytmetyczno-logicznej, tak że 32-bitowy bit dodaj wymagane dwa cykle.,

aby uzyskać pewne korzyści wynikające zarówno z niższych, jak i wyższych długości bitów, wiele zestawów instrukcji ma różne szerokości bitów dla danych całkowitych i zmiennoprzecinkowych, dzięki czemu Procesory implementujące ten zestaw instrukcji mogą mieć różne szerokości bitów dla różnych części urządzenia. Na przykład zestaw instrukcji IBM System/360 był pierwotnie 32-bitowy, ale obsługiwał 64-bitowe wartości zmiennoprzecinkowe, aby ułatwić większą dokładność i zakres w liczbach zmiennoprzecinkowych., System / 360 Model 65 miał 8-bitowy adder dla arytmetyki dziesiętnej i stacjonarnej oraz 60-bitowy adder dla arytmetyki zmiennoprzecinkowej. Wiele późniejszych konstrukcji procesorów wykorzystuje podobną mieszaną szerokość bitów, zwłaszcza gdy procesor jest przeznaczony do użytku ogólnego, gdzie wymagana jest rozsądna równowaga liczby całkowitej i zmiennoprzecinkowej.,

ParallelismEdit

Główny artykuł: obliczenia równoległe
Model podskalarnego procesora, w którym wykonanie trzech instrukcji zajmuje piętnaście cykli zegara

opis podstawowej pracy procesora oferowany w poprzedniej sekcji opisuje najprostszą formę, która pozwala na procesor może wziąć. Ten typ procesora, zwykle określany jako subscalar, działa i wykonuje jedną instrukcję na jednej lub dwóch kawałkach danych na raz, czyli mniej niż jedną instrukcję na cykl zegara (IPC < 1).,

proces ten powoduje nieodłączną nieefektywność procesorów podskalarnych. Ponieważ tylko jedna instrukcja jest wykonywana na raz, cały procesor musi poczekać na jej zakończenie przed przejściem do następnej instrukcji. W rezultacie procesor podskalarny zostaje „zawieszony” na instrukcjach, które wymagają więcej niż jednego cyklu zegara, aby ukończyć wykonanie. Nawet dodanie drugiej jednostki wykonawczej (patrz niżej) nie poprawia znacznie wydajności; zamiast zawieszać jedną ścieżkę, teraz zawieszają się dwie ścieżki i zwiększa się liczba nieużywanych tranzystorów., Ten projekt, w którym zasoby wykonawcze procesora mogą działać tylko na jednej instrukcji na raz, może tylko ewentualnie osiągnąć wydajność skalarną (jedna instrukcja na cykl zegara, IPC = 1). Jednak wydajność jest prawie zawsze podskalarna (mniej niż jedna instrukcja na cykl zegara, IPC < 1).

próby osiągnięcia skalarnej i lepszej wydajności doprowadziły do powstania różnych metod projektowania, które powodują, że procesor zachowuje się mniej liniowo, a bardziej równolegle., W odniesieniu do równoległości w procesorach, do klasyfikacji tych technik projektowych używa się zwykle dwóch terminów:

  • równoległość na poziomie instrukcji (ILP), która ma na celu zwiększenie szybkości wykonywania instrukcji w procesorze (czyli zwiększenie wykorzystania zasobów wykonawczych na matrycy);
  • równoległość na poziomie zadań (TLP), która ma na celu zwiększenie liczby wątków lub procesów, które procesor może wykonać jednocześnie.,

każda metodologia różni się zarówno sposobem, w jaki są implementowane, jak również względną skutecznością, na jaką pozwalają w zwiększaniu wydajności procesora dla aplikacji.

równoległość na poziomie Instrukcjiedit

Główny artykuł: równoległość na poziomie instrukcji

podstawowy pięciostopniowy rurociąg. W najlepszym przypadku ten rurociąg może utrzymać wskaźnik ukończenia jednej instrukcji na cykl zegara.,

jedną z najprostszych metod stosowanych do uzyskania zwiększonej równoległości jest rozpoczęcie pierwszych kroków pobierania i dekodowania instrukcji przed zakończeniem wykonywania poprzedniej instrukcji. Jest to najprostsza forma techniki znanej jako pipelining instrukcji i jest używana w prawie wszystkich nowoczesnych procesorach ogólnego przeznaczenia. Pipelining pozwala na wykonanie więcej niż jednej instrukcji w danym momencie poprzez rozbicie ścieżki wykonania na etapy dyskretne., Rozdzielenie to można porównać do linii montażowej, w której instrukcja jest bardziej kompletna na każdym etapie, dopóki nie opuści rurociągu wykonawczego i nie zostanie wycofana.

Pipelining wprowadza jednak możliwość sytuacji, w której wynik poprzedniej operacji jest potrzebny do zakończenia następnej operacji; warunek często określany jako konflikt zależności danych. Aby sobie z tym poradzić, należy zachować dodatkową ostrożność, aby sprawdzić tego rodzaju warunki i opóźnić część rurociągu instrukcji, jeśli tak się stanie., Oczywiście, osiągnięcie tego wymaga dodatkowych obwodów, więc procesory pipelinowe są bardziej złożone niż podskalarne(choć nie tak znacząco). Procesor pipelinowy może stać się bardzo prawie skalarny, hamowany tylko przez wstrzymanie pipelinu (Instrukcja wydająca więcej niż jeden cykl zegara na etapie).

prosty supersalarny rurociąg. Pobierając i wysyłając dwie instrukcje na raz, można wykonać maksymalnie dwie instrukcje na cykl zegara.,

dalsze udoskonalanie idei pipeliningu instrukcji doprowadziło do opracowania metody, która jeszcze bardziej skraca czas bezczynności komponentów procesora. Projekty, o których mówi się, że są nadskalarne, obejmują długi potok instrukcji i wiele identycznych jednostek wykonawczych, takich jak jednostki obciążenia, jednostki arytmetyczno-logiczne, jednostki zmiennoprzecinkowe i jednostki generowania adresów. W superscalarnym potoku wiele instrukcji jest odczytywanych i przekazywanych dyspozytorowi, który decyduje, czy instrukcje mogą być wykonywane równolegle (jednocześnie)., Jeśli tak, są one wysyłane do dostępnych jednostek wykonawczych, co daje możliwość jednoczesnego wykonywania kilku instrukcji. Ogólnie rzecz biorąc, im więcej instrukcji procesor nadskalarny jest w stanie wysłać jednocześnie do oczekujących jednostek wykonawczych, tym więcej instrukcji zostanie ukończonych w danym cyklu.

większość trudności w projektowaniu architektury supersalarnej CPU polega na stworzeniu skutecznego dyspozytora., Dyspozytor musi być w stanie szybko i poprawnie określić, czy instrukcje mogą być wykonywane równolegle, a także wysłać je w taki sposób, aby jak najwięcej jednostek wykonawczych było zajętych. Wymaga to, aby rurociąg instrukcji był wypełniany tak często, jak to tylko możliwe, i rodzi potrzebę w architekturach nadskalarnych znacznych ilości pamięci podręcznej procesora. Sprawia to również, że techniki unikania zagrożeń, takie jak przewidywanie gałęzi, realizacja spekulacyjna, zmiana nazwy rejestru, realizacja poza zleceniem i pamięć transakcyjna, mają kluczowe znaczenie dla utrzymania wysokiego poziomu wydajności., Próbując przewidzieć, którą gałąź (lub ścieżkę) przyjmie Instrukcja warunkowa, procesor może zminimalizować liczbę razy, kiedy cały potok musi czekać na ukończenie instrukcji warunkowej. Wykonywanie spekulacyjne często zapewnia niewielki wzrost wydajności poprzez wykonywanie części kodu, które mogą nie być potrzebne po zakończeniu operacji warunkowej. Out-of-order execution nieco zmienia kolejność wykonywania instrukcji w celu zmniejszenia opóźnień wynikających z zależności danych., Również w przypadku pojedynczego strumienia instrukcji, wielu strumieni danych—w przypadku, gdy wiele danych z tego samego typu ma być przetwarzane— nowoczesne procesory mogą wyłączyć części rurociągu, tak że gdy pojedyncza instrukcja jest wykonywana wiele razy, procesor pomija fazy pobierania i dekodowania, a tym samym znacznie zwiększa wydajność w pewnych sytuacjach, szczególnie w bardzo monotonnych silnikach programowych, takich jak oprogramowanie do tworzenia wideo i przetwarzanie zdjęć.,

w przypadku, gdy część CPU jest supersalarna, a część nie, część, która nie jest obciążona karą wydajności z powodu opóźnień w harmonogramie. Intel P5 Pentium miał dwa supersalarne Alu, które mogły przyjmować jedną instrukcję na cykl zegara, ale jego FPU nie mogło zaakceptować jednej instrukcji na cykl zegara. W ten sposób P5 był liczbą całkowitą superscalar, ale nie zmiennoprzecinkową superscalar. Następca architektury P5 firmy Intel, P6, dodał do swoich funkcji zmiennoprzecinkowych możliwości nadskalarne, a tym samym znacznie zwiększył wydajność instrukcji zmiennoprzecinkowych.,

zarówno prosta konstrukcja pipeliningu, jak i supersalarna zwiększają ILP procesora, umożliwiając pojedynczemu procesorowi wykonywanie instrukcji z szybkością przekraczającą jedną instrukcję na cykl zegara. Większość nowoczesnych procesorów jest co najmniej nieco supersalarna, a prawie wszystkie procesory ogólnego przeznaczenia zaprojektowane w ostatniej dekadzie są supersalarne. W późniejszych latach nacisk na projektowanie komputerów o wysokiej ILP został przeniesiony ze sprzętu procesora i do jego interfejsu programowego lub architektury zestawów instrukcji (Isa)., Strategia bardzo długiego słowa instrukcji (VLIW) powoduje, że niektóre ILP stają się implikowane bezpośrednio przez oprogramowanie, zmniejszając ilość pracy, jaką CPU musi wykonać, aby zwiększyć ILP, a tym samym zmniejszając złożoność projektu.

równoległość pozioma Zadaniaedytuj

główne artykuły: wielowątkowy i wielordzeniowy procesor

inną strategią osiągania wydajności jest równoległe wykonywanie wielu wątków lub procesów. Ten obszar badań jest znany jako równoległe computing. W taksonomii Flynna strategia ta jest znana jako multiple instruction stream, multiple data stream (mimd).,

jedną z technologii wykorzystywanych w tym celu było multiprocessing (MP). Początkowy smak tej technologii znany jest jako multiprocessing symetryczny (SMP), gdzie niewielka liczba procesorów ma spójny widok ich systemu pamięci. W tym schemacie każdy procesor ma dodatkowy sprzęt do utrzymywania stale aktualnego widoku pamięci. Unikając starych widoków pamięci, procesory mogą współpracować z tym samym programem, a programy mogą migrować z jednego procesora do drugiego., Aby zwiększyć liczbę współpracujących procesorów ponad garść, systemy takie jak niejednorodny dostęp do pamięci (NUMA) i protokoły koherencji oparte na katalogach zostały wprowadzone w latach 90. XX wieku. systemy SMP są ograniczone do niewielkiej liczby procesorów, podczas gdy systemy NUMA zostały zbudowane z tysięcy procesorów. Początkowo multiprocessing był zbudowany przy użyciu wielu dyskretnych procesorów i płyt do implementacji połączenia między procesorami., Gdy procesory i ich interkonekt są zaimplementowane na jednym chipie, technologia jest znana jako chip-level multiprocessing (CMP), a pojedynczy chip jako procesor wielordzeniowy.

później uznano, że równoległość drobnoziarnista istnieje z jednym programem. Pojedynczy program może mieć kilka wątków (lub funkcji), które mogą być wykonywane osobno lub równolegle. Niektóre z najwcześniejszych przykładów tej technologii zaimplementowane przetwarzania wejścia / wyjścia, takie jak bezpośredni dostęp do pamięci jako oddzielny wątek z wątku obliczeniowego., Bardziej ogólne podejście do tej technologii zostało wprowadzone w 1970 roku, kiedy systemy zostały zaprojektowane do uruchamiania wielu wątków obliczeniowych równolegle. Technologia ta jest znana jako multi-threading (MT). Takie podejście jest uważane za bardziej opłacalne niż przetwarzanie wieloprocesorowe, ponieważ tylko niewielka liczba komponentów w procesorze jest replikowana w celu obsługi MT, w przeciwieństwie do całego procesora w przypadku MP. W MT jednostki wykonawcze i system pamięci, w tym pamięci podręczne, są współdzielone między wieloma wątkami., Minusem MT jest to, że wsparcie sprzętowe dla wielowątkowości jest bardziej widoczne dla oprogramowania niż MP i dlatego oprogramowanie nadzorcze, takie jak systemy operacyjne, musi przejść większe zmiany, aby wspierać MT. Jeden typ MT, który został zaimplementowany jest znany jako temporal multithreading, gdzie jeden wątek jest wykonywany, dopóki nie zostanie zatrzymany w oczekiwaniu na powrót danych z pamięci zewnętrznej. W tym schemacie procesor szybko przełączy się na inny wątek, który jest gotowy do działania, przełącznik często odbywa się w jednym cyklu zegara procesora, np. UltraSPARC T1., Innym typem MT jest jednoczesna wielowątkowość, gdzie instrukcje z wielu wątków są wykonywane równolegle w ramach jednego cyklu zegara procesora.

przez kilka dekad od lat 70.do początku 2000 roku, nacisk na projektowanie wysokowydajnych procesorów ogólnego przeznaczenia był głównie na osiągnięcie wysokiej ILP poprzez technologie takie jak pipelining, Cache, superscalar execution, out-of-order execution, itp. Ten trend osiągnął kulminację w dużych, energooszczędnych procesorach, takich jak Intel Pentium 4., Na początku 2000 roku projektanci CPU nie mogli osiągnąć wyższej wydajności dzięki technikom ILP ze względu na rosnące różnice między częstotliwościami pracy procesora a częstotliwościami pracy pamięci głównej, a także nasilające się rozpraszanie mocy procesora dzięki bardziej ezoterycznym technikom ILP.

projektanci procesorów zapożyczyli następnie pomysły z komercyjnych rynków obliczeniowych, takich jak przetwarzanie transakcji, gdzie łączna wydajność wielu programów, znana również jako przetwarzanie przepustowości, była ważniejsza niż wydajność pojedynczego wątku lub procesu.,

o odwróceniu nacisku świadczy rozpowszechnienie konstrukcji procesorów dwurdzeniowych i bardziej rdzeniowych, a w szczególności nowsze konstrukcje Intela przypominające mniej nadskalowaną architekturę P6. Procesory z serii x86-64 Opteron i Athlon 64 X2, SPARC UltraSPARC T1, IBM POWER4 i POWER5, a także kilka procesorów konsoli do gier wideo, takich jak Trójrdzeniowy PowerPC na konsolę Xbox 360 oraz 7-rdzeniowy mikroprocesor Cell na konsolę PlayStation 3.,

paralelizm Danychedytuj

główne artykuły: procesor wektorowy I SIMD

mniej powszechny, ale coraz ważniejszy paradygmat procesorów (i rzeczywiście, informatyki w ogóle) zajmuje się paralelizmem danych. Procesory omówione wcześniej są określane jako jakiś typ urządzenia skalarnego. Jak sama nazwa wskazuje, procesory wektorowe zajmują się wieloma fragmentami danych w kontekście jednej instrukcji. To kontrastuje z procesorami skalarnymi, które zajmują się jednym kawałkiem danych dla każdej instrukcji., Korzystając z taksonomii Flynna, te dwa schematy postępowania z danymi są ogólnie określane jako odpowiednio pojedynczy strumień instrukcji, strumień wielu danych (SIMD) i pojedynczy strumień instrukcji, pojedynczy strumień danych (sisd). Wielka użyteczność w tworzeniu procesorów, które zajmują się wektorami danych, polega na optymalizacji zadań, które zwykle wymagają tej samej operacji (na przykład sumy lub produktu kropkowego), które mają być wykonywane na dużym zestawie danych. Niektóre klasyczne przykłady tego typu zadań obejmują aplikacje multimedialne (obrazy, wideo i dźwięk), a także wiele rodzajów zadań naukowych i inżynierskich., Podczas gdy procesor skalarny musi ukończyć cały proces pobierania, dekodowania i wykonywania każdej instrukcji i wartości w zestawie danych, procesor wektorowy może wykonać jedną operację na stosunkowo dużym zestawie danych za pomocą jednej instrukcji. Jest to możliwe tylko wtedy, gdy aplikacja wymaga wielu kroków, które stosują jedną operację do dużego zestawu danych.

większość wczesnych procesorów wektorowych, takich jak Cray-1, była związana prawie wyłącznie z badaniami naukowymi i aplikacjami kryptograficznymi., Jednak, ponieważ multimedia w dużej mierze przesunęły się na media cyfrowe, zapotrzebowanie na jakąś formę SIMD w procesorach ogólnego przeznaczenia stało się znaczące. Krótko po tym, jak włączenie jednostek zmiennoprzecinkowych stało się powszechne w procesorach ogólnego przeznaczenia, zaczęły pojawiać się specyfikacje i implementacje jednostek wykonawczych SIMD również dla procesorów ogólnego przeznaczenia. Niektóre z tych wczesnych specyfikacji SIMD – Jak Rozszerzenia akceleracji multimediów HP (MAX) i MMX Intela-były tylko liczbami całkowitymi., Okazało się to poważnym utrudnieniem dla niektórych programistów, ponieważ wiele aplikacji korzystających z SIMD zajmuje się głównie liczbami zmiennoprzecinkowymi. Programiści stopniowo udoskonalali i przerabiali te wczesne projekty do niektórych popularnych współczesnych specyfikacji SIMD, które są zwykle związane z architekturą jednego zestawu instrukcji (Isa). Niektóre godne uwagi nowoczesne przykłady obejmują Intel”Streaming SIMD Extensions (SSE) i związanych z PowerPC altivec (znany również jako VMX).


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *