Effizienz prüfen?

Moderatoren: crack, Krüsty, Marwin

Effizienz prüfen?

Beitragvon Magellan » Freitag 29. Februar 2008, 06:41

Hallo Forum!

Gibt es eine Möglichkeit, mit der ich überprüfen kann, wie effizient/schnell verschiedene Implementierungen von ein und dem selben Algorithmus sind?

Als einfaches Beispiel:

Version 1:
if (i >=0) printf("Positive Zahl!");

Version 2:
if ((i&128)>>7) printf("Positive Zahl!");

Version 1 nutzt einen Vergleichsoperator, bei Version zwei checke ich mit bitweise-UND, ob das Vorzeichenbit gesetzt ist und verschiebe dann um sieben Stellen nach rechts, sodass die if-Anweisung eine 1 oder 0 bekommt, je nachdem, ob positiv oder negativ.

Wie kann ich checken, was schnelleren Code ergibt?
Was bei einer solchen Anweisung egal ist, fällt wohl schon ins Gewicht, wenn man solche Überprüfungen millionenfach durchführen muss.

Grüße,

Sebastian
Magellan
Newbie
 
Beiträge: 3
Registriert: Freitag 22. Februar 2008, 23:02

Re: Effizienz prüfen?

Beitragvon crack » Freitag 9. Mai 2008, 18:36

Natürlich gibt es die Möglichkeit, zumindest für Prozeduren. Ich habe sowas hier und da mit Prozeduren in Assembler gemacht, aber es dürfte bei allen anderen Compilersprachen genauso gut funktionieren. So mal als 'allgemeines Kochrezept':
  • Systemtimer lesen und sichern (Zeitstempel)
  • Zählschleife initialisieren für z.B. 1000 Durchläufe
  • Label
  • Prozeduraufruf
  • Sprung zu Label solange Zähler > 0
  • Systemtimer lesen und in anderem Register oder Variable speichern
  • von dem aktuellen Timerwert den zu erst gesicherten subtrahieren
  • Das ergebniss durch die Anzahl der Schleifendurchläufe teilen
Um möglichst hohe Genauigkeit zu erreichen ist es sinnvoll eine möglichst hohe Anzahl an Schleifendurchläufen zu wählen und andererseits den Programmstrukturellen Teil der Schleife möglichst kurz zu halten ... :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu C/C++

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron