Pytanie:
Co uniemożliwia budowę procesora z całą niezbędną pamięcią reprezentowaną w rejestrach?
user173317
2019-03-04 10:25:24 UTC
view on stackexchange narkive permalink

Nowoczesne procesory wykorzystują hierarchię technologii pamięci. Rejestry wbudowane w chip mają najkrótsze czasy dostępu, ale są drogie i niestabilne. Pamięć podręczna jest pośrednikiem między pamięcią RAM a rejestrami do przechowywania struktur danych w celu zmniejszenia opóźnień między pamięcią RAM a rejestrami. Pamięć RAM zawiera, dla zakresu tego zapytania, aktywny kod programu i jego struktury danych. Pamięć nieulotna jest używana przez programy do zapisywania danych i przechowywania systemu operacyjnego i jego programów.

Opóźnienie dostępu do danych w pamięci było głównym wąskim gardłem w tworzeniu szybszych procesorów, które nie pozostają bezczynne, oczekując na dalsze instrukcje. W związku z tym zaprojektowano różne metody zrównoleglania obciążeń, procesory CPU do przewidywania rozgałęzień w celu ukrycia narzutu dostępu do pamięci i nie tylko. Jednak złożoność tego pozornie zignorowała inną możliwość: plik rejestru całej pamięci.

Taki procesor jest zbudowany z 4, 8, 16, 32 GB lub więcej, zbudowanych z rejestrów. Brak pamięci podręcznej. Brak pamięci RAM. Tylko procesor, rejestry w chipie i zewnętrzna pamięć nieulotna (SSD / Flash, HDD itp.).

Rozumiem, że popyt na taki chip raczej nie będzie wystarczający, aby uzasadnić koszt, ale jestem zaskoczony, że nikt nie zaprojektował prostego urządzenia, takiego jak wysokowydajny MCU lub SoC z niewielką ilością pamięci tylko rejestrowej. Czy istnieją inne (być może techniczne) wyzwania związane z projektowaniem i budową takiego chipa?

EDYTUJ, aby wyjaśnić. Nie mam na myśli procesora, w którym cała pamięć (technologia DRAM) jest zintegrowana z kością procesora, ani nie odnoszę się do pamięci podręcznej rozszerzonej do wielu gigabajtów. Pytam o projekt, w którym rejestry pozostają ich istniejącą technologią ... po prostu rozbudowane o kilka rzędów wielkości, aby móc przechowywać wiele gigabajtów danych.

Jaka aplikacja, o której myślisz, wymaga tak niesamowitej szybkości, ale bardzo małej pamięci?Myślę, że jest też dużo więcej obwodów pomocniczych dla każdego rejestru niż dla SRAM.Najbliższą rzeczą jest prawdopodobnie FPGA.
Konstrukcja procesora SPARC pozwala na około 520 rejestrów.Dzielą to na różne „okna”, które są mniejszymi częściami tego.(Nawiasem mówiąc, nie znam żadnego SPARC, który implementowałby wszystkie 520, tak przy okazji.) Implementacja dwuportowych rejestrów do odczytu / zapisu jest kosztowna.A te muszą działać z pełną szybkością zegara.Większe układy pamięci wymagają więcej czasu i szybko przekraczają częstotliwość zegara, co wymaga opóźnień.W pewnym momencie jesteś z powrotem w systemie pamięci podręcznej.Możesz zorganizować szybszą pamięć podręczną L1 (mniejszą) z mniejszymi opóźnieniami taktowania z dodanymi L2 i L3 z dłuższymi układami.
Czy próbowałeś oszacować, ile sprzętu logicznego i miejsca na krzem będzie potrzebne, aby zaadresować (i uzyskać dostęp) do 32 GB rejestrów indywidualnie?A jakie byłoby związane z tym opóźnienie dostępu?
Cała pamięć zajmuje miejsce.Rejestry są pamięcią.Im więcej miejsca zajmujesz na rejestry, tym dalej są one oddalone od reszty rdzenia.Dzięki temu rozmowa z nimi będzie wolniejsza.
Jedynym powodem jest dość wysoki koszt.Aby to zrobić, potrzebujesz procesora wielkości talerza obiadowego, który kosztuje kilka milionów dolarów za sztukę, chłodzi ciekłym azotem, zużywa kilka kilowatów i również działa bardzo wolno.Czemu?Ponieważ każda instrukcja ma teraz trzy pola do adresowania rejestrów, każda 64-bitowa plus opkody, masz ponad 200-bitowe słowo instrukcji.
Ale wiem, że AVR faktycznie to zrobił: zapakował 512 słów pamięci jako SRAM, a plus bezpośrednie adresowanie pamięci, te SRAM są efektywnie rejestrami.Więc jest to rzeczywiście możliwe i zostało zrobione.
Jakie rejestry masz na myśli, które są szybsze niż 1600 MHz 1 czekaj na odczyt w 8 GB SDRAM?Jaki system operacyjny, jeśli w ogóle, będzie wspierać Twoją koncepcję?Koszt statycznej pamięci RAM procesora nie jest możliwy do uzasadnienia przyrostowej przepustowości taniej szybkiej pamięci SDRAM.Niektóre procesory mają teraz pamięć podręczną L1, L2 i L3
@user3528438 Nie. Oto jak zdefiniować rejestr: „lokalizacja pamięci, bezpośrednio dostępna dla CPU, która może być używana jako argumenty dla instrukcji”.A „instrukcje” oznaczają coś więcej niż tylko ładowanie / przechowywanie: bardziej przypomina na przykład wykonywanie operacji arytematycznych.Na 512 bajtach pamięci RAM w AVR nie można bezpośrednio wykonywać operacji arytmetycznych: te bajty nie są bezpośrednio połączone z procesorem.Musisz załadować dane z pamięci RAM do rzeczywistych rejestrów, a następnie wykonać instrukcje arytmetyczne na rejestrach.Wewnętrzna pamięć RAM w MCU nie jest zestawem rejestrów, nawet jeśli znajduje się w tym samym chipie.Nadal jedzie przez autobus.
Chipy PIC16 nazywają również wszystkie dostępne rejestry pamięci, dając kilka kilobajtów.Nie obsługują bezpośrednio pamięci zewnętrznej.
@dim: A co, jeśli masz instrukcję, która w zasadzie łączy ładowanie + inną operację + przechowywanie?Myślę, że żadne twarde rozróżnienie nie jest możliwe.Tradycyjnie ISA używają rejestrów procesora, ale w zasadzie są one bezpośrednio kontrolowaną pamięcią podręczną L0.
@Michael Tak naprawdę nic nie zmienia, jeśli istnieje instrukcja, która pozwala na połączenie pobrania wartości z pamięci + wykonanie na niej operacji arytmetycznej.Procesor x86 ma takie instrukcje, ale czy nadal miałoby sens rozważenie 16 GB pamięci DDR SDRAM za gigantyczny zestaw rejestrów?Chodzi o to, że nawet jeśli procesor je łączy, musi wykonać pobieranie, które przechodzi przez magistralę pamięci, zarządzane przez interfejs pamięci po stronie procesora, a następnie przechodzi przez arbitraż, a następnie dekoduje adres po stronie pamięci RAM itp... wszelkiego rodzaju rzeczy, które nie są potrzebne do uzyskania dostępu do rejestru.
Użyłem bardzo low-endowego układu PIC z 32 8-bitowymi rejestrami i bez jakiejkolwiek dodatkowej pamięci.Wspierał pośrednie adresowanie do tych rejestrów.
Osiem odpowiedzi:
Wouter van Ooijen
2019-03-04 13:03:22 UTC
view on stackexchange narkive permalink

Dwa czynniki są sprzeczne z Twoim pomysłem:

  • Optymalne procesy produkcji chipów dla (D) RAM i logiki (CPU) są różne.Połączenie obu na tym samym chipie prowadzi do kompromisów, a wynik jest znacznie mniej optymalny niż to, co można osiągnąć z oddzielnymi układami, z których każdy zbudowany jest według własnego optymalnego procesu.

  • szybka pamięć (rejestry) zajmuje więcej miejsca i zużywa więcej prądu (energii) niż wolna pamięć.W rezultacie, gdy kostka procesora jest wypełniona naprawdę szybką pamięcią (szybkością procesora), rozmiar tej pamięci nie byłby nigdzie zbliżony do wspomnianych GB.Bardziej przypominałoby to obecny rozmiar najszybszych wbudowanych pamięci podręcznych.

Moje poprzednie pytanie dotyczące dokładnych różnic w procesach: https://electronics.stackexchange.com/questions/134585/precise-differences-between-dram-and-cmos-processes
Czy możesz podać przybliżoną wartość różnicy w rozmiarze?Czy jest to współczynnik 2, 20, 200?
Komórka @PeteBecker DRAM wykorzystuje 1 tranzystor + pojemność, komórka SRAM (która jest bardziej podobna do rejestru) wykorzystuje około 6 tranzystorów.Możesz oszacować różnicę rozmiarów na podstawie tego.
To kolejna różnica, ale jest to górna część (oprócz) tego, o czym argumentowałem.Komórka DRAM zaimplementowana w procesie zoptymalizowanym pod kątem procesora będzie gorszej jakości od jednego producenta w procesie zoptymalizowanym pod kątem pamięci DRAM.
Dodatkowo: jeśli dodasz dużą liczbę rejestrów do procesora, a obszar matrycy zajmowany przez rejestry wzrośnie, rejestry będą wolniejsze.Zatem nawet w ramach jednego projektu procesu / rejestru, nawet bez uwzględnienia kosztów, istnieje kompromis między rozmiarem a szybkością.
user2922073
2019-03-04 18:02:30 UTC
view on stackexchange narkive permalink

Na matrycy procesora jest za mało miejsca, aby zmieścić tak dużą ilość pamięci, obecna pamięć RAM jest oparta na modułach DIMM z wieloma układami.

Koszt również stanowi problem, miejsce na matryce procesora jest droższe z powodu innego procesu produkcyjnego.

Obecnie mamy do tego celu pamięci podręczne procesora (pamięć na matrycy) i są one tak duże, jak to tylko możliwe.W większości przypadków nie ma potrzeby bezpośredniego adresowania tej pamięci podręcznej.

Oto kość i7-5960X z 20 MB pamięci podręcznej L3:

img

źródło: https://www.anandtech.com/show/8426/the-intel-haswell-e-cpu-review-core-i7-5960x-i7-5930k-i7-5820k-tested

Bardzo ciekawy obraz!Jaki jest obszar po prawej stronie?Nie mogę uwierzyć, że to niewykorzystana przestrzeń.
@Gp2mv3 - obszar po prawej stronie to płytka prototypowa.Możesz dostosować swój chip.
Podaj link lub przynajmniej cytat z oryginalnego źródła obrazu, który zamieszczasz w swojej odpowiedzi.
@Gp2mv3 Zarezerwowane dla sprzętu NSA?
user4574
2019-03-04 22:48:19 UTC
view on stackexchange narkive permalink

Myślę, że głównym powodem, dla którego nie zostało to zrobione, jest to, że wydajność może nie ulec poprawie tak bardzo, jak mogłoby się wydawać.

1) Procesor z dużym zestawem rejestrów prawdopodobnie musiałby pracować z mniejszą częstotliwością zegara niż procesor z najmniejszym zestawem rejestrów.

a) Wspomnienia są zasadniczo bardzo dużymi muxami. Im większy multiplekser, tym więcej tranzystorów musi być zaangażowanych, aby uzyskać dostęp. Im więcej tranzystorów potrzebujesz, tym wolniej będzie działał, ponieważ jest więcej poziomów logiki lub ponieważ jest więcej tranzystorów podłączonych do tego samego węzła (a więc większa pojemność). Jest powód, dla którego wspomnienia nie działają z taką samą prędkością jak logika procesora.

b) Zaimplementowanie tak dużej ilości pamięci zajmuje dużo miejsca w krzemie. Fizyczna propagacja sygnałów przez większy kawałek krzemu zajmuje trochę czasu (opóźnienie routingu). Tylko dlatego, że jest większy, jest mało prawdopodobne, aby urządzenie mogło działać z taką samą szybkością, jak fizycznie mniejszy procesor.

2) Kodowanie binarne instrukcji maszynowych stałoby się dużo mniej wydajne, gdyby dodać więcej rejestrów. Na przykład, jeśli twój procesor ma 4 rejestry, potrzebujesz 2 bitów do zakodowania wyboru rejestru. Jeśli Twój procesor ma 4 miliardy rejestrów 64-bitowych (co daje 32 GB), potrzebujesz 32 bitów, aby wybrać każdy rejestr.

Weźmy na przykład instrukcję, która oblicza logiczne OR dwóch rejestrów i zapisuje wynik w trzecim rejestrze.

W przypadku procesora posiadającego 4 rejestry, musisz zarezerwować 6 bitów na zakodowanie operandu i wyboru miejsca docelowego.

W przypadku procesora posiadającego 4 miliardy rejestrów nie musisz używać 96 bitów przestrzeni operandów do zakodowania wyboru rejestrów.

Instrukcje, które wcześniej zajmowały 16 bitów, mogą teraz zajmować 128 bitów. Rozmiary programów znacznie wzrosłyby pod względem wykorzystania pamięci, bez konieczności zwiększania ich funkcjonalności.

Można oczywiście być sprytnym i stworzyć kodowanie instrukcji, które po prostu użyje pierwszych lokalizacji rejestrów X do zapisywania bitów.Ale potem wracamy tylko do pierwotnej koncepcji rejestru.



Istnieją urządzenia, które mają dostęp do pamięci w jednym cyklu, ale są to mikrokontrolery lub system na chipie i zwykle mają znacznie niższe częstotliwości taktowania niż CPU w komputerze.Zwykle są ograniczone do kilku 10 do 100 MHz dla dostępu do pamięci w jednym cyklu.Nawet w tych przypadkach rozmiary pamięci zwykle nie są GB.

gnasher729
2019-03-04 19:13:00 UTC
view on stackexchange narkive permalink

Gdy dodajesz więcej rejestrów do procesora, czas dostępu staje się coraz wolniejszy, ponieważ potrzebujesz logiki, aby wybrać jeden z rejestrów 1024 zamiast 16.

A rejestry są szybkie, ponieważ są podłączone bezpośrednio do różnych elementów wejściowych i wyjściowych, głównie jednostek ALU).Możesz to zrobić z 16 rejestrami, a nie z 1024.

Pamięć podręczna L1 jest prawie tak szybka jak rejestry, ale traci prędkość z powodu problemów z wyborem właściwych danych i ich przesyłaniem.Pamięć podręczna L1 również zmniejsza się wraz z rozmiarem.Oczywiście jest też koszt.Spójrz na ceny procesorów z 20 MB pamięci podręcznej L3;która pozwala zgadnąć, ile będzie 64 GB pamięci podręcznej L3.

Potrzebujesz dłuższych pól adresowych rejestrów w formacie instrukcji, aby adresować więcej rejestrów.16-bitowa instrukcja adresująca dwa różne rejestry z 256 rejestrów byłaby niemożliwa, nie ma już bitów na instrukcję.
@Uwe Chyba że jest to [TTA] (https://en.wikipedia.org/wiki/Transport_triggered_architecture)!: P
Neil_UK
2019-03-04 12:18:54 UTC
view on stackexchange narkive permalink

Koszt.Pamięć szybka jest mniej gęsta niż pamięć wolna, wymagając większej powierzchni dla danej ilości pamięci.A obszar jest drogi.

Nie całkiem.Przynajmniej nie koszt pieniężny.Pierwszą kwestią jest to, że po prostu nie jest jasne, w jaki sposób można uzyskać tak dużą pamięć masową tak ściśle powiązaną z pojedynczym rdzeniem, że mogłaby ona odpowiadać wydajności pliku rejestru, bez względu na to, ile masz pieniędzy.
dajcie spokój, to była prowokacyjna odpowiedź, mająca na celu nakłonienie niektórych z was do wychwalania zalet hierarchii, na co nie mam teraz czasu ze względu na inne zobowiązania, wspominam nawet o SPARC z jego ponad 192 rejestrami pokrywającymi się w bankach8/24
Chociaż lubię czytać prowokacyjne odpowiedzi i sam napisałem przynajmniej jedną lub dwie, szczerze mówiąc, nie są one tak pomocne ...
Chris Jefferson
2019-03-04 17:46:03 UTC
view on stackexchange narkive permalink

W pewnym sensie zależy to od tego, co rozumiesz przez „rejestry”.Istnieją naturalne kompromisy między:

  • Koszt - szybki dostęp jest droższy
  • Ciepło - szybki dostęp wytwarza więcej ciepła
  • Rozmiar - dostęp do większych bloków danych jest wolniejszy - więc nawet ignorując koszt, nie można skalować większych rejestrów i oczekiwać, że utrzymają tę samą prędkość, ponieważ trzeba jechać i „pobierać” dane z dowolnego miejscajest przechowywany w chipie.

Jeden z pierwszych procesorów, Intel 4004, mógł być (i często był) używany bez pamięci RAM i pamięci podręcznej, więc żądany procesor istnieje (chociaż nadal używał pamięci ROM do przechowywania programu).

Roland
2019-03-04 22:31:38 UTC
view on stackexchange narkive permalink

Optymalizacja

Oczywiście byłoby miło mieć nieskończoną ilość szybkich rejestrów do przechowywania. Ale powodem, dla którego rejestry są tak szybkie, jest bliskość innych części procesora, więc ograniczenie liczby rejestrów sprawia, że ​​są one szybsze. Do wyboru jest kilka naprawdę szybkich rejestrów lub więcej rejestrów, które są wolniejsze.

Ponadto rejestry są zbudowane z drogich tranzystorów na głównej matrycy. Pamięć RAM jest również bardzo szybka, ale tańsza, ale nie tak tania, że ​​możesz zaimplementować wszystkie swoje potrzeby dotyczące pamięci RAM.

Nawet rejestry nie są takie same. Warto mieć kilka naprawdę szybkich rejestrów, które są zamknięte w rdzeniu i mogą być adresowane za pomocą zaledwie kilku bitów, a pozostałe rejestry są nieco wolniejsze.

Zgodnie z zasadą Pareto (XVII wiek) 80% pracy można wykonać w zaledwie 20% rejestrów, więc lepiej upewnij się, że są to najszybsze rejestry, jakie posiadasz.

Pomiędzy rejestrami a pamięcią RAM jest kilka kategorii pamięci pod względem szybkości i kosztów, a dzięki starannemu wymiarowaniu pamięci podręcznych L1, L2 i L3 można poprawić stosunek wydajności do kosztów swojego superkomputera.

Używamy HD lub SSD do przechowywania gigabajtów gigabajtów, ale również tutaj potrzebujemy więcej miejsca niż jesteśmy w stanie zapłacić, więc niektóre naprawdę duże archiwa, które nie są potrzebne tak szybko, muszą zostać przeniesione na taśmę.

Podsumowanie: rozłożenie pieniędzy na tę hierarchię opcji przechowywania daje największy zwrot z każdej zainwestowanej złotówki:

rejestry, pamięci podręczne L1 / 2/3, RAM, SSD, HD, taśma

Vilx-
2019-03-05 04:40:46 UTC
view on stackexchange narkive permalink

Nie ma potrzeby tworzenia „całej pamięci jako rejestrów”. Rejestry są koncepcją programowania i są głęboko osadzone w rdzeniu przetwarzania. Procesor z milionem rejestrów byłby absurdalnie skomplikowany i niezbyt wydajny. Widzisz, który rejestr używany przez program jest faktycznie „zakodowany na stałe” w programie. To kompilator decyduje o tym, co trafia do którego rejestru podczas kompilacji programu. Dzięki pamięci możesz po prostu dynamicznie przydzielać tyle, ile potrzebujesz. Masz plik o rozmiarze 10 MB? Zarezerwuj tyle pamięci RAM, aby go wczytać. Nie możesz tego zrobić z rejestrami. Musisz wcześniej wiedzieć, z których będziesz korzystać. Rejestry nie mają być używane w ten sposób.

Nie, naprawdę potrzebujesz pamięci RAM - po prostu szybkiej pamięci RAM. Pamięć RAM zbudowana przy użyciu tej samej technologii, co rejestry i pamięci podręczne procesora. I to ... faktycznie istnieje.

Jest taki ładny, stary artykuł, który został napisany 12 lat temu, ale wydaje mi się, że wciąż aktualny. Gorąco radzę przeczytać, ładnie wyjaśnia, jak działa pamięć komputera. Chociaż zagłębia się w szczegóły, robi się trochę suchy.

W każdym razie autor opisuje w nim dwa główne sposoby tworzenia pamięci - DRAM i SRAM.

DRAM jest oparty na kondensatorach - „1” jest reprezentowane przez kondensator naładowany, a „0” przez kondensator rozładowany. Jest to proste i tanie w wykonaniu i na tym opiera się dziś pamięć RAM. To także źródło wszystkich jego wad i powolności - ładowanie / rozładowywanie wymaga czasu.

SRAM jest oparty na kilku tranzystorach i ich stanie. Jest znacznie szybszy, ale też dużo bardziej skomplikowany w wykonaniu (przewody muszą się krzyżować dla każdego bitu) - stąd droższy. Jest też bardziej energochłonny. To jest to, co jest używane do pamięci podręcznych procesora (i podejrzewam, że rejestry).

Rzecz w tym, że urządzenia, w których pamięć RAM jest oparta na SRAM zamiast DRAM.Ale cena jest po prostu przez dach.Dlatego częściej ten typ pamięci RAM znajduje się w małych ilościach w wyspecjalizowanych urządzeniach (takich jak przełączniki sieciowe) i jako pamięci podręczne procesora.

Przy okazji - jest też powód, dla którego pamięci podręczne procesora są tak małe (zaledwie kilka MB).Im większa pamięć podręczna, tym dłużej trwa znalezienie potrzebnych bajtów.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...