AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Benötigte Taktzyklen von Bytecodes herausfinden

Benötigte Taktzyklen von Bytecodes herausfinden

Ein Thema von Cyf · begonnen am 4. Jan 2009 · letzter Beitrag vom 5. Jan 2009
Antwort Antwort
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#1

Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 4. Jan 2009, 19:37
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?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 4. Jan 2009, 19:43
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.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#3

Re: Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 4. Jan 2009, 19:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 4. Jan 2009, 20:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 5. Jan 2009, 08:15
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: Benötigte Taktzyklen von Bytecodes herausfinden

  Alt 5. Jan 2009, 11:39
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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