next up previous contents index
Nächste Seite: 11.3 Profiling Aufwärts: 11. Tips und Tricks Vorherige Seite: 11.1 Präprozessorbefehle   Inhalt   Index


11.2 Zeitmessung im Programm

Zum Umfang von C++ gehören einige Funktionen, welche es erlauben die Laufzeit bestimmter Programmabschnitte (oder des gesamten Codes) zu ermitteln. Die entsprechenden Deklarationen werden im Headerfile time.h bereitgestellt. (siehe Ex1121.cc)

//      Ex1121.cc
...
#include <time.h>               // contains clock()

int main()
{
 ...
 double time1=0.0, tstart;      // time measurment variables
 
//      read data 
 ...
 tstart = clock();              // start 

//      some code
 ...
 time1 += clock() - tstart;     // end
 ...
 time1 = time1/CLOCKS_PER_SEC;  // rescale to seconds

 cout << "  time = " << time1 << " sec." << endl;
 
 return 0;
}

Es können beliebig viele Zeitmessungen im Programm erfolgen (irgendwann verlangsamen diese aber ihrerseits das Programm!). Jede dieser Zeitmessungen benötigt einen Start und ein Ende, allerdings können die Zeiten verschiedener Messungen akkumuliert werden (durch einfaches addieren).

Im File Ex1121.cc (siehe Ex1121.cc) wird der Funktionswert eines Polynoms vom Grade 20 an der Stelle x d.h., s = $ \sum_{{k=0}}^{{20}}$ak . xk, berechnet. Die 21 Koeffizienten ak und der Wert x werden im File input.1121 bereitgestellt. Der Funktionswert wird auf zwei, mathematisch identische, Weisen im Programm berechnet. Variante 1 benutzt die Funktion pow, während Variante 2 den Wert von xk durch fortwährende Multiplikation berechnet.

Das unterschiedliche Laufzeitverhalten (Ursache !?) kann nunmehr durch Zeitmessung belegt werden und durch fortschreitende Aktivierung von Compileroptionen zur Programmoptimierung verbessert werden, z.B.

LINUX> g++ Ex1121.cc
LINUX> g++ -O Ex1121.cc
LINUX> g++ -O3 Ex1121.cc
LINUX> g++ -O3 -ffast-math Ex1121.cc

Der Programmstart erfolgt jeweils mittels

LINUX> a.out < input.1121


next up previous contents index
Nächste Seite: 11.3 Profiling Aufwärts: 11. Tips und Tricks Vorherige Seite: 11.1 Präprozessorbefehle   Inhalt   Index
Gundolf Haase 2004-01-15