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ß
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
Moderne Intel Prozessoren haben aber einen 64 bit bus. Ich frage mich auch, wie das zB bei den ARMs geht?
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
Welche x86? Das ist nicht Bestandteil der Instruction Set Architecture und folglich in jeder Implementierung anders.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.