Prozessor - ausführbare Instruktionen abhängig vom Takt



  • Hi,

    ich wollte fragen, wie man für RISC und CISC Prozessoren anhand des Taktes also z.B. 100 MHz bestimmen kann wie viele Instruktionen dieser in 1 Sekunde oder 1 Minute ausführen kann (maximal, also z.B. keine Speicherzugriffe).

    MfG
    foerster7891



  • Indem man sich die Datenblätter des Herstellers anschaut, wo sowas drinsteht.

    In der x86-Anleitung, die dem MASM beilag, standen detaillierte Auflistungen, wie viele Cycles ein Opcode, abhängig von den Operanden (Register, Memory, Immediate), auf welcher CPU (8086, 80186, 80286, i386, i486) benötigt. Bei modernen CISC-CPUs ist das komplizierter, weil die üblicherweise nicht einfach die Opcodes abarbeiten, sondern diese in µops zerlegen, Speicherzugriffe umordnen und manche Instruktionen parallel ausführen, und weil heute sekundäre Effekte, die man in den Opcodes gar nicht sieht, eine große Rolle bei der Performance spielen, z.B. die Genauigkeit der Sprungvorhersage oder Cache-Misses.

    Bei RISC-CPUs kenne ich mich nicht näher aus, aber wenn ich recht informiert bin, ist der Witz z.B. bei MIPS gerade, daß eine Instruktion genau ein Cycle braucht, damit man in der CPU selbst keine Lock-Mechanismen verwenden muß.



  • Hmm,

    also wir haben einen Fragebogen zur Vorbereitung auf eine Uniprüfung bekommen und da steht die Frage drin, wieviele Instruktionen pro Sekunde ein RISC-Prozessor bei einem Takt von 1GHz theoretisch mindestens ausführen kann.

    Allerdings habe ich es hier versucht allgemein zu formulieren, da ich keine Lösung wollte sondern das Werkzeug um den Weg bei abweichenden Fragen mehrfach zu gehen.

    Deine Antwort macht die ganze Angelegenheit etwas schwierig, gibt es eine Faustformel um einen ungefähren Wert zu bestimmen?



  • foerster7891 schrieb:

    also wir haben einen Fragebogen zur Vorbereitung auf eine Uniprüfung bekommen und da steht die Frage drin, wieviele Instruktionen pro Sekunde ein RISC-Prozessor bei einem Takt von 1GHz theoretisch mindestens ausführen kann.

    Wenn der Prozessor eine Instruktion hat, die in einem Zyklus fertig wird, schafft er davon ungefähr 1 GHz.



  • hmm, ja logisch, mir war nicht ganz klar was mit einem Zyklus gemeint war.

    Vielen Dank.



  • Mindestens?


  • Mod

    DocShoe schrieb:

    Mindestens?

    Womit die Antwort 0 wäre. Oder -1, um ganz sicher zu sein.



  • Hihi 🙂
    Jo, wieder eine typische Fragestellung eines Lehrenden.
    Those who can...

    @foerster7891
    Die meisten RISC CPUs werden wohl Befehle haben die in einem Zyklus durchlaufen. Wenn man das voraussetzt und sich den Befehl aussuchen darf, dann ist die Antwort gleich der Taktfrequenz, also bei 1 GHz eben 1 Mrd. Befehle pro Sekunde.

    Dummerweise gibt's aber vermutlich auch heute noch RISC CPUs deren schnellster Befehl >= 2 Zyklen braucht.

    Ich denke der Ersteller des Fragebogens hat sich hier selbst verwirrt, durch die Idee, dass der einzige Grund warum Instruktionen länger als einen Takt brauchen könnten der wäre, dass sie in mehrere µOPs zerlegt werden. Was halt ganz grosser Topfen ist.

    EDIT: je mehr ich zu dem Thema lese, desto mehr vermute ich dass da doch was dran sein könnte. Also nicht dass jeder Befehl auf nem RISC in 1 Cycle geht, aber dass die einfachen Befehle auf quasi allen RISCs in 1 Cycle liefen. Wobei ich die Fragestellung in der Form immer noch für Unfug halte.



  • audacia schrieb:

    Bei RISC-CPUs kenne ich mich nicht näher aus, aber wenn ich recht informiert bin, ist der Witz z.B. bei MIPS gerade, daß eine Instruktion genau ein Cycle braucht, damit man in der CPU selbst keine Lock-Mechanismen verwenden muß.

    Kann ich mir grad gar nicht vorstellen.
    Das würde heissen dass die alle nicht multiplizieren und schon gar nicht dividieren konnten.
    ps: oder viel langsamer getaktet waren als nötig gewesen wäre.



  • hustbaer schrieb:

    Kann ich mir grad gar nicht vorstellen.
    Das würde heissen dass die alle nicht multiplizieren und schon gar nicht dividieren konnten.
    ps: oder viel langsamer getaktet waren als nötig gewesen wäre.

    Wie gesagt, ich weiß zu dem Thema fast nichts, was nicht bei Wikipedia steht. Da steht allerdings folgendes:

    Wikipedia schrieb:

    One major barrier to pipelining was that some instructions, like division, take longer to complete and the CPU therefore has to wait before passing the next instruction into the pipeline. One solution to this problem is to use a series of interlocks that allows stages to indicate that they are busy, pausing the other stages upstream. Hennessy's team viewed these interlocks as a major performance barrier since they had to communicate to all the modules in the CPU which takes time, and appeared to limit the clock speed. A major aspect of the MIPS design was to fit every sub-phase, including cache-access, of all instructions into one cycle, thereby removing any needs for interlocking, and permitting a single cycle throughput.
    ...
    The first commercial MIPS model, the R2000, was announced in 1985. It added multiple-cycle multiply and divide instructions in a somewhat independent on-chip unit. New instructions were added to retrieve the results from this unit back to the register file; these result-retrieving instructions were interlocked.

    http://en.wikipedia.org/wiki/MIPS_instruction_set

    Das mit dem langsameren Takt ist aber schon richtig, und das hat auch HP und Intel motiviert, beim Itanium jeweils drei 41-bit-Instruktionen in einem 128-bit-Opcode zu verstecken. Wenn der Itanium also einen Opcode pro Cycle verarbeitet, macht das "mindestens" sogar Sinn - denn im Idealfall verarbeitet er dann drei Instruktionen pro Cycle.



  • Gab's nicht auch sogar CPUs wo der Compiler bzw. Assembler sicherstellen musste dass bestimmte Pausen eingehalten werden?
    Also CPUs wo man in Assembler durchaus zwei Multiplikationen hintereinander hinschreiben konnte, der Assembler dann aber einfach eine gewisse Menge NOPs eingefügt hat damit die CPU genug Zeit hat das Ergebnis zu berechnen. Bzw. das selbe wenn man das Ergebnis eines "langen" Befehls gleich in der nächsten Instruktion verarbeiten wollte. Oder einen anderen Befehl absetzen, der aber das selbe Rechenwerk benötigt.

    Wobei man dann, wenn man NOPs mitzählt, natürlich immer noch behaupten könnte dass die CPU einen Befehl pro Takt abarbeitet 😃


Anmelden zum Antworten