Я пишу приложение с использованием C++ и OpenMP, и я хочу надежно (и правильно) измерить время выполнения его частей. Я рассмотрел несколько вариантов (Windows, TDM-GCC x64 4.8.1):Время измерения в многопоточном приложении C++
omp_get_wproc
иclock
, кажется, чтобы сделать работу, но документацию (в прямом противоречии с реальным поведением) говорит, что они измеряют общее время ресурсы, потребляемые по данному процессу (то есть, например, одна секунда с двумя рабочими потоками считается равной двум секундам). «Правильное» поведение не то, что я хочу,time
/difftime
не имеют достаточного разрешения,GetProcessTime
(WinAPI) делает то, что часы должны делать и от платформы,QueryPerformanceCounter
(WinAPI), похоже, путь, но является платформенным,- C++ 11
high_resolution_clock
работает нормально, но это часть нового стандарта.
Мой вопрос, в первую очередь, заключается в следующем: как люди, занимающиеся научными вычислениями, делают это, и почему это так? И, является ли поведение clock
ошибкой в моей реализации стандартной библиотеки или слишком распространенным заблуждением?
EDIT: Небольшое объяснение: я немного нерешительно использую C++ 11, потому что я, вероятно, буду запускать свой код в кластере с несколько старым программным обеспечением.
W.r.t Новый стандарт и 'high_resolution_clock' - это код, необходимый для совместимости с C++ 03? – Niall
Вы также можете взглянуть на boost :: chrono, он предоставляет несколько удобную оболочку для того, что бы ни случилось в настоящее время. – ecotax
Право, я действительно посмотрел на boost :: chrono, чтобы найти, что для Windows он фактически использует QueryPerformanceCounter – matb