Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeitmessung mit Compileroptimierung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.02.2010, 20:25 Uhr
Prog



Hi, ich beschäftige mich gerade mit einigen Beispielen zur Codeoptimierung (Manuell, also ohne Compileroptimierung). Dabei messe ich die Zeit, die zum ausführen eines bestimmten Codeschnipsel (mit und ohne Optimierung) gebraucht wird. Um in messbare Zeitbereiche zu kommen führe ich den jeweiligen Code mehrmals in einer Schleife aus. Das funktioniert so weit auch. (Zur Zeitmessung verwende ich boost::timer, mein Compiler ist g++-4.4.3)

Ein Beispiel:


C++:
// Schleife zur Zeitmessung
for(unsigned int i=0; i<4000000000; ++i){
    // Codeschnipsel
    x = 2;
    y = x+5;
    a = x;
    b = 0;
    c = a/x;
    d = x*c*c*c*c;
    e = x+b+b+b;
}



Die optimierte Variante:


C++:
for(unsigned int i=0; i<4000000000; ++i){
    x = 2;
    y = 7;
    b = 0;
    c = 1;
    a = d = e = x;
}



Da ich nun aber gerne zeigen möchte, dass die Compileroptimierung das auch selbst hinkriegt, habe ich ein Problem. Mein Compiler ist natürlich intelligent genug, die an sich unsinnige Schleife, gleich mit wegzuschmeißen.

Am günstigsten währe es, wenn ich direkt die benötigten Takte zählen könnte, die zum ausführen meiner Codeschnipsel benötigt werden. Ansonsten könnte ich mir noch vorstellen, das es möglich ist, dem Compiler irgendwie zu verbieten die Schleife wegzuoptimieren.

Viele Grüße
prog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2010, 23:08 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von Prog:
Am günstigsten währe es, wenn ich direkt die benötigten Takte zählen könnte, die zum ausführen meiner Codeschnipsel benötigt werden.

Dazu fällt mir nur ein, den Assemblercode, den der Compiler produziert, zu analysieren. Also mit -S eine Assemblerdatei erzeugen, und die Befehle untersuchen, die der Compiler erzeugt hat. Evtl. ist es auch zweckmässig, mit -a oder -ax Profilinginformationen in den Code einzubauen, und die Arbeit dann einem Profiler zu überlassen.


Zitat von Prog:
Ansonsten könnte ich mir noch vorstellen, das es möglich ist, dem Compiler irgendwie zu verbieten die Schleife wegzuoptimieren.

Also mit -O0 kannst Du dem Compiler das optimieren ganz verbieten. Ansonsten gibt es da bald ein dutzend Optimierungsoptionen, die man ausprobieren kann...
Um den Compiler am kompletten wegoptimieren der Schleife zu hindern, wäre auch noch eine Möglichkeit, die Variablen als volatile zu deklarieren.

C++:
volatile int x=2;



Soweit meine 2 cent...

(... die diesem netten Büchlein entstammen, was die Compileroptionen angeht. )



Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.02.2010 um 23:13 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: