PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/C++] Zeitmessung (paralleler) Programme


Gast
2009-03-24, 13:01:41
Hallo,

ich spiele gerade ein bischen mit paralleler Programmierung mit Threads / OpenMP / MPI unter C herum.

Um meine Algorithmen vergleichen zu können, möchte ich die benötigte Zeit messen.

Das Problem ist, dass
1. die Auflösung der Standardbibliotheken mit clock_t einfach zu gering ist.
2. für eine Parallelverarbeitung ungeignet ist.

Wie messe ich die Zeit, die mein paralleler Algorithmus benötigt?
Gibt es da Standardbibliotheken / Profiler dafür?

Für die meisten Intels gibts ja den TSC, den man mit RDTSC auslesen kann.
Nach http://en.wikipedia.org/wiki/Time_Stamp_Counter führt das auf Multi[kern/prozessor]-Systemen zu Problemen.

Bei OpenMP habe ich jedoch keine Möglichkeit, mir einen speziellen Kern "auszusuchen" der die Zeit misst, oder?

Wie verhindere ich, das Hintergrund-Tasks des Betriebssystems meine Messung beeinflussen (mehrmals messen)?

Danke im Vorraus TH

Coda
2009-03-24, 16:21:14
Intel Thread Profiler ist sehr gut dafür geeignet, kostet aber auch ein bisschen was.

Es gibt auf allen CPUs einen TSC, und zwar schon ziemlich lange. Das Problem ist damit nur, dass der TSC nicht auf allen Cores gleich sein muss und die Threads springen.

Was unter Vista sehr gut funktioniert ist QueryPerformanceCounter - das verwendet dann den Chipsatz-Counter (~ 14Mhz)

DocEW
2009-03-26, 15:45:19
Nur mal interessehalber: Was möchtest du denn parallelisieren?
Mich wundert nur, dass du über Parallelisierung nachdenkst und gleichzeitig anscheinend im Bereich der Messungenauigkeit bist.