Forum: FPGA, VHDL & Co. Optimale Maschinensprache


von Herbert (Gast)


Lesenswert?

Gibt es eine optimale Maschinensprache (Mikrocontroller, 
Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des 
FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet? 
Kennt jemand eine Studie, die sich dieses Themas angenommen hat?

Viele Grüße

Herbert

von Erik (Gast)


Lesenswert?

Ich vermute mal, dass die jeweiligen Maschinensprachen normalerweise 
schon optimal an ihre Maschinen (CPU etc.) angepasst sind. Bin aber kein 
Informatiker

von Peter II (Gast)


Lesenswert?

Herbert schrieb:
> hohe Rechenleistung bietet

kann dann eine Sprache überhaupt Rechenleistung liefern?

von Michael B. (laberkopp)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache

Nein, natürlich nicht, je nach Programm wäre eine andere Sprache 
optimal.

Auch je nach Hardware, interne CPU Chipgeschwindigkeit vs. RAM 
Zugriffsgeschwindigkeit auf den Programmspeicher ergeben sich 
unterschiedliche Codierungen.

Ist die CPU schneller als das RAM, konnte eine Huffman-Codierung der 
OpCodes und ihrer Operanden nach Verwendungs-Häufigkeit sinnvoll sein, 
weil dann die Datenmenge die vom Programmspeicher in die CPU geschaufelt 
werden muss minimal wird, der Transputer hat das zumindest 
byteorientiert versucht war aber grottenlangsam.

Ist die CPU langsamer als das RAM, kann es sinnvoll sein, die Microcodes 
nach aussen zu bringen, also ungefähr das was RISC macht, aber die CPU 
ist selten bis nie langsmaer als das RAM.

von waflija (Gast)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?
> Kennt jemand eine Studie, die sich dieses Themas angenommen hat?
>
> Viele Grüße
>
> Herbert

Was verstehst du unter Maschinensprache?

CPU != FPGA

Eine CPU hat sequentielle Aktionen, die sich z.B. mit Assembler sehr 
präzise auf der "untersten" Ebene beschreiben lassen. Wenn du dass 
richtig machst, wird es nicht mehr viel besser.

Bei FPGA wird das Hardwarelayout beschrieben. Hier ist VHDL schon genau 
das richtige, viel besser wird es da auch nicht. Ok, du kannst die 
Gate-Tabelle selber von Hand schreiben, aber das ist nicht wirklich 
"besser".

In beiden Fällen kommt es eher drauf an, dass dein Algorithmus stimmt. 
Die Sprache in der es geschrieben wird ist dann eher eine Frage von div. 
anderen Paramtern.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?
> Kennt jemand eine Studie, die sich dieses Themas angenommen hat?
Das Thema ist gemeinhin als RISC und CISC bekannt. Und irgendwo dort, wo 
sich der ARM-Kern tummelt liegt ein lokales Maximum.

von bitwurschtler (Gast)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?
> Kennt jemand eine Studie, die sich dieses Themas angenommen hat?

Studie da gibt es ganze Lehrbücher zu! Meine Empfehlung:
https://www.amazon.de/Rechnerarchitektur-Implementierung-Bewertung-Lehrbuch-Informatik/dp/3528051736
besser die amerikanische aktuelle Originalausgabe.
https://www.amazon.com/Computer-Architecture-Fifth-Quantitative-Approach/dp/012383872X

Ist zwar nicht FPGA-spezifisch bezieht aber dafür 
Software/Betriebssysteme ein. Was nützt ein Prozessor der auf 
synthetische Benchmarks optimiert ist?!

Anderes Stichwort zum Thema Prozessorentwurf ist
-DLX https://en.wikipedia.org/wiki/DLX
-Acorn Risc Machine - in dessen Entwicklung akademischer Forschungen zum 
optimalen Befehlssatz aufgenommen wirden und beispielsweise zur Aufnahme 
der Conditional Execution in den Befehlssatz führte
-SPARC - auch ein auf akadeimsiche Arbeiten hin entwickelte 
Architecture, insbesonders der Register windowing Ansatz ist interessant
-VLIW falls du dich auch für DSP-Architekturen interessierst

von Fürn Hugo (Gast)


Lesenswert?

Eine CPU ist generel purpose computing. Es ist eine allgemeine 
Recheneinheit für alle möglichen Probleme. Eine CPU macht ja nichts 
anderes als Daten von A nach B zu schaufeln und noch ein paar 
Grundrechnungsarten.
Wer optimale Lösungen für ein Problem benötigt nimmt ein FPGA und 
programmiert sich einen Chip der nur diese Problem löst, dafür aber 
optimal.

Eine optimale Maschinensprache für eine CPU gibt es wohl auch nicht.
Für MCUs ist oft wichtig das die generierte Code Größe klein ist, für 
PCs das sie schnell ist.
Studien haben gezeigt das für über 90% des Programmcodes nur wenige 
Befehle gebraucht werden. Daraus ist die RISC Architektur entstanden.
Bei CISC brauchen komplexe Befehle viele Taktzyklen.
Bei RISC braucht jeder Befehl nur einen Taktzyklus. Zudem kann die CPU 
wesentlich einfacher gebaut werden und verbraucht wesentlich weniger 
Leistung. Komplexere Aufgaben müssen allerdings mittels Software gelöst 
werden.
Der ARM Architektur wird nachgesagt das sie eine sehr schöne Architektur 
ist.
8086 war von Anfang an eine grausame Architektur und nur durch AMD64 
wurde es besser aber der 8086 Schrott befindet sich noch in jeder PC 
CPU.
Im Vergleich zu 8086 war die Motorola 68000 Architektur schon wesentlich 
schöner. Der Befehlssatz lehnte sich an die VAX an.

von Mark B. (markbrandis)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache

Eine optimale Lösung existiert generell nur für ein spezifisches 
Problem. Etwas, das für jeden beliebigen Anwendungsfall optimal ist, 
existiert nicht.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

bitwurschtler schrieb:
> -Acorn Risc Machine - in dessen Entwicklung akademischer Forschungen zum
> optimalen Befehlssatz aufgenommen wirden und beispielsweise zur Aufnahme
> der Conditional Execution in den Befehlssatz führte

Und ebenso zur Abschaffung der Conditional Execution mit 64bit ARM. ;-)

> -SPARC - auch ein auf akadeimsiche Arbeiten hin entwickelte
> Architecture, insbesonders der Register windowing Ansatz ist interessant

Dieses Windowing hat ebenso Vor- und Nachteile. Ein Nachteil wäre 
beispielsweise, dass von der mit Abstand teuersten verfügbaren 
Speicher-Ressource innerhalb einer Funktion immer nur ein kleiner Teil 
verwendet wird.

Deshalb: Im Laufe der Zeit kommt man aufgrund besserer statistischer 
Erfassung der Laufzeitverhältnisse und weiter entwickelter Hard- und 
Software zu unterschiedlichen Ergebnissen kommen.

Das muss auch kein asymptotischer Prozess sein. Die Entwicklung 
integrierter grösserer Caches hat die Grundlagen bestehender und an die 
bisherige Situation gut angepasster Architekturen zertrümmert. Die 
Entwicklung immer ausgefuchsterer Sprungvorhersagen blieb nicht ohne 
Einfluss auf Predication / Conditional Execution. Kommt ein neues 
Konzept hinzu können bestehende Strategien schnell veralten.

von (prx) A. K. (prx)


Lesenswert?

Fürn Hugo schrieb:
> Im Vergleich zu 8086 war die Motorola 68000 Architektur schon wesentlich
> schöner. Der Befehlssatz lehnte sich an die VAX an.

Fast. Immerhin stimmt DEC. ;-)
Den dominanten Einfluss hatte die PDP-11, nicht die VAX.

von (prx) A. K. (prx)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache

Was du meinst nennt sich "Instruction Set Architecture" (ISA). Wird 
gebildet aus Befehlssatz und den darin direkt angesprochenen Ressource 
wie den Registern. Im Gegensatz dazu gibt es die "Implementation 
Architecture", die den inneren Aufbau beschreibt.

Bei Architekturen grösserer Lebensdauer fällt auf, das diese Teile nur 
anfangs gut aufeinander passen, später aber auseinander laufen. So 
wiederspiegelt die Implementierung der x86 ISA in heutigen Prozessoren 
diese alte Architektur in keiner Weise mehr wieder. Im Grunde spielt ein 
Core i7 nach aussen hin Theater.

Auch RISC ist davor nicht gefeit: In der PowerPC ISA steckt 
nutzloserweise noch heute IBMs erste Mehrchip-Implementierung im Design, 
und Delay-Slots wie in MIPS sind mittlerweile eher Problem als Vorzug.

von (prx) A. K. (prx)


Lesenswert?

Fürn Hugo schrieb:
> Der Befehlssatz lehnte sich an die VAX an.

PS: Wobei es das natürlich auch gab. National Semiconductors NS32000 war 
von der VAX geprägt, noch krasser jedoch eine Totgeburt von NEC.

von Karl (Gast)


Lesenswert?

Moving Target. Damals (TM) war RISC der Hype, weil einfach in HW 
umzusetzen. Ganze ALUs auf dem Platz des Befehlsdecoders einer x86 oder 
68k Maschine. Jetzt leben wir in einer Zeit in der die ALU bzw. ein 
"Kern" einer CPU im bereich << 10% Chipfläche ist und die ISA eigentlich 
nur noch eine untergeordnete Rolle spielt. Intern ist eh alles was 
Performance hat nach µOPs oder ähnlichem aufgebaut. Dann kann die ach so 
schlimme x86 ISA auch wieder punkten: Durch den nicht existenten Zwang 
zu 1 Takt/Befehl und eben nicht konstanter Länge der Opcodes wirkt das 
im Prinzip wie eine Kompression der Opcodes. Weniger Cache wird benötigt 
etc.

von bitwurschtler (Gast)


Lesenswert?

A. K. schrieb:
> Die Entwicklung
> integrierter grösserer Caches hat die Grundlagen bestehender und an die
> bisherige Situation gut angepasster Architekturen zertrümmert.


Für FPGA's gilt das nicht, zumindest nicht in dieser Schärfe.
FPGA's haben immer noch vergleichsweise wenig Embedded RAM-Blöcke die 
man für Caches verbraten kann. Ebenfalls trägt die granular aufgebaute 
Logikgatter (4er LUT) der FPGA's mit bei, das man die Architektur von in 
FullCustom hingezauberten CPU's nicht mit den gleichen Vorteilen auf 
FPGA- (Soft)-Cores übertragen kann. Sonst muss man u.U. die 
Maximalfrequenz unerwartet runtersetzen weil diese Implementierung einen 
Logic-level mehr erfordert.

Da macht es sinn das man alle Architekturtricks von CISC/RISC/MIMD 
nochmal auf FPGA hin optimiert durchdenkt.

von Andi (Gast)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?
> Kennt jemand eine Studie, die sich dieses Themas angenommen hat?

Wenn man zu 'minmale FPGA Resourcen' und 'hohe Rechenleistung' auch noch 
die Anforderungen: frei verwendbar, open-source C/C++ Compiler, und 
Erweiterbarkeit des Befehlssatzes hinzufügt ist die RISC-V Architektur 
ziemlich optimal.
Skalierbar von kleinen 32bit Controllern bis zu Multicore 64- oder 
128bit CPUs für Computer.
Da an Universitäten entstanden, gibt es natürlich zahlreiche Studien und 
Abhandlungen dazu zum Lesen.

Andi

von Flieger (Gast)


Lesenswert?

bitwurschtler schrieb:

> -Acorn Risc Machine - in dessen Entwicklung akademischer Forschungen zum
> optimalen Befehlssatz aufgenommen wirden und beispielsweise zur Aufnahme
> der Conditional Execution in den Befehlssatz führte

IMHO ist das bei ARM64 rausgeflogen.

von Flieger (Gast)


Lesenswert?

Karl schrieb:
> Dann kann die ach so
> schlimme x86 ISA auch wieder punkten: Durch den nicht existenten Zwang
> zu 1 Takt/Befehl und eben nicht konstanter Länge der Opcodes wirkt das
> im Prinzip wie eine Kompression der Opcodes. Weniger Cache wird benötigt
> etc.

mov rx,ry kann auf OOO MAschinen 0 Takte brauchen, und ARM-Thumb 
komprimiert auch.

von Mark B. (markbrandis)


Lesenswert?

Flieger schrieb:
> mov rx,ry kann auf OOO MAschinen 0 Takte brauchen

Hm, wie das?

von Ordner (Gast)


Lesenswert?

Flieger schrieb:
> bitwurschtler schrieb:
>
>> -Acorn Risc Machine - in dessen Entwicklung akademischer Forschungen zum
>> optimalen Befehlssatz aufgenommen wirden und beispielsweise zur Aufnahme
>> der Conditional Execution in den Befehlssatz führte
>
> IMHO ist das bei ARM64 rausgeflogen.

Was nicht heisst das die Entscheidung vor 30 Jahren den Acorn Processor 
mit bedingter Befehlsausführung auszustatten falsch war. Es haben sich 
halt die Voraussetzungen geändert.
Der Rausschmiss bei ARM64 wurde u.a. durch die mäßige Nutzung dieses 
Features durch die heutige Software begründet, aber nicht damit das es 
eine Architekturschwäche wäre.

von (prx) A. K. (prx)


Lesenswert?

Mark B. schrieb:
> Flieger schrieb:
>> mov rx,ry kann auf OOO MAschinen 0 Takte brauchen
>
> Hm, wie das?

Je aktuellen OOO Cores gibt es keine festen Registerplätze mehr. 
Vielmehr wird bei jedem Befehl (genauer: jedem Mikrobefehl) ein neues 
Zielregister aus dem Pool gefischt und nach Abschuss wird dieses dann 
als aktuelles "rx" deklariert. Da bei eine MOV keine Veränderung 
auftritt kann man aber auch gleich das Register für "ry" dafür verwenden 
und sich die Kopie sparen.

von Ordner (Gast)


Lesenswert?

Mark B. schrieb:
> Flieger schrieb:
>> mov rx,ry kann auf OOO MAschinen 0 Takte brauchen
>
> Hm, wie das?

Register renaming?

https://en.wikipedia.org/wiki/Register_renaming
https://en.wikipedia.org/wiki/Out-of-order_execution

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
> Was nicht heisst das die Entscheidung vor 30 Jahren den Acorn Processor
> mit bedingter Befehlsausführung auszustatten falsch war. Es haben sich
> halt die Voraussetzungen geändert.

Bedingte Ausführung erspart bedingte Sprünge. Anfang der 80er war 
dynamische Sprungvorhersage nicht existent. Heute ist sie sehr weit 
entwickelt. Was dann noch an Unvorhersagbarem übrig bleibt lässt sich 
von bedingten Auswahlbefehlen abdecken, die z.B. {dst = cond ? src1 : 
src2;} implementieren, aber auch komplexere Formen wie {dst = cond ? 
src1 : src2+1;}

: Bearbeitet durch User
von Martin S. (strubi)


Lesenswert?

Moin,

>
> Was nicht heisst das die Entscheidung vor 30 Jahren den Acorn Processor
> mit bedingter Befehlsausführung auszustatten falsch war. Es haben sich
> halt die Voraussetzungen geändert.
> Der Rausschmiss bei ARM64 wurde u.a. durch die mäßige Nutzung dieses
> Features durch die heutige Software begründet, aber nicht damit das es
> eine Architekturschwäche wäre.

Das Feature wird in einigen DSP-Architekturen immer noch sehr gern 
genutzt. Bei MIPS gabs was ähnliches mit dem "branch if 
likely"-Instruktionen.

Ansonsten kann ich, was Kompaktheit von Programmen/Opcodes angeht, nur 
meine kleine interne Rangliste (Sieger zuerst, komplett empirisch 
erfasst) bieten:

(1) MSP430
(2) ZPU (knapp dahinter)
(3) ARM v5 thumb
(4) MIPS16
(5) AVR8
(6) MIPS32
(7) i86-64

Basis ist eine für die versch. Arch. gcc-compilierte bare metal Library 
ohne float-Gerechne (dann sähe das alles wieder anders aus).

von Ordner (Gast)


Lesenswert?

A. K. schrieb:
> Ordner schrieb:
>> Was nicht heisst das die Entscheidung vor 30 Jahren den Acorn Processor
>> mit bedingter Befehlsausführung auszustatten falsch war. Es haben sich
>> halt die Voraussetzungen geändert.
>
> Bedingte Ausführung erspart bedingte Sprünge. Anfang der 80er war
> dynamische Sprungvorhersage nicht existent.

Nö, die gab es schon früher, wurde aber bei den multicycle Architekturen 
nicht unbedingt benötigt. Erst mit immer tieferen Befehls-Pipelines und 
der damit verbundenen wartezyklen bei stall wurde die Sprungvermeidung 
relevant.

Von einer compilerunterstützung hätten alte (Binär-)Programme nicht 
profitiert. Also musste man die Sprungvorhersage in den Prozessor 
"gießen" Die Hardware wurde an die (supotimale) Software angepasst.

Bei Acorn dagegen gab es keine alten Programme, da startete Hard- und 
Software gleichzeitig bei Null und es hingen keine alten 
Kompatibilitätszöpfe im Getriebe.

von Ordner (Gast)


Lesenswert?

Martin S. schrieb:
> Ansonsten kann ich, was Kompaktheit von Programmen/Opcodes angeht, nur
> meine kleine interne Rangliste (Sieger zuerst, komplett empirisch
> erfasst) bieten:
>
> (1) MSP430
> (2) ZPU (knapp dahinter)
> (3) ARM v5 thumb
> (4) MIPS16
> (5) AVR8
> (6) MIPS32
> (7) i86-64

und MC68000 kommt auf Platz 8 ??

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
>> Bedingte Ausführung erspart bedingte Sprünge. Anfang der 80er war
>> dynamische Sprungvorhersage nicht existent.
>
> Nö, die gab es schon früher,

Möglicherweise in den grösseren Rechnern, aber in Mikroprozessoren ist 
mir aus der Entstehungszeit von ARM keine dynamische Vorhersage bekannt.

> Von einer compilerunterstützung hätten alte (Binär-)Programme nicht
> profitiert. Also musste man die Sprungvorhersage in den Prozessor
> "gießen" Die Hardware wurde an die (supotimale) Software angepasst.

Heute findet man aus mehreren Gründen meist Kompromisse, 
fundamentalistische Ansätze weniger. Der RISC Ansatz, was nur irgend 
geht in den Compiler zu verlagern, wurde grad in dieser Hinsicht nicht 
bis ins Extrem getrieben. Am weitesten geht (ging?) wohl IA64 mit der 
nur dort voll entwickelten predication.

Einer der Gründe: Den Core mit etwas zusätzlicher Hardware zu bewerfen, 
kostet mittlerweile wenig. Den Designern gehen ohnehin allmählich die 
neuen Ideen aus, womit sie die einzelnen Cores signifikant schneller 
kriegen können. Denn höhere Taktfrequenz scheidet praktisch aus.

: Bearbeitet durch User
von Ordner (Gast)


Lesenswert?

A. K. schrieb:
> Den Designern gehen ohnehin allmählich die
> neuen Ideen aus, womit sie die einzelnen Cores signifikant schneller
> kriegen können. Denn höhere Taktfrequenz scheidet praktisch aus.

Hm angeblich soll aber höhere Taktfrequenz ein Grund gewesen sein 
bedingte Ausführung rauszuschmeissen.
Die Verdrahtung von Flags mit den condition bits des instructions word 
bildete wohl den (Taktbestimmenden) kritischen Pfad. Ob diese 
Takterhöhung die Wartezyklen kompensiert ist unbekannt.
Der ARM64 scheint mir aber eh mehr in Richtung KlickikackiMultiMediHandy 
entwickelt und den Focus auf Effizienz hat man verloren.


Und im Embedded ist mir ein effizenter Prozessor lieber als schnelle 
Heizplatte.. Dafür sollten die Designer mal ihre Ideen verwirklichen 
dürfen.

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
> Hm angeblich soll aber höhere Taktfrequenz ein Grund gewesen sein
> bedingte Ausführung rauszuschmeissen.

Mir ging es eher um die thermische Situation, als um Signalpfade.

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
> Der ARM64 scheint mir aber eh mehr in Richtung KlickikackiMultiMediHandy
> entwickelt

Natürlich. Das ist doch der bestimmende Markt. Embedded dürfte ARMv8 
vorerst eher ein Nebeneffekt der Nutzung von Cores sein, die für 
Mobilanwendungen gebaut wurden.

> und den Focus auf Effizienz hat man verloren.

Keineswegs. Immerhin geht es beim Klickibunti-Markt genau darum. Weshalb 
die ARM Implementierungen schon eine Weile auf 2 getrennten Gleisen 
verlaufen, einerseits die effizienten A7/A53, andererseits die 
performanteren aber weniger effizienten A15/A53/A57/A72.

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
> Hm angeblich soll aber höhere Taktfrequenz ein Grund gewesen sein
> bedingte Ausführung rauszuschmeissen.

Das hiesse aber doch, dass bestehende ARMv8 Implementierungen entweder 
nichts davon haben, oder im 64-Bit Betrieb schneller takten können als 
im 32-Bit Betrieb. Denn noch gibts wohl keinen ARMv8, der nicht auch 
ARMv7 enthielte.

von Ordner (Gast)


Lesenswert?

A. K. schrieb:
> Ordner schrieb:
>> Hm angeblich soll aber höhere Taktfrequenz ein Grund gewesen sein
>> bedingte Ausführung rauszuschmeissen.
>
> Mir ging es eher um die thermische Situation, als um Signalpfade.

Ah,OK. Für mich als FPGA-Entwickler bestimmt der längste Pfad den Takt 
und nicht der Hitzetod. Notfalls kriegt der FPGA halt einen Kühler 
spendiert.

von (prx) A. K. (prx)


Lesenswert?

A. K. schrieb:
> performanteren aber weniger effizienten A15/A53/A57/A72.

performanteren aber weniger effizienten A15/A57/A72/A73.

von Ordner (Gast)


Lesenswert?

A. K. schrieb:
>> und den Focus auf Effizienz hat man verloren.
>
> Keineswegs. Immerhin geht es beim Klickibunti-Markt genau darum. Weshalb
> die ARM Implementierungen schon eine Weile auf 2 getrennten Gleisen
> verlaufen, einerseits die effizienten A7/A53, andererseits die
> performanteren aber weniger effizienten A15/A53/A57/A72.

Für mich ist KlickiBunti per se das Gegenteil von Effizienz, wer ein 
effizintes Telefon bauen will der macht es nicht Klickibunti.

Und ich möchte auch nicht weiter um den Wandel des Effizienzbegriffs bei 
ARM diskutieren sondern lieber um optimaler Prozessor/Hardware für 
FPGA-Architekturen. Jajajaaj ich weiss - ich hab selbst damit angefangen 
aber nun hab ich genug.

von S. R. (svenska)


Lesenswert?

Ordner schrieb:
> Die Verdrahtung von Flags mit den condition bits des instructions word
> bildete wohl den (Taktbestimmenden) kritischen Pfad.

Das dürfte auch der Grund sein, dass RISC-V keine Flags hat.

von (prx) A. K. (prx)


Lesenswert?

Ordner schrieb:
> Für mich ist KlickiBunti per se das Gegenteil von Effizienz, wer ein
> effizintes Telefon bauen will der macht es nicht Klickibunti.

Sind wir noch bei Prozessoren, oder schon bei Benutzeroberflächen?

von (prx) A. K. (prx)


Lesenswert?

S. R. schrieb:
> Das dürfte auch der Grund sein, dass RISC-V keine Flags hat.

Der liegt woanders: Flags in einem Statusregister und ihre Verwendung 
sind im Befehlsablauf eng gekoppelt, die Flags sind singuläre 
Ressourcen, die einer Codeoptimierung im Weg stehen können. Du kannst 
eine in einem Flag endende Bedingung beispielsweise nicht aus der 
Schleife hinaus befördern, weil das Flag meist nicht lange genug gültig 
bleibt. Steht die Bedingung hingegen in einem normalen Register (MIPS, 
Alpha) oder in einem von vielen Bedingungsregistern (PowerPC, IA64), 
dann geht das.

Die Vermeidung solcher singulärer Ressourcen gehörte schon früh zu den 
RISC Strategien. Nicht immer früh genug. Das OOO und Pipelining etwas im 
Weg stehende MQ Register verlor IBMs POWER erst mit der Entwicklung zur 
PowerPC Architektur.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

Ordner schrieb:

...
>
> und MC68000 kommt auf Platz 8 ??

Das glaub' ich nicht. Von dem (richtig schön orthogonalen) Befehlssatz 
benutzen gängige Compiler kaum die Hälfte. Und auch gute 
Assembler-Programmierer nicht alles.

Aus dieser Erkenntnis heraus hat Motorola die ColdFire Chips erfunden.

von Martin S. (strubi)


Lesenswert?

Markus F. schrieb:
> ...
>>
>> und MC68000 kommt auf Platz 8 ??
>
> Das glaub' ich nicht. Von dem (richtig schön orthogonalen) Befehlssatz
> benutzen gängige Compiler kaum die Hälfte. Und auch gute
> Assembler-Programmierer nicht alles.
>
> Aus dieser Erkenntnis heraus hat Motorola die ColdFire Chips erfunden.

68k habe ich nicht auf der Liste...würde ihn aber als eher kompakt 
einschätzen, von den guten alten Atari-Zeiten her.

von Dieter F. (Gast)


Lesenswert?

"Maschinensprache" ist das, was die Hardware (der Prozessor) ausführt. 
Also irgendein Bitmuster, welches im "Befehlsregister" ankommt und 
interpretiert / verarbeitet wird. Da ist nichts mit optimal, weil die 
Hardware (der Prozessor) genau das verstehen muss.

Optimieren kann man vorher - im Assembler (der Mnemonics in 
Maschinensprache übersetzt) oder noch weiter zuvor mit der Wahl des 
Compilers, der irgendeine Programmiersprache compiliert. Und natürlich 
mit der Wahl des Prozessors bzw. der Wahl dessen Eigenschaften.

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Vielmehr wird bei jedem Befehl (genauer: jedem Mikrobefehl) ein neues
> Zielregister aus dem Pool gefischt und nach Abschuss wird dieses dann
> als aktuelles "rx" deklariert. Da bei eine MOV keine Veränderung
> auftritt kann man aber auch gleich das Register für "ry" dafür verwenden
> und sich die Kopie sparen.

Spannend - sozusagen ein intuitiver Prozessor(-kern), der weiß das ich 
ry meine wenn ich rx anspreche. Natürlich hat ry auch gleich den 
passenden Inhalt von rx (oder ra, ... ,rz ?).

Kannst Du diese Technik bitte etwas näher erläutern?

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> "Maschinensprache" ist das, was die Hardware (der Prozessor) ausführt.
> Also irgendein Bitmuster, welches im "Befehlsregister" ankommt und
> interpretiert / verarbeitet wird. Da ist nichts mit optimal, weil die
> Hardware (der Prozessor) genau das verstehen muss.
>
> Optimieren kann man vorher - im Assembler (der Mnemonics in
> Maschinensprache übersetzt) oder noch weiter zuvor mit der Wahl des
> Compilers, der irgendeine Programmiersprache compiliert. Und natürlich
> mit der Wahl des Prozessors bzw. der Wahl dessen Eigenschaften.

Sogar auf der Maschinenbene, mit den binären Befehlen im Speicher, wird 
heute optimiert. In Hardware. Voneinander unabhängige Operationen werden 
gleichzeitig ausgeführt, u.U. auch wenn sie 20 Befehle weit voneinander 
entfernt werden.

Loads werden ausgeführt sobald die Adresse bekannt ist, egal ob man 
weiss, ob der Inhalt benötigt wird oder nicht. Und nicht unbedingt in 
der Reihenfolge, in der Speicheroperationen im Programm stehen. Das kann 
schon mal ins Auge gehen, wenn ein Store dazwischen funkt, weshalb dann 
eben an passender Stelle neu aufgesetzt wird.

Loads werden teilweise ausgeführt, bevor überhaupt ein Befehl gesehen 
wurde, der sie benötigen könnte, weil das bisherige Verhalten das 
nahelegt.

... nur ein paar Beispiele.

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Loads werden teilweise ausgeführt, bevor überhaupt ein Befehl gesehen
> wurde, der sie benötigen könnte, weil das bisherige Verhalten das
> nahelegt

Hast Du dafür eine (verlässliche) Quelle? Die "Schaltung" arbeitet also 
auch "intuitiv"? Das ist "hart verdrahtet" - daher habe ich ein 
Verständnisproblem mit intuitiven Aktionen.

von Sven D. (Gast)


Lesenswert?

Dieter F. schrieb:
> Hast Du dafür eine (verlässliche) Quelle? Die "Schaltung" arbeitet also
> auch "intuitiv"? Das ist "hart verdrahtet" - daher habe ich ein
> Verständnisproblem mit intuitiven Aktionen.

Das hat nichts mit Intuition zu tun, eher mit Vorsehung ;-) 
https://de.wikipedia.org/wiki/Explicitly_Parallel_Instruction_Computing#Speculation

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Spannend - sozusagen ein intuitiver Prozessor(-kern), der weiß das ich
> ry meine wenn ich rx anspreche. Natürlich hat ry auch gleich den
> passenden Inhalt von rx (oder ra, ... ,rz ?).

Im Grunde geht es darum, dass es, wie schon angerissen, kein definertes 
AX/EAX/RAX register mehr gibt, um mal bei x86 zu bleiben. Sondern eine 
dreistellige Anzahl Register (der erwähnte Pool) und zwei Tabellen, wo 
sich darin RAX/RBX/RCX/... grad befindet, oder irgendwann befinden wird.

Eine Tabelle beschreibt den spekulativen Stand dieser Abbildung, der im 
erweiterten Rahmen der Dekodierung noch sequentiell ausgewertet wird 
(aber mehrere Ops pro Takt). Besagt die Tabelle, dass der Wert schon 
drin steht, und das gilt für alle Inputs, dann gilt "Feuer frei". 
Andernfalls muss gewartet werden, bis eine der Ausführungseinheiten 
signalisiert, dass das fehlende Register 87 in Kürze beliefert wird.

Und eine zweite Tabelle beschreibt den abschliessenden Stand nach 
endgültigem ebenfalls wieder sequentiell erfolgenden sequentiellen 
Abschluss eines Befehls. Auf letzteren Stand kann man jederzeit wieder 
zurückfallen. Zwischendurch kann es in der Ausführungsreihenfolge recht 
durcheinander gehen.

Basierend auf dieser Methode ist ein MOV rx,ry nur eine Modifikation der 
besagten Tabellen. Eine Ausführungseinheit, die Inhalt des Registers 
kopiert, ist unöntig.

>
> Kannst Du diese Technik bitte etwas näher erläutern?

Die Grundlagen von register renaming und out of order excution hier zu 
beschreiben wäre definitiv zu viel. Oben sind 2 Links, aber Google hilft 
auch.

Die oben angesprochene MOV Optimierung steht vielleicht nicht überall 
drin, denn die ist relativ neu, ergibt sich daraus aber als nahe 
liegende Möglichkeit.

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> daher habe ich ein
> Verständnisproblem mit intuitiven Aktionen.

Das ist nicht intuitiv, sondern spekulativ. Was out of order loads 
angeht, in stark vereinfachter Darstellung:

Man führt die Loads so aus, wie die Adressen dazu fertig werden und grad 
ein Slot in einer Load-Unit frei wird. Wild durcheinander. Und 
protokolliert in einem assoziativen Speicher mit, welche Adressen schon 
durch waren. Stösst dann ein älterer Store auf eine solche Adresse, und 
es wird dadurch ein Konflikt in der Reihenfolge signalisiert, dann wirft 
man eben den gesamten spekulativen Stand weg und setzt im stabilen Stand 
(obige zweite Tabelle) frisch auf.

Solche Spekulation (wie auch bei Sprüngen und internen Operationen) 
beschleunigt Prozessoren erheblich, ist aber recht aufwändig und führt 
zu sehr viel sinnloser interner Arbeit. Und die kostet Strom, mehr 
Leistung pro ausgeführtem Befehl, als im Prinzip nötig wäre.

Das ist ein wesentlicher Grund, weshalb ARM zwei getrennte Core-Linien 
fährt. Den klassisch sequentiell arbeitenden und Strom sparenden Cortex 
A53 einerseits, und OOO Cores wie Cortex A73 andererseits. In besseren 
Handys sind ggf. beide drin. Die A72er sind normalerweise tot, werden 
aber aktiviert wenn Leistung gefragt ist.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Ab Haswell geht das noch ein Stück weiter. Um zeitraubende 
Synchronisation zwischen vielen Threads zu beschleunigen erspart man 
sich zunächst die zeitraubende Synchronisation völlig und tut einfach 
so, als ob kein Konflikt bestünde. Stellt der Core am Ende des solchen 
Abschnitts fest, dass es doch einen Konflikt gab, dann schmeisst er 
alles weg, was zwischendrin passierte, und setzt nochmal am Anfang auf. 
Hier muss aber der Programmierer etwas mitarbeiten, indem er diese 
Anfang/Ende-Klammer definiert und aufpasst, was genau er zwischendrin 
macht.

von bko (Gast)


Lesenswert?

A. K. schrieb:
> Basierend auf dieser Methode ist ein MOV rx,ry nur eine Modifikation der
> besagten Tabellen. Eine Ausführungseinheit, die Inhalt des Registers
> kopiert, ist unöntig.

wie das? also der klassische "mov" Befehl einer jeder CPU die ich kenne 
ist ja eigentlich ein "Copy" Befehl oder nicht?
Bei welcher CPU gibt es enen "echten" move?

z.B. 8051 http://www.self8051.de/MOV_A,Rr,13495.html
https://de.wikipedia.org/wiki/Motorola_68000
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cihcdbca.html

von (prx) A. K. (prx)


Lesenswert?

bko schrieb:
> A. K. schrieb:
>> Basierend auf dieser Methode ist ein MOV rx,ry nur eine Modifikation der
>> besagten Tabellen. Eine Ausführungseinheit, die Inhalt des Registers
>> kopiert, ist unöntig.
>
> wie das? also der klassische "mov" Befehl einer jeder CPU die ich kenne
> ist ja eigentlich ein "Copy" Befehl oder nicht?
> Bei welcher CPU gibt es enen "echten" move?

Falsche Frage. Es geht hier nicht um move vs copy. Dass ein MOV Befehl 
eigentlich falsch heisst, daran muss man sich gewöhnen. Es geht einfach 
nur darum, dass bei besagtem 0-cycle MOV Rx,Ry eben vorher per
  register_map[Rx] == 65
  register_map[Ry] == 87
signalisiert ist, dass sich der bisherige Inhalt von Rx in Register 65 
befindet, und nacher in Register 87
  register_map[Rx] == 87
  register_map[Ry] == 87
Es wird also schon etwas kopiert, aber eben nicht der Inhalt des 
Registers, sondern die Information darüber, wo man den findet.

: Bearbeitet durch User
von Dieter F. (Gast)


Lesenswert?

Sven D. schrieb:
> Das hat nichts mit Intuition zu tun, eher mit Vorsehung ;-

Prima - und für welche MC's gilt das? Wir sind hier nicht im Pentium xx 
/ Irgendwas yy - Univrsum unterwegs sondern auf MC-Basis (nomen est 
omen).

Es wäre schön, wenn Du das belegen könntest ...

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> signalisiert ist, dass sich der bisherige Inhalt von Rx in Register 65
> befindet, und nacher in Register 87

Und woher kommt diese Information (Takt-unabhängig)?

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Es geht einfach
> nur darum, dass bei besagtem 0-cycle MOV Rx,Ry eben vorher per
>   register_map[Rx] == 65
>   register_map[Ry] == 87
> signalisiert ist, dass sich der bisherige Inhalt von Rx in Register 65
> befindet, und nacher in Register 87
>   register_map[Rx] == 87
>   register_map[Ry] == 87

Und woher weis der (was auch immer) das?

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Prima - und für welche MC's gilt das? Wir sind hier nicht im Pentium xx
> / Irgendwas yy - Univrsum unterwegs sondern auf MC-Basis (nomen est
> omen).

Eigentlich sind wir im Bereich FPGA/VHDL unterwegs. Zudem erwähnt der 
Startbeitrag ausdrücklich Mikroprozessoren, und da das Zeitalter von 
Mehrchip-Lösungen lange vorbei ist, ist vom AVR bis rauf zum Xeon alles 
erlaubt. ;-)

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Und woher weis der (was auch immer) das?

Zettel und Bleistift, symbolisch gesprochen.
Also indem er die besagten Tabellen pflegt.

: Bearbeitet durch User
von Hans (Gast)


Lesenswert?

Dieter F. schrieb:
> Sven D. schrieb:
>> Das hat nichts mit Intuition zu tun, eher mit Vorsehung ;-
>
> Prima - und für welche MC's gilt das? Wir sind hier nicht im Pentium xx
> / Irgendwas yy - Univrsum unterwegs sondern auf MC-Basis (nomen est
> omen).
>
> Es wäre schön, wenn Du das belegen könntest ...

Naja STM32 haben zumindest teilweise einen "ART Accelerator"...
das ist schonmal sowas in die richtung...

aus dem STM32F205 datasheet:

... To release the processor full 150 DMIPS performance at this 
frequency, the accelerator implements an instruction prefetch queue and 
branch cache which increases program execution speed from the 128-bit 
Flash memory. ...

73

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Prima - und für welche MC's gilt das? Wir sind hier nicht im Pentium xx
> / Irgendwas yy - Univrsum unterwegs sondern auf MC-Basis (nomen est
> omen).

OOO ist in den Mikrocontrollern noch nicht drin, superskaler gibts mit 
dem Cortex M7 aber schon. Das wäre dann grob vergleichbar zum 
ursprünglichen Pentium.

Wenn man aber sowas wie RasPi mit ins Forenspektrum einrechnet, das wird 
das Spektrum breiter, auch wenn in den derzeitigen SoCs dieser System 
auch noch kein OOO Core steckt - dafür aber immerhin schon A53er. Aber 
das ist wirklich nur eine Frage der Zeit.

von Sven D. (Gast)


Lesenswert?

Dieter F. schrieb:
> Sven D. schrieb:
>> Das hat nichts mit Intuition zu tun, eher mit Vorsehung ;-
>
> Prima - und für welche MC's gilt das? Wir sind hier nicht im Pentium xx
> / Irgendwas yy - Univrsum unterwegs sondern auf MC-Basis (nomen est
> omen).
>
> Es wäre schön, wenn Du das belegen könntest ...

Was?

Es wäre schön wenn Du den Zwinkersmiley erkennen könntest und wenn Du 
den verlinkten Wikipedia Artikel aufmerksam lesen könntest.

Lies den Eingangspost nochmal, der TO hat nicht explizit nach 
Mikrocontrollern gefragt.

Falls Dich das Thema wirklich interessiert Beginn hier 
https://de.wikipedia.org/wiki/Out-of-order_execution zu lesen, folge den 
Links im Artikel und dann wiederum den Links in den verlinkten Artikeln 
uswusf. Dann hast Du genug zu tun und lernst viel dazu.

Der Wikipedialink in meinem Beitrag 
Beitrag "Re: Optimale Maschinensprache" dient dazu Dir zu 
zeigen, das A.K. das unten zitierte nicht erfunden hat.

Dieter F. schrieb:
> A. K. schrieb:
>> Loads werden teilweise ausgeführt, bevor überhaupt ein Befehl gesehen
>> wurde, der sie benötigen könnte, weil das bisherige Verhalten das
>> nahelegt
>
> Hast Du dafür eine (verlässliche) Quelle? Die "Schaltung" arbeitet also
> auch "intuitiv"? Das ist "hart verdrahtet" - daher habe ich ein
> Verständnisproblem mit intuitiven Aktionen.

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Hast Du dafür eine (verlässliche) Quelle? Die "Schaltung" arbeitet also
> auch "intuitiv"? Das ist "hart verdrahtet" - daher habe ich ein
> Verständnisproblem mit intuitiven Aktionen.

Arbeitsweise:

Wenn ein Load in keinem Cache zu finden ist, dann muss das RAM dran. Es 
dauert zwar übel lang, bis von da was kommt, dann aber kommen die 
Speicherworte sequentiell in rasendem Tempo. RAM ist heute im Grunde wie 
anno dunnemal ein Bandlaufwerk.

Das kann man nutzen. Weshalb es nebendran noch eine Prefetch-Unit gibt. 
Die kriegt mit, dass nach dem RAM-Zugriff auf Adressblock N und 
Adressblock N+1 nun N+2 dran ist. Und vermutet ganz intuitiv, dass 
darauf bestimmt noch N+3 folgen wird. Und läd den z.B. schon mal 
vorsorglich in den L2-Cache. Etc. Die exakten Algorithmen sind natürlich 
Betriebsgeheimnis.

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> ist vom AVR bis rauf zum Xeon alles
> erlaubt. ;-)

Und wo - z.B. beim AVR (bei welchem genau) geht das?

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Und vermutet ganz intuitiv, dass
> darauf bestimmt noch N+3 folgen wird. Und läd den z.B. schon mal
> vorsorglich in den L2-Cache. Etc. Die exakten Algorithmen sind natürlich
> Betriebsgeheimnis.

Das heisst für mich, die Optimierungen a la "C-Hater" sind obsolet, da 
ja der MC per se optimiert. Da wird sich C-Hater aber freuen :-)

Meinst Du das wirklich ernst - für z.B. AVR?

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
>> ist vom AVR bis rauf zum Xeon alles erlaubt. ;-)
>
> Und wo - z.B. beim AVR (bei welchem genau) geht das?

Genausowenig wie beim 8051 oder PIC. Wer sagt, dass sich solche 
Techniken bereits beim AVR finden müssen? Aber beim Core i3 oder Xeon, 
da gibts das, und auch in deinem Handy, wenn es zur Oberklasse zählt(e).

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Die exakten Algorithmen sind natürlich
> Betriebsgeheimnis.

Blubb ... :-)

von Dieter F. (Gast)


Lesenswert?

Sven D. schrieb:
> Falls Dich das Thema wirklich interessiert Beginn hier
> https://de.wikipedia.org/wiki/Out-of-order_execution zu lesen, folge den
> Links im Artikel und dann wiederum den Links in den verlinkten Artikeln
> uswusf. Dann hast Du genug zu tun und lernst viel dazu.

Wer sagt, dass ich das will?

Wir sind hier in einem MC-Forum - oder?

Ich schwalle auch nicht über Hyperspache oder Beamen - das gehört 
schlicht nicht hier her. An intuitive Maschinen-Algorithmen glaube ich 
nicht - predictive ja. Schon gar nicht, wenn die fest "im Blech" 
verankert worden sein sollen.

von Sven D. (Gast)


Lesenswert?

Dieter F. schrieb:
> Wer sagt, dass ich das will?

Das ist doch mal eine Aussage. Da weiss gleich jeder das Du hier im 
Thread nur stänkern willst.

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Ich schwalle auch nicht über Hyperspache oder Beamen - das gehört
> schlicht nicht hier her. An intuitive Maschinen-Algorithmen glaube ich
> nicht - predictive ja. Schon gar nicht, wenn die fest "im Blech"
> verankert worden sein sollen.

In der Branch Prediction der in diesem Jahr kommenden Zen/Ryzen 
Prozessoren steckt etwas drin, das AMD als neuronales Netzwerk 
bezeichnet. Womit wir bei künstliche Intelligenz sind. Also zieh dich 
warm an, denn damit sind wir schon verdammt dicht an Intuition dran. ;-)

von dd (Gast)


Lesenswert?

> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?
> Kennt jemand eine Studie, die sich dieses Themas angenommen hat?

Ich glaube diese Frage ergibt keinen Sinn. Eine Maschinensprache umfasst 
einfach alle Befehle einer Maschine. Da gibt es nichts zu optimieren.

von (prx) A. K. (prx)


Lesenswert?

dd schrieb:
> Ich glaube diese Frage ergibt keinen Sinn. Eine Maschinensprache umfasst
> einfach alle Befehle einer Maschine. Da gibt es nichts zu optimieren.

Doch, natürlich. Nämlich die Maschinendefinition. Mit welcher 
ISA/Maschinensprache sie ausgestattet sein sollte, um dem Ziel der 
Optimierung (Preis,Leistung,Strom,...) möglichst nahe zu kommen.

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> In der Branch Prediction der in diesem Jahr kommenden Zen/Ryzen
> Prozessoren steckt etwas drin, das AMD als neuronales Netzwerk
> bezeichnet. Womit wir bei künstliche Intelligenz sind. Also zieh dich
> warm an, denn damit sind wir schon verdammt dicht an Intuition dran. ;-)

Ja, nimm Dir einen Trichter, etwas Alu-Folie und bau Dir einen Hut draus 
:-) Hilft wahrscheinlich :-)

von Flieger (Gast)


Lesenswert?

Mark B. schrieb:
> Flieger schrieb:
>> mov rx,ry kann auf OOO MAschinen 0 Takte brauchen
>
> Hm, wie das?

Verschwindet im Register renaming was eine OOO-Maschine sowieso haben 
muß.

von Dieter F. (Gast)


Lesenswert?

Sven D. schrieb:
> Das ist doch mal eine Aussage. Da weiss gleich jeder das Du hier im
> Thread nur stänkern willst.

Was willst Du denn? Und welchen Beitrag leistest Du denn (außer stänkern 
:-) )

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Ja, nimm Dir einen Trichter, etwas Alu-Folie und bau Dir einen Hut draus
> :-) Hilft wahrscheinlich :-)

Und den soll ich dir dann zum Schutz vor intuitiv arbeitenden AVRs 
schicken? Aber mein Aluvorrat ist noch aus dem letzten Jahrtausend, ich 
brauch davon nicht so viel - also ich weiss nicht ob das noch 
funktioniert.

von Dieter F. (Gast)


Lesenswert?

Herbert schrieb:
> Gibt es eine optimale Maschinensprache (Mikrocontroller,
> Mikroprozessor), die auf der einen Seite minimale Ressourcen (z. B. des
> FPGAs) benötigt und auf der anderen eine hohe Rechenleistung bietet?

A. K. schrieb:
> In der Branch Prediction der in diesem Jahr kommenden Zen/Ryzen
> Prozessoren steckt etwas drin, das AMD als neuronales Netzwerk
> bezeichnet. Womit wir bei künstliche Intelligenz sind. Also zieh dich
> warm an, denn damit sind wir schon verdammt dicht an Intuition dran. ;-)

Damit ist alles gesagt.

von Dieter F. (Gast)


Lesenswert?

A. K. schrieb:
> Und den soll ich dir dann zum Schutz vor intuitiv arbeitenden AVRs
> schicken?

Nein - denn die gibt es nicht (es sei denn, Du beweist mir das 
Gegenteil)

Da gilt nur für Deine "Visionen" ... :-)

von (prx) A. K. (prx)


Lesenswert?

Dieter F. schrieb:
> Nein - denn die gibt es nicht (es sei denn, Du beweist mir das
> Gegenteil)

Also ein AVR mit OOO Execution und ein paar weiteren Feinheiten in einem 
FPGA, das tät wohl schon reinpassen. Vielleicht auch mit 4xSMT, das wär 
doch wirklich ein Gewinn.

von dd (Gast)


Lesenswert?

A. K. schrieb:
> dd schrieb:
>> Ich glaube diese Frage ergibt keinen Sinn. Eine Maschinensprache umfasst
>> einfach alle Befehle einer Maschine. Da gibt es nichts zu optimieren.
>
> Doch, natürlich. Nämlich die Maschinendefinition. Mit welcher
> ISA/Maschinensprache sie ausgestattet sein sollte, um dem Ziel der
> Optimierung (Preis,Leistung,Strom,...) möglichst nahe zu kommen.

hm ok - so habe ich das noch nicht betrachtet.

von Pandur S. (jetztnicht)


Lesenswert?

Es sind viele Optimierrungen und Anforderungen denkbar, die je nach 
Problemstellung andere Loesungen bringen. Davon ist ein orthogonaler 
Befehlssatz nur ein kleinraeumiger Ansatz.

Sparc zB hatte glaub 32 Registerbanke. Bei einem Kontextswitch, im 
Wesentlichen ein Interrupt, der auch ein Taskwechsel bedeuten kann, wird 
einfach der Registersatz, per Index, umgeschalten, und man spart sich 
den Push/pop Register Save Mechanismus. Die 32 Stueck fuer 32 Interrupts 
waren damals gut, heut etwas wenig. Wenn man die in den Cache 
verlagerte..
So ein Konstrukt ist optimal fuer eine interruptlastige Maschine.

DSP Maschinen haben den speziellen MAC (Multiply-Add) Befehl, der 
effizent eine Variable mit einer konstanten nultipliziert und sukzessiv 
addiert. So kann man einen Variablenvektor mit einem Koeffizientenvektor 
multiplizieren, wenn man da noch die DMA Maschine aufsetzt So ein 
Vorgang ergibt einen Befehl und wird im Hintergrund abgespult.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.