Jakie są różne typy architektur komputerowych?

20

Przeglądam książkę „Elementy systemów obliczeniowych”. Ta książka uczy, jak zbudować cały komputer od podstaw. Podczas przeglądania właśnie rozdziałów poświęconych architekturze komputerowej zauważyłem, że wszystko koncentruje się na architekturze von Neumanna. Byłem ciekawy, jakie są inne architektury oraz kiedy i gdzie są one używane.

Wiem tylko o dwóch, jednym jest Von Neumann, a drugim Harvard. Wiem także o RISC, który jest używany w uC AVR.

Rick_2047
źródło
2
Istnieje trzeci, który jest zmodyfikowany Harvard. Czysty Harvard nie byłby w stanie użyć tego samego magazynu do przechowywania programów i danych. Dlatego prawie każda implementacja Harvarda została zmodyfikowana, aby umożliwić adresowanie pamięci instrukcji jako danych.
goryl
1
świetne pytanie.
Anonimowy typ

Odpowiedzi:

27

Istnieje wiele różnych rodzajów architektur komputerowych.

Jednym ze sposobów kategoryzowania architektur komputerowych jest liczba instrukcji wykonywanych na zegar. Wiele komputerów obliczeniowych odczytuje jedną instrukcję na raz i wykonuje ją (lub wkładają wiele wysiłku, aby działać tak, jakby byłyrobią to, nawet jeśli wewnętrznie robią wymyślne rzeczy superskalarne i poza kolejnością). Nazywam takie maszyny „maszynami von Neumanna”, ponieważ wszystkie mają wąskie gardło von Neumanna. Takie maszyny obejmują architektury CISC, RISC, MISC, TTA i DSP. Takie maszyny obejmują maszyny akumulatorowe, maszyny rejestrujące i maszyny do układania w stosy. Inne maszyny odczytują i wykonują kilka instrukcji naraz (VLIW, super-skalar), które przekraczają limit jednej instrukcji na zegar, ale wciąż uderzają w wąskie gardło von Neumanna przy nieco większej liczbie instrukcji na zegar. Jednak inne maszyny nie są ograniczone wąskim gardłem von Neumanna, ponieważ wstępnie ładują wszystkie swoje operacje po włączeniu zasilania, a następnie przetwarzają dane bez dalszych instrukcji. Takie maszyny inne niż Von-Neumann obejmują architektury przepływu danych,

Innym sposobem kategoryzowania architektur komputerów jest połączenie między procesorem a pamięcią. Niektóre maszyny mają zunifikowaną pamięć, tak że pojedynczy adres odpowiada pojedynczemu miejscu w pamięci, a gdy ta pamięć to RAM, można użyć tego adresu do odczytu i zapisu danych lub załadować ten adres do licznika programu w celu wykonania kodu. Nazywam te maszyny maszynami Princeton. Inne maszyny mają kilka oddzielnych przestrzeni pamięci, tak że licznik programu zawsze odnosi się do „pamięci programu” bez względu na załadowany do niego adres, a normalne odczyty i zapisy zawsze przechodzą do „pamięci danych”, która jest oddzielną lokalizacją zawierającą zwykle różne informacje, nawet jeśli bity adresu danych są identyczne z bitami adresu pamięci programu. Te maszyny to „czysty Harvard” lub „

Kilka osób stosuje wąską definicję „maszyny von Neumanna”, która nie obejmuje maszyn Harvarda. Jeśli jesteś jedną z tych osób, to jakiego terminu użyłbyś na bardziej ogólną koncepcję „maszyny, która ma wąskie gardło von Neumanna”, która obejmuje zarówno maszyny Harvarda, jak i Princetona i wyklucza NON-VON?

Większość systemów wbudowanych korzysta z architektury Harvard. Kilka procesorów to „czysty Harvard”, co jest być może najprostszym rozwiązaniem do wbudowania w sprzęt: magistrala adresowa do pamięci programu tylko do odczytu jest podłączona wyłącznie do licznika programów, na przykład wiele wczesnych mikroprocesorów Microchip. Niektóre zmodyfikowane maszyny Harvarda ponadto wprowadzają stałe do pamięci programu, które można odczytać specjalną instrukcją „odczytaj stałe dane z pamięci programu” (inną niż instrukcja „odczyt z pamięci danych”). Oprogramowanie działające na powyższych maszynach Harvarda nie może zmienić pamięci programu, która w rzeczywistości jest ROM dla tego oprogramowania. Niektóre systemy wbudowane są „programowalne”, zazwyczaj z pamięcią programu w pamięci flash i specjalnym „kasowanie bloku pamięci flash” instrukcja i specjalna instrukcja „zapisu bloku pamięci flash” (inna niż zwykła instrukcja „zapisu do pamięci danych”), oprócz instrukcji „odczytu danych z pamięci programu”. Kilka nowszych mikrochipów PICmicros i Atmel AVR to samowyprogramowalne zmodyfikowane maszyny Harvard.

Innym sposobem kategoryzacji procesorów jest ich zegar. Większość komputerów jest synchroniczna - mają jeden zegar globalny. Kilka procesorów jest asynchronicznych - nie mają zegara - w tym ILLIAC I i ILLIAC II, które kiedyś były najszybszymi superkomputerami na świecie.

Pomóż ulepszyć opis wszystkich rodzajów architektur komputerowych na stronie http://en.wikibooks.org/wiki/Microprocessor_Design/Computer_Architecture .

Davidcary
źródło
2
Wow, wstydź się, że tak długo powstrzymywałeś się od tej wiedzy PO zadaniu pytania.
Rick_2047,
3
@Rick - Wygląda na to, że odpowiedź zajęła dużo czasu. Bądź wdzięczny, że Davidcary poświęcił czas na odpowiedź na twoje pytanie! Niektóre osoby nie działają według tego samego harmonogramu, co Ty.
Kevin Vermeer,
2
@reemrevnivek, który miał być żartem.
Rick_2047,
Byłoby miło, gdyby ta odpowiedź została oznaczona jako odpowiedź społeczności wiki.
Trygve Laugstøl
8

CISC jest „przeciwieństwem” RISC. Podczas gdy RISC woli mieć proste instrukcje, które są łatwe do zoptymalizowania przez kompilator i często mają ten sam rozmiar, CISC lubi złożone instrukcje o różnej wielkości.

Na przykład instrukcja pop w CISC zmodyfikuje wskaźnik stosu i umieści dane ze stosu w innym rejestrze. Jednak procesor RISC odczytywałby dane jedną instrukcją, a następnie zmodyfikował wskaźnik stosu drugą instrukcją. (ogólnie; istnieją pewne wyjątki, takie jak PowerPC, które mogą aktualizować wskaźnik stosu i przekazywać dane na stos, ale to wyjątek)

Ponieważ instrukcje RISC są tego samego rozmiaru, deasemblery są łatwiejsze do napisania. Projektowanie procesora jest również łatwiejsze, ponieważ potok nie musi uwzględniać różnych rozmiarów instrukcji. Jednak gęstość kodu CISC wydaje się być lepsza, zarówno dlatego, że złożone instrukcje wymagają mniejszej liczby bajtów do reprezentowania tej samej liczby operacji, a także dlatego, że zmienna długość instrukcji pozwala na pewną „kompresję”.

Istnieją również inne egzotyczne architektury, takie jak VLIW / EPIC. Ten rodzaj architektury został zaprojektowany z myślą o równoległym przetwarzaniu. Jednak nie radzili sobie zbyt dobrze, ponieważ nakładają bardzo duży ciężar na kompilator, aby zoptymalizować, podczas gdy inne architektury mają fantazyjne okna instrukcji, które zwalniają pewne obciążenie optymalizacji z kompilatora.

ajs410
źródło
1
jeśli ci się podoba, zaakceptuj to.
Kortuk
5

Cóż, istnieje coś takiego jak ENIAC, w którym masz w zasadzie indywidualne ALU i „programujesz” je, łącząc wyjście jednego alu z wejściem innego alu, który miał wykonać następną operację na tej zmiennej pośredniej. Twoje „rejestry” i pamięć to przewody łączące alus.

Niedawno kupiłem książkę „The First Computers - History and Architectures (History of Computing)”, która częściowo skupia się na tym właśnie temacie. Nie polecam kupowania tej książki, chociaż jest to tylko zbiór prac naukowych, trudnych do przeczytania i podejrzewam, że prawdopodobnie opublikowałem (za darmo) gdzie indziej. (Poddałem się przed ukończeniem wprowadzenia)

Kiedy pamięć została wynaleziona i stała się praktyczna, trochę się osiedliliśmy w dwóch popularnych Von Neumann i Harvard. Wykonywanie z ponownego okablowania, kart dziurkowanych, taśmy papierowej itp. Stało się mniej praktyczne. I jest oparty na stosie (na przykład ZPU), który, jak podejrzewam, prawdopodobnie należy do kategorii Harvard, a nie do własnej.

Co z platformami von neumann, które uruchamiają pamięć flash tylko do odczytu (w normalnym użyciu) na jednym interfejsie pamięci i mają ramkę danych do odczytu / zapisu w innym (który czasami może działać na obu równolegle), ale z perspektywy programów są w jednym przestrzeń adresowa? Lub te, które mają kilka wewnętrznych / zewnętrznych pamięci / interfejsów, wszystkie działają równolegle, ale są von neumann, ponieważ znajdują się w tej samej przestrzeni adresowej.

A jaką zaletą jest platforma Harvard, na której procesor nie może uzyskać dostępu do pamięci instrukcji jako danych w celu zmiany / aktualizacji bootloadera lub załadowania następnego programu do uruchomienia? Dlaczego nie jest to architektura von neumanna? Czy procesor wykonuje tę samą pamięć na tym samym interfejsie i działa na niej prawdopodobnie w sposób sekwencyjny (pobieranie instrukcji i zapisywanie pamięci nie dzieje się w tym samym czasie)?

Dwie popularne architektury oparte na pamięci są bardziej zbliżone niż różnią się w obecnych implementacjach IMO.

Gdzie spada GPU? Lub firma, w której pracuję, procesory sieciowe (NPU). Tam, gdzie masz te stosunkowo małe silniki specjalne (procesory), które wykonują z ram programu typu harvard (adresowalne, ale po prostu nie chcesz tego robić ze względu na wydajność), działaj na różnych ramkach danych, z których każdy ma własną oddzielną przestrzeń adresową (oddzielny procesor instrukcje dla każdej przestrzeni), (przestrzenie pamięci działające równolegle) i przez te pamięci RAM przekazują dane pośrednie, aby następne obliczenia zostały wykonane przez następną mikro-maszynę w sposób podobny do przewodowego alu (eniac)? Jak byś to nazwał? Czy npus i gpus są po prostu fantazyjnie zmodyfikowanymi architekturami Harvarda?

old_timer
źródło
„jaką zaletą jest platforma Harvard, na której procesor nie może… załadować następnego programu do uruchomienia?” Wiele procesorów ma ustalony program, którego nie można zmienić za pomocą oprogramowania działającego na tym procesorze. Jedną z zalet tego rozwiązania jest to, że uniemożliwia „zamurowanie” systemu błędem, który zapisuje w losowej pamięci lub złą aktualizacją oprogramowania, a nawet dobrą aktualizacją oprogramowania i awarią zasilania w czasie. Utrudnia to aktualizację oprogramowania - ale tak naprawdę, ile razy zmieniałeś oprogramowanie w kuchence mikrofalowej?
davidcary,
2
W kuchence mikrofalowej brak, ale spędzam sporo czasu na kodowaniu mikrokontrolerów i ładowaniu oprogramowania wiele razy dziennie. Ograniczając się do małych, wolnych od błędów systemów opartych na romach, problem murowania można łatwo rozwiązać za pomocą von neumanna. Systemy, które opisujesz, mają niewielkie zastosowanie dla zwiększenia wydajności oddzielnych magistral, co jest kolejną cechą architektury Harvarda. Chodzi mi o to, że architektura Harvarda po prostu nie skaluje się dobrze bez możliwości ładowania programów, co czyni ją nieco przestarzałą.
old_timer
1
Hmm, nazywają harvard cortex-m3, kiedy tak naprawdę nie jest, tak samo jak avr (no cóż, nazywają go harvard zmodyfikowany). Jestem pewien, że istnieją pewne procesory czystej architektury Harvarda (PIC), które kiedyś były bardziej czyste von neumann, ale większość z nich to zmodyfikowane harvard lub zmodyfikowane von neumann (równoległe dostępy do danych i instrukcji), dzięki czemu są one bardziej takie same niż różne. Właśnie tam zmierzałem w odpowiedzi, czysty harwar i von neumann szybko stają się przestarzałe. Plakat chce wiedzieć, co jeszcze tam jest, prawie wszystko tam.
old_timer
4

Zarówno architektury von Neumann, jak i Harvard mogą być używane z procesorami RISC, takimi jak AVR i ARM. AVR wykorzystuje Harvard, podczas gdy niektóre układy ARM używają von Neumann, a niektóre Harvard.

Leon Heller
źródło
-1, aby posortować Cię poniżej bardziej interesujących odpowiedzi.
Oskar Skog