Frage:
Warum haben Computer nur wenige tausend Anweisungen, wenn sie Millionen haben könnten?
Trevor Mershon
2020-03-13 19:15:59 UTC
view on stackexchange narkive permalink

Die meisten Computer enthalten nur ein paar tausend Anweisungen, aber die Bitbreite (normalerweise 64-Bit) ermöglicht es Computern technisch, auf Millionen oder sogar Milliarden von Anweisungen zuzugreifen.Einige können äußerst nützlich sein, wie DIVIDE, EXPONENT oder bedingte Operationen.Außerdem kommen die Taktraten zum Stillstand, und Quantencomputer sind weit entfernt.Warum haben sie Mikroprozessoren noch keine zusätzlichen Anweisungen hinzugefügt?

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/108571/discussion-on-question-by-trevor-mershon-why-do-computers-have-only-a-few-Tausend).
Sechs antworten:
Simon B
2020-03-13 21:03:37 UTC
view on stackexchange narkive permalink

Weil jeder Befehl eine Schaltung benötigt, um ihn zu implementieren.Je mehr Anweisungen Sie hinzufügen, desto größer wird der Prozessor.Da die meisten dieser Vorgänge niemals verwendet werden, ist dies nur eine Verschwendung von Komplexität.

Die ganze Komplexität kann den Prozessor sogar verlangsamen.RISC-Prozessoren wie der ARM basierten auf der Idee, eine große Anzahl von Operationen wegzuwerfen und den resultierenden kleineren Prozessorkern so schnell wie möglich zu machen.

Selbst moderne X86-Prozessoren mit einem riesigen Befehlssatz haben einen schnelleren Prozessor im Inneren, der einen riesigen, komplizierten Prozessor emuliert.

Je mehr Sie Ihre CPU clever machen möchten (und damit, wie Sie sagen, die Schaltkreise größer machen), desto einfacher ist es außerdem, Fehler und möglicherweise Sicherheitsverletzungen zu verursachen.Siehe Spectre und Meltdown, um zwei zu nennen.
Viele Intel-Prozessoren werden bei Verwendung von AVX2- oder AVX512-Anweisungen einige hundert MHz heruntertakten.
Eduardo1992
2020-03-13 21:49:58 UTC
view on stackexchange narkive permalink

Um die Antwort von Simon B zu ergänzen, führen GPUs andererseits viele komplexe Berechnungen durch.Sie können jedoch auf Anweisungen zum Multiplizieren von Additionen reduziert werden, A = B * C + D. Sie versuchen also zumindest, komplexe Anweisungen zum Multiplizieren zu addieren, da es sich um allgemeine Anweisungen handelt.

Um es noch einmal zusammenzufassen.Wenn Sie weitere Anweisungen hinzufügen, wird die CPU zu:

  1. komplexer, d. h. größere CPU und schwerer effizient zu nutzen
  2. langsamer.Die Geschwindigkeit, die Sie ausführen können, hängt von der langsamsten Einheit
  3. ab
  4. teurer.Ist es das, was Ihr Kunde will?
  5. ol>

    Lesen Sie auch über "Risc vs Cisc-Architekturen"

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

Die meisten Computer enthalten nur ein paar tausend Anweisungen, aber die Bitbreite (normalerweise 64-Bit) ermöglicht Computern technisch den Zugriff auf Millionen oder sogar Milliarden von Anweisungen.

Lassen Sie uns zunächst klarstellen, dass 64-Bit-Anweisungen nichts für Anweisungen bedeuten. Die meisten 64-Bit-Systeme verwenden 32 Bit lange Befehle, mit Ausnahme von x86, wo Befehle zwischen weniger als 32 Bit und mehreren hundert Bit liegen können.

Warum die Anzahl der Befehle begrenzt ist, ist für ein System, das 32-Bit-Befehle verwendet (was eine sehr effiziente Anzahl ist), die Anzahl der möglichen Befehle, die codiert werden können, etwas begrenzt, da Sie im Idealfall at haben möchten mindestens 3 Register für mindestens einige Opcodes. Aber selbst x86, wo Befehle eine beliebige Länge haben können, hat in der Größenordnung von einigen tausend eindeutigen Befehlen (von denen nicht unbedingt alle noch verwendet werden), da es nicht so viele nützliche Dinge gibt, die ein Befehl tun kann. Das Codieren vieler nutzloser Anweisungen (wie x86) tut Ihnen nicht unbedingt weh, hilft aber auch nicht.

Warum haben sie Mikroprozessoren noch keine zusätzlichen Anweisungen hinzugefügt?

Intel und ARM fügen regelmäßig neue Anweisungen hinzu. Mit Schwerpunkt auf Informationen gab es neue Anweisungen für Haswell, neue Anweisungen für Broadwell, neue Anweisungen für Skylake, neue Anweisungen für Palm Cove (Cannonlake) und neue Anweisungen für Sunny Cove (Icelake) im letzten Jahr.

Die meisten nützlichen Anweisungen wurden vor langer Zeit hinzugefügt, sodass diese im Durchschnitt nur eine marginale Auswirkung haben. Es gibt jedoch bestimmte Anwendungen, bei denen diese einen großen Unterschied machen können.

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

Die meisten Computer enthalten nur ein paar tausend Anweisungen,

Das hängt davon ab, wie Sie sie zählen. Sollten alle Anweisungen mit einer ähnlichen Funktion zusammengefasst oder verschiedene Variationen separat gezählt werden? Oder sollten sie danach gruppiert werden, welche Operationen die CPU ausführen muss, um sie zu implementieren (und wie unterschiedlich müssen diese Operationen sein, um die Anweisungen "anders" zu machen)?

Wie viele x86-64-Anweisungen gibt es überhaupt?

Die Antwort? Je nach den von Ihnen verwendeten Kriterien zwischen 981 und 3683.

Aber warum so wenige (oder so viele), wenn es noch mehr geben könnte? Grundsätzlich ist die Grenze nicht technisch, sondern wirtschaftlich. Niemand möchte diese zusätzlichen Anweisungen dringend genug, um das Hinzufügen zu rechtfertigen.

Einige können äußerst nützlich sein, z. B. DIVIDE, EXPONENT oder bedingt Operationen.

Das macht ein Dutzend davon aus, von denen die meisten bereits über aktuelle CPUs verfügen. Millionen oder Milliarden von Anweisungen? Niemand will sie.

Nur weil Sie der Meinung sind, dass eine Anweisung "nützlich" sein könnte, bedeutet dies nicht, dass sich die Implementierung lohnt. Da fast die gesamte moderne Codierung in Hochsprachen erfolgt, sind alle glücklich, solange genügend Anweisungen vorhanden sind, um Compiler-Autoren zufrieden zu stellen. Alle anderen gewünschten 'nützlichen' Operationen können in Code höherer Ebene implementiert werden.

Es gibt natürlich Ausnahmen, weshalb moderne CPUs tendenziell mehr Anweisungen enthalten. Es gab jedoch auch Fälle, in denen Anweisungen entfernt wurden, weil sie nicht ausreichend verwendet wurden, um ihre Aufbewahrung zu rechtfertigen. Dies kann erfolgen, um Silizium zu sparen, die Komplexität zu verringern, die Geschwindigkeit zu erhöhen oder einfach zu vermeiden, dass Funktionen unterstützt werden müssen, die niemand möchte.

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

Ich habe Probleme, das Dokument zu finden, in dem das Opcode-Format für ARM explizit angegeben ist, aber bei vielen Opcodes ist ein großer Teil ihres Bitfelds für sofortige Daten oder Verzweigungsversätze reserviert.Daher sind nicht alle 64-Bit- oder 32-Bit-Werte zum Codieren verschiedener Befehle vorhanden, sondern zum Codieren von Daten, die in den Befehl integriert sind.

Dies sind die Architekturreferenzhandbücher, die ARM-ARMs, und sie sind im Infocenter von ARM erhältlich.
@ElliotAlderson [ich habe dies gefunden] (https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf), aber immer noch nicht sehen, wo die Opcodes angeordnet sind.
Dies liegt daran, dass das von Ihnen verknüpfte Dokument kein Architekturreferenzhandbuch ist.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.architecture.reference/index.html (Registrierung ist über den offiziellen Link erforderlich, aber Sie können Kopien der findenHandbücher auf Google, wenn Sie kein Konto registrieren möchten).
alex.forencich
2020-03-14 06:05:18 UTC
view on stackexchange narkive permalink

Ich würde sagen, dass sie wohl Millionen von Anweisungen unterstützen. Aber es hängt wirklich davon ab, wie Sie eine "Anweisung" definieren.

Im Allgemeinen sind Anweisungen in mehrere Felder unterteilt - ein Teil gibt an, was die Operation ist (Addieren, Subtrahieren, Teilen, Verzweigen, Springen, Lesen, Schreiben usw.), und dann können andere Teile Argumente liefern - Sofortwerte oder Registeranzeigen. Wenn Sie also alle möglichen Sofortwerte und alle möglichen Registeranzeigen zusammenfassen, haben Sie nur eine relativ kleine Anzahl von Operationen. Da jeder Vorgang auf dedizierter Hardware ausgewertet werden muss (mehr oder weniger ... Dinge wie Addieren und Subtrahieren können mit derselben Konfiguration / Vorverarbeitung auf derselben Hardware ausgeführt werden), muss die Anzahl der unterschiedlichen Vorgänge durch den Bereich und die Komplexität von begrenzt werden der Chip.

Unterschiedliche Argumente führen jedoch zu unterschiedlichem Maschinencode. Nehmen Sie zum Beispiel die RISC-V-Addieranweisung ADD rd, rs1, rs2 , die zwei Registerwerte annimmt, rs1 und rs2 , und fügt sie hinzu zusammen und platziert das Ergebnis in einem dritten Register, rd . RISC-V hat 32 Register, was bedeutet, dass es 32 * 32 * 32 = 32.768 verschiedene "Anweisungen" gibt, die alle ADD zugeordnet sind, jedoch mit unterschiedlichen Argumenten. In ähnlicher Weise nimmt ADDI rd, rs1, imm einen 12-Bit-Sofortwert an, addiert ihn zu rs1 und schreibt das Ergebnis in rd . Dies führt also zu 32 * 32 * 4096 = 4.194.304 unterschiedlichen Codierungen nur für ADDI .

Die Aufteilung des "Anweisungsraums" ist ein sehr wichtiger Bestandteil des Entwurfs einer ISA.Welche Bits Sie für Registerargumente verwenden, welche Bits Sie für Sofortwerte verwenden, welche Bits Sie zur Bestimmung der Operation verwenden, welche Bits Sie zur Bestimmung des Befehlsformats verwenden, welche Bits Sie zur Bestimmung der Befehlsgröße usw. verwenden, haben alle einigeEinfluss auf die Flexibilität und Ausdruckskraft des Befehlssatzes und die Komplexität der in der CPU erforderlichen Decodierhardware.Das Erhöhen der Anzahl der verfügbaren Operationen geht im Allgemeinen zu Lasten der Flexibilität - unmittelbare Größe, Anzahl der Argumente, Anzahl der adressierbaren Register usw.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...