Assembly Writer gegen Compiler in der VLIW-Architektur

8

Ich habe diesen Satz in einem Buch gelesen:

In der VLIW-Architektur wählt der Compiler / und / oder Assembly Writer Anweisungen aus, die parallel ausgeführt werden können.

Was ist der Unterschied zwischen Assembly Writer und Compiler? Würde ein Assembler auch dasselbe bedeuten wie ein Assembler?

Dasha Sham
quelle

Antworten:

33

Der "Assembly Writer" in diesem Buch ist ein menschlicher Softwareentwickler, der Code in Assembler-Sprache schreibt.

gnasher729
quelle
15
1. Der Interpreter konvertiert nichts in die Assemblersprache. 2. Jedes Tool, das Quellcode in Assemblersprache konvertiert, ist per Definition ein Compiler.
Gnasher729
4
@ KellyS.French ein Assembler konvertiert Assembler-Code in Maschinencode, daher ist er mit dieser Definition kein Compiler. Wenn Sie jedoch ein Tool haben, das eine Assemblersprache in eine andere konvertiert (z. B. ARBfp1.0 in die native Assemblersprache einer modernen GPU), ist dieses Tool ein Compiler (mit dieser Definition).
Ruslan
1
@ gnasher729 - nitpick: Nach den meisten Definitionen ist der Teil "Assemblersprache" von (2) nicht erforderlich (insbesondere Dinge wie der Typoskript-Compiler oder der Java-Compiler, von denen keiner die Quelle zur Assemblierung kompiliert, sondern zu Javascript oder Java-Bytecode kompiliert beziehungsweise). In jüngerer Zeit bedeutet dies im Allgemeinen jedes Tool, das eine Programmiersprache in eine andere Programmiersprache kompiliert (und Assembly ist technisch eine Programmiersprache).
Delioth
2
@ KellyS.French: Ein Compiler ist ein Programm, das ein Programm in Sprache X in ein semantisch äquivalentes Programm in Sprache Y übersetzt. Je nachdem, was genau die Sprachen X und Y sind, haben wir spezielle Namen für diese Compiler, und "Assembler" ist einer dieser besonderen Namen. Aber sie sind alle spezielle Arten von Compilern. Wenn beispielsweise Y = Assembly und X höher als Y ist, nennen wir es einen Assembler. Wenn Y = Assembly und X niedriger als Y ist, nennen wir es Disassembler. Wenn X niedriger als Y und Y! = Assembly ist, nennen wir es einen De-Compiler. Wenn X und Y gleich sind, würde die jüngste Verwendung…
Jörg W Mittag
2
@ KellyS.French: Ich denke, der Grund, warum Assembler in Bezug auf Compiler normalerweise nicht viel erwähnt werden, ist, dass Assembler sehr langweilige Compiler sind. Im Kern ist ein Assembler nur eine 1: 1-Zuordnung von lesbaren Mnemoniken zu maschinenlesbaren Opcodes. Die Analysephase ist einfach, es gibt keine Typen, es gibt keine Optimierungen, die Codegenerierung ist trivial. Keines der interessanten algorithmischen Dinge, die Compiler tun, ist vorhanden: Parsen einer komplexen Sprache, Typprüfung, Typinferenz, Optimierungen, clevere Abbildung der Semantik usw.
Jörg W Mittag
10

In der VLIW-Architektur wählt der Compiler / und / oder Assembly Writer Anweisungen aus, die parallel ausgeführt werden können

Die Bedeutung dieses Satzes besteht darin, dass in der VLIW-Architektur der Assembler- (Maschinen-) Code definiert, welcher Befehl parallel ausgeführt wird, sodass er zu dem Zeitpunkt festgelegt ist, zu dem der Assembler-Code von einem Menschen geschrieben oder von einem Compiler generiert wird.

Dies unterscheidet sich vom superskalaren CPU, bei dem Anweisungen parallel ausgeführt werden können. Dies ist eine Entscheidung, die die CPU bei jeder Ausführung der Anweisungen trifft.

Es gibt auch CPUs, die beide Ansätze kombinieren - Itanium2 ist abwärtskompatibel mit Itanium und packt 3 Anweisungen in das VLIW-Wort. In der Tat kann Itanium2 zwei solcher Pakete in einem einzelnen CPU-Zyklus ausführen, und diese Entscheidung wird zur Ausführungszeit getroffen.

Bulat
quelle