Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Prozessortakte zählen
HeinzTomato
myCSharp.de - Member

Avatar #avatar-2451.jpg


Dabei seit:
Beiträge: 346
Herkunft: Hamburg

Themenstarter:

Prozessortakte zählen

beantworten | zitieren | melden

Hallo allerseits.

Ich möchte, um eine halbwegs "wissenschaftliche" Aussage über die Geschwindigkeit unterschiedlicher Algorithmen machen zu können gerne erfahren, wieviele Prozessortakte ein bestimmter Algorithmus dauert, weil die reine Zeit ja Prozessorabhängig ist.

Ein "Tick" in c# hat ja nix mit dem Takt zu tun, sondern nur 100ns.

Gibt es eine Möglichkeit, das in C# zu messen?

Wenn nicht, gibt es eine Gegenüberstellung, in denen jede einzelne (standard)-Befehl (for, i++, funktionsaufruf....) in Bezug auf seine Laufzeit verzeichnet ist, oder ist das durch Optimierung beim Compilieren nicht möglich?
Mein Haus, mein Viertel, mein Blog
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

Nutze doch einen Freeware-Profiler. Gibts so einige für .NET. Da musst du auch nix machen, nur ausführen und darauf achten, dass die der JIT keinen Streich spielt (nur die 2. Messung zählt, sonst mißt du den JIT mit).

Ansonsten gibt es kleine Frameworks, die bringen die Messfunktionen mit nach denen du suchst, musst sie nur noch an die richtige Stelle basteln. Da gibts was auf CodeProject, ist aber grad tot....
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo HeinzTomato,

hm, aber Prozessortakte sind auch und gerade prozessorabhängig und damit eine ebenso schlechte Maßzahl. Du willst ja unterschiedliche Algorithmen vergleichen. Wenn du das machen willst, müsstest du auch bei den Prozessortakten immer denselben Prozessor nehmen. Dann kannst du aber auch die Zeit als Maßzahl nehmen.

Die von dir gewünschte Gegenüberstellung gibt es höchstens für Assembler, aber nicht für Hochsprachen und schon gar nicht für Sprachen mit JIT. Und selbst bei Assembler werden solche Aussagen bei der heutige Pipeline-Länge zunehmend unbrauchbarer. Die Zeiten, wo man sagen konnte eine Addition dauert einen Takt, sind vorbei.

herbivore
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Es gibt einen Assemblerbefehl mit dem man die "Prozessorschläge" messen kann. Er heißt rdtsc. Nach dem Aufruf steht dann im Register EAX::EDX der aktuelle Time-Stamp der CPU. Er wird häufig benutzt um die Geschwindigkeit eines Prozessors zu ermitteln.
Schau mal hier:
http://www.devmaster.net/forums/lofiversion/index.php?t369.html
Du müsstest das ganze aber in C und Assembler schreiben und dann via Interop einbinden.

Aber wie gesagt: ein einzelner Prozessortakt muss nicht unbedingt einer Assemblerinstruktion entsprechen (vorallem auf unterschiedlichen Prozessoren).
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

Er will doch nur die "Zeit" möglichst genau messen. Das mit den Prozessortakten war wohl eher eine Idee das umzusetzen...
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Ja, und? Auch mit rdtsc kann man Zeit messen. Dazu noch hoch genau. Alternativ kannst du natürlich auch QueryPerformanceCounter verwenden
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers