Forum: PC-Programmierung Breite Prozessordatenbus 32 Bit ausnutzen?


von Karl Meutz (Gast)


Lesenswert?

Hallo,

wäre es technisch möglich, über einen 32-Bit breiten CPU-Datenbus
16-Bit zu übertragen?
Die Bus Interface Unit füllt bei freien 4 Byte (32-Bit breiter
CPU-Datenbus) die nächsten 4 Byte vom Speicher in die Prefetch-Queue
ein.
Nutzt sie die 4-Byte Blöcke nur wegen der Performance oder wäre es auch
möglich, dass sie 16-Bit über einen 32-Bit breiten Bus überträgt (wie
auch immer)?

Gruß

von Gerhard (Gast)


Lesenswert?

Hallo Karl

ich weiss nicht von welchem Prozessor du sprichst. Das ist durchaus
relevant. Wenn Du von einem Intel-Prozessor redest, dann ist das
möglich. Die 32-Bit Intel-Prozessoren können 8, 16 oder 32 Bit
transportieren.

Gerhard

von Lupin (Gast)


Lesenswert?

Moderne Intel Prozessoren haben aber einen 64 bit bus.

Ich frage mich auch, wie das zB bei den ARMs geht?

von Karl Meutz (Gast)


Lesenswert?

Hallo!

Gerhard: Danke Dir, genau das wollte ich wissen! Dann wäre es technisch
für die BUI ja möglich, 1 Byte in die Prefetch-Queue zu stecken, falls 1
Byte frei werden sollte.

Weißt du, wie x86 reagieren, wenn in der Prefetch-Queue 1 Byte frei ist
und die beiden nächsten Befehle im Speicher jeweils 1 Byte und 3 Byte
breit sind?
Lädt die BUI direkt 1 Byte nach oder wartet, bis sie die Daten bündeln
kann (das müssten sie ja dann vorhersehen), wobei hier aber bestimmt
die Pipeline nicht optimal ausgelastet wäre, auf der anderen Seite aber
doch auch nicht, wenn volle 4 Byte zu laden länger dauert, als der
gerade ausgeführte Befehl Taktzyklen verbraucht!?

Grüße

von A.K. (Gast)


Lesenswert?

Welche x86? Das ist nicht Bestandteil der Instruction Set Architecture
und folglich in jeder Implementierung anders.

von Gerhard (Gast)


Lesenswert?

Hallo Karl

das sind schon sehr detaillierte Fragen, die ich nicht beantworten
kann. Das weiss vielleicht ein INTEL-Freak. Grundsätzlich versucht ein
32-Bit -Prozessor immer 32 Bit gleichzeitig zu lesen. Dass die
Intel-Dinger auch 16 Bit und 8 Bit lesen und schreiben können, ist
meine ich - wegen der Abwärts-kompatibilität. Wenn man versucht
byteweise auf Adressen zuzugreifen, die nicht Doppelwort-aligned sind,
gibts Verzögerungen. 16-Bot oder 32-Bit - RISC-Prozessoren können
meines Wissens sowas nicht.
Wie aber Prozessoren ihre Prefetch laden - weiss ich nicht. Gerade bei
so komplzierten Dingern wie den Intel-Prozessoren, die wahlweise aus
dem primären Cach, sekundären cache oder aus dem Hauptspeicher laden
könenn... oh Gott.



Gerhard

von Wolfram (Gast)


Lesenswert?

Wie schon gesagt das ist von Prozessor zu Prozessor verschieden.
Du kannst ja bei Intel in die Datenblätter/Programmierbeschreibung des
Pentiumprozessors reinschauen.
Warum interessiert dich die Prefetchqueue des x86 ,des letzte Mal das
ich davon was gehört habe war im Zusammenhang mit der Unterscheidung
zwischen 8086 und 8088 beim einen war die Prefetchqueue 4 und beim
anderen 6byte lang wenn ich nicht irre. Dann gab es da noch die
möglichkeit per selbstmodifizierendem Code Debugger zum stoppen zu
bringen. (Modifikation von Code der schon in der Prefetchqueue war)
Aber spätestens ab Pentium ist das eigentlich nicht mehr interessant
(parallele Abarbeitung, Caches etc.) ansonsten findet man noch die
Angabe das ein P4 bis zu 3 Befehlen fetchen kann aber nur 2
verarbeiten...
Probiere es doch einfach mit selbstmodifizierendem Code aus, wie ein
x86 reagiert.

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.