![]() |
Benötigte Taktzyklen von Bytecodes herausfinden
Abend, gibt es eine Möglichkeit die benötigten Taktzyklen einer Funktion exakt zu bestimmen?
Anders gefragt auch hängt die Ausführungsgeschwindigkeit nur von der Länge (in Bytes) der zu ladenden Opcodes ab, oder kommt es noch auf andere Dinge an? Sind z.B. ein
Code:
und
xor eax, eax
Code:
(jeweils 2 Byte) sowie
or eax, eax
Code:
und
inc ebx
Code:
(jeweils 1 Byte) immer "gleich schnell" (in Zyklen), oder unterscheiden sich Opcodes in ihrer Geschwindigkeit?
pop ebx
|
Re: Benötigte Taktzyklen von Bytecodes herausfinden
Das steht (glaube ich) in den Spezifikationen der Prozessoren. Wenn es das nicht tut, musst du wohl oder übel einen Benchmark schreiben, gerade für komplexere - und das fängt bei pop an. Möglich wäre zum Beispiel am Anfang ein RDTSC, dann 100k mal die Instruktion und wieder ein RDTSC zur eigentlichen Messung. Du musst dabei aber beachten, dass es auch Instruktionen gibt, die variabel schnell sein können, zum Beispiel I/MUL oder andere.
|
Re: Benötigte Taktzyklen von Bytecodes herausfinden
Ich nehm dann mal an, das mit den variabel schnellen Instruktionen wird dann nicht nur vorzeichenbehaftete/vorzeichenlose Befehle sondern auch so Dinge wie 8-/16-/32-bit Multiplikation und Division betreffen (ohne FPU). Ein div ist ja z.B. auch immer exakt 2 Byte groß, ich kann mir aber nicht vorstellen, dass dort 16-bit genauso schnell sind wie 32-bit.
Demnach lässt sich die Frage aber nicht generell beantworten, sondern es hängt stark von der Zielhardware ab. Es war ja schon öfters irgendwo zu lesen, dass ein add reg, 1 auf Intel-Prozessoren schneller ist als ein inc reg. Hab mich da auch schon immer gefragt warum, da das inc eigentlich erstmal kleiner ist. Ich werd mal einen Blick in die Intel-Spezifikationen werfen, um zumindest einen groben Überblick zu haben. |
Re: Benötigte Taktzyklen von Bytecodes herausfinden
Zitat:
|
Re: Benötigte Taktzyklen von Bytecodes herausfinden
Du könntest dir auf der Seite von
![]() ![]() |
Re: Benötigte Taktzyklen von Bytecodes herausfinden
Zitat:
Allein die Cachegrössen von first/second/third level cache haben einen extrem komplexen Einfluss auf die Arbeitsgeschwindigkeit, die natürlich auch von der speziellen Software abhängig ist. Daher ist auch Nachmessen völlig witzlos, das Ergebnis gilt nur für das Messprogramm und die aktuelle Hardware und kann sich durch Umstellen einiger Befehle bei gleicher Funktion dramatisch ändern. Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz