Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Benötigte Taktzyklen von Bytecodes herausfinden (https://www.delphipraxis.net/126908-benoetigte-taktzyklen-von-bytecodes-herausfinden.html)

Cyf 4. Jan 2009 19:37


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:
xor eax, eax
und
Code:
or eax, eax
(jeweils 2 Byte) sowie
Code:
inc ebx
und
Code:
pop ebx
(jeweils 1 Byte) immer "gleich schnell" (in Zyklen), oder unterscheiden sich Opcodes in ihrer Geschwindigkeit?

Dax 4. Jan 2009 19:43

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.

Cyf 4. Jan 2009 19:57

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.

nicodex 4. Jan 2009 20:49

Re: Benötigte Taktzyklen von Bytecodes herausfinden
 
Zitat:

Zitat von Cyf
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?

Das hängt von mehreren Faktoren gleichzeitig ab. Moderne CPUs können (unter spezifizierten Bedingungen) bestimmte Anweisungsfolgen auf mehren Pipelines parallel verarbeiten. Man kann also nicht einfach die Taktzyklen für alle (einzelnen) Anweisungen addieren, um die gesamte Laufzeit zu ermitteln.

Flocke 5. Jan 2009 08:15

Re: Benötigte Taktzyklen von Bytecodes herausfinden
 
Du könntest dir auf der Seite von Agner Fog mal das Dokument 4 ansehen: Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel and AMD CPU's.

Reinhard Kern 5. Jan 2009 11:39

Re: Benötigte Taktzyklen von Bytecodes herausfinden
 
Zitat:

Zitat von Cyf
Abend, gibt es eine Möglichkeit die benötigten Taktzyklen einer Funktion exakt zu bestimmen?

Nein, für heutige Prozessoren nicht. Opcodes können im Cache sein oder nicht, das kann schon eine Grössenordnung an Geschwindigkeit ausmachen. Z.B. ist eine Schleife um ein Vielfaches schneller abgearbeitet, wenn sie komplett in den Cache geladen wurde. Es gibt auch noch unzählige Optimierungen wie spekulative Ausführung, dazu kommt, dass alle halbwegs leistungsfähigen Prozessoren mehrere Befehle gleichzeitig abarbeiten, und ausserdem unterscheidet sich das Timing sowieso von Typ zu Typ, meistens sogar von Stepping zu Stepping.

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 00:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz