Pytanie:
Dlaczego komputery mają tylko kilka tysięcy instrukcji, podczas gdy mogą mieć miliony?
Trevor Mershon
2020-03-13 19:15:59 UTC
view on stackexchange narkive permalink

Większość komputerów zawiera tylko kilka tysięcy instrukcji, ale szerokość bitowa (zwykle 64-bitowa) technicznie umożliwia komputerom dostęp do milionów, a nawet miliardów instrukcji.Niektóre mogą być niezwykle przydatne, jak np. DIVIDE, EXPONENT lub operacje warunkowe.Poza tym taktowanie zegarów zatrzymuje się, a obliczenia kwantowe są daleko.Dlaczego jeszcze nie dodali dodatkowych instrukcji do mikroprocesorów?

Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/108571/discussion-on-question-by-trevor-mershon-why-do-computers-have-only-a-few-tys.).
Sześć odpowiedzi:
Simon B
2020-03-13 21:03:37 UTC
view on stackexchange narkive permalink

Ponieważ każda instrukcja wymaga jakiegoś obwodu, aby ją zaimplementować.Im więcej instrukcji dodasz, tym większy będzie procesor.Ponieważ większość z tych operacji nigdy nie zostanie użyta, to po prostu strata złożoności.

Cała złożoność może nawet spowolnić procesor.Procesory RISC, takie jak ARM, opierały się na pomyśle odrzucenia dużej liczby operacji i jak najszybszego uzyskania mniejszego rdzenia procesora.

Nawet nowoczesne procesory X86, z ogromnym zestawem instrukcji, mają szybszy procesor ukryty w środku, emulujący bardzo skomplikowany.

Co więcej, im bardziej chcesz, aby twój procesor był sprytny (a zatem, jak mówisz, większy w obwodach), tym łatwiej jest tworzyć wady i być może naruszenia bezpieczeństwa.Zobacz Spectre i Meltdown, żeby wymienić dwa.
Wiele procesorów Intela obniża częstotliwość o kilkaset MHz podczas korzystania z instrukcji AVX2 lub AVX512.
Eduardo1992
2020-03-13 21:49:58 UTC
view on stackexchange narkive permalink

Aby uzupełnić odpowiedź Simona B, z drugiej strony procesory graficzne wykonują wiele skomplikowanych obliczeń.Ale można je sprowadzić do mnożenia i dodawania instrukcji, A = B * C + D. Więc przynajmniej starają się mieć złożone instrukcje mnożenia i dodawania, ponieważ są to typowe instrukcje.

Podsumowując.Jeśli dodasz więcej instrukcji, procesor stanie się:

  1. bardziej złożony, tj. większy procesor i trudniejszy w efektywnym użyciu
  2. wolniej.Szybkość, z jaką możesz go uruchomić, zależy od najwolniejszej jednostki
  3. droższe.Czy tego chce twój klient?

Przeczytaj także o „architekturach risc i cisc”

user1850479
2020-03-14 00:38:10 UTC
view on stackexchange narkive permalink

Większość komputerów zawiera tylko kilka tysięcy instrukcji, ale szerokość bitowa (zwykle 64-bitowa) technicznie umożliwia komputerom dostęp do milionów, a nawet miliardów instrukcji.

Po pierwsze, wyjaśnijmy, że bycie 64-bitowym nie oznacza nic dla instrukcji. Większość systemów 64-bitowych używa instrukcji o długości 32 bitów, z wyjątkiem x86, gdzie instrukcje mogą mieć od mniej niż 32 bitów do kilkuset bitów.

Jeśli chodzi o powody, dla których liczba instrukcji jest ograniczona, w systemie używającym instrukcji 32-bitowych (co jest bardzo wydajną liczbą w użyciu), liczba możliwych instrukcji, które można zakodować, jest nieco ograniczona, ponieważ w idealnym przypadku przynajmniej 3 rejestry dla przynajmniej niektórych rozkazów. Jednak nawet x86, gdzie instrukcje mogą mieć dowolną długość, ma kilka tysięcy unikalnych instrukcji (z których nie wszystkie są nadal używane), ponieważ nie ma zbyt wielu użytecznych rzeczy, które instrukcja może zrobić. Kodowanie wielu bezużytecznych instrukcji (tak jak robi to x86) niekoniecznie Ci szkodzi, ale też nie pomaga.

Dlaczego jeszcze nie dodali dodatkowych instrukcji do mikroprocesorów?

Intel i ARM regularnie dodają nowe instrukcje. Koncentrując się na danych wywiadowczych, pojawiły się nowe instrukcje Haswell, nowe instrukcje Broadwell, nowe instrukcje Skylake, nowe instrukcje Palm Cove (Cannonlake) i nowe instrukcje z zeszłego roku Sunny Cove.

Większość przydatnych instrukcji została dodana dawno temu, więc zazwyczaj mają one zazwyczaj marginalny wpływ, ale istnieją określone aplikacje, w których mogą mieć duże znaczenie.

Bruce Abbott
2020-03-14 03:51:17 UTC
view on stackexchange narkive permalink

Większość komputerów zawiera tylko kilka tysięcy instrukcji

To zależy od tego, jak je policzysz. Czy wszystkie instrukcje o podobnej funkcji powinny być zgrupowane razem, czy różne odmiany powinny być liczone oddzielnie? A może powinny być pogrupowane według operacji, które CPU musi wykonać, aby je zaimplementować (i jak różne muszą być te operacje, aby instrukcje były „różne”)?

Ile jest instrukcji x86-64?

Odpowiedź? Gdziekolwiek od 981 do 3683, w zależności od kryteriów, z których korzystasz.

Ale dlaczego jest tak niewielu (lub tak wielu), podczas gdy mogłoby być nawet więcej? Zasadniczo ograniczenie to nie jest techniczne, ale ekonomiczne. Nikt nie chce tych dodatkowych instrukcji na tyle mocno, aby uzasadnić ich dodanie.

Niektóre mogą być niezwykle przydatne, na przykład DIVIDE, EXPONENT lub warunkowe operacje.

To kilkanaście takich, z których większość obecnych procesorów już ma. Miliony czy miliardy instrukcji? Nikt ich nie chce.

Tylko dlatego, że uważasz, że instrukcja może być „przydatna”, nie oznacza, że ​​warto ją wdrożyć. Ponieważ prawie całe współczesne kodowanie jest wykonywane w językach wysokiego poziomu, tak długo, jak istnieją wystarczające instrukcje, aby zadowolić twórców kompilatorów, wszyscy są szczęśliwi. Wszelkie inne „przydatne” operacje, które są pożądane, można zaimplementować w kodzie wyższego poziomu.

Oczywiście są od tego wyjątki, dlatego nowoczesne procesory mają zwykle więcej instrukcji. Ale były też przypadki, w których instrukcje były usuwane , ponieważ nie były używane na tyle, aby uzasadnić ich zachowanie. Można to zrobić, aby zaoszczędzić krzem, zmniejszyć złożoność, zwiększyć prędkość lub po prostu uniknąć konieczności obsługi funkcji, których nikt nie chce.

robert bristow-johnson
2020-03-14 00:58:43 UTC
view on stackexchange narkive permalink

Mam problem ze znalezieniem dokumentu, który wyraźnie pokazuje format kodu dla ARM, ale wiele rozkazów ma dużą część pola bitowego zarezerwowaną dla natychmiastowych danych lub przesunięć gałęzi.więc nie wszystkie z 64 lub 32 bitów służą do kodowania różnych instrukcji, ale służą do kodowania danych wbudowanych w instrukcję.

Są to podręczniki dotyczące architektury, ARM ARM, które są łatwo dostępne w centrum informacyjnym ARM.
@ElliotAlderson [znalazłem to] (https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf), ale nadal nie widzę, gdzie są ułożone rozkazy.
Dzieje się tak, ponieważ powiązany dokument nie jest podręcznikiem dotyczącym architektury.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.architecture.reference/index.html (wymagana rejestracja z oficjalnego linku, ale można znaleźć kopiepodręczniki w google, jeśli nie chcesz rejestrować konta).
alex.forencich
2020-03-14 06:05:18 UTC
view on stackexchange narkive permalink

Powiedziałbym, że prawdopodobnie obsługują miliony instrukcji. Ale to naprawdę zależy od tego, jak zdefiniujesz „instrukcję”.

Ogólnie instrukcje są podzielone na kilka pól - jedna część wskazuje na czym jest operacja (dodawanie, odejmowanie, dzielenie, rozgałęzianie, przeskakiwanie, czytanie, zapis itp.), a inne części mogą zawierać argumenty - wartości bezpośrednie zarejestrować wskazówki. Tak więc, jeśli zgrupujesz wszystkie możliwe wartości bezpośrednie i wszystkie możliwe wskazania rejestrów razem, masz tylko stosunkowo niewielką liczbę operacji. Ponieważ każda operacja musi być oceniana na dedykowanym sprzęcie (cóż, mniej więcej ... rzeczy takie jak dodawanie i odejmowanie mogą być wykonywane na tym samym sprzęcie z pewną konfiguracją / przetwarzaniem wstępnym), liczba odrębnych operacji musi być ograniczona przez obszar i złożoność chip.

Jednak różne argumenty skutkują innym kodem maszynowym. Na przykład weź instrukcję dodawania RISC-V, ADD rd, rs1, rs2 , która przyjmuje dwie wartości rejestrów, rs1 i rs2 , dodaje je razem i umieszcza wynik w trzecim rejestrze, rd . RISC-V ma 32 rejestry, co oznacza, że ​​istnieje 32 * 32 * 32 = 32768 różnych „instrukcji”, które wszystkie są mapowane na ADD, ale z różnymi argumentami. Podobnie, ADDI rd, rs1, imm pobiera 12-bitową wartość natychmiastową, dodaje ją do rs1 i zapisuje wynik do rd . Tak więc daje to 32 * 32 * 4096 = 4 194 304 różnych kodowań tylko dla ADDI .

Dzielenie „przestrzeni instrukcji” jest bardzo ważną częścią projektu ISA.Których bitów używasz jako argumentów rejestru, których używasz dla wartości bezpośrednich, których bitów używasz do określenia operacji, których bitów używasz do określenia formatu instrukcji, których bitów używasz do określania rozmiaru instrukcji itd., Wszystkie mają pewnemając na uwadze elastyczność i wyrazistość zestawu instrukcji oraz złożoność sprzętu dekodującego wymaganego w CPU.Zwiększenie liczby dostępnych operacji generalnie odbywa się kosztem elastyczności - natychmiastowego rozmiaru, liczby argumentów, liczby adresowalnych rejestrów itp.



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...