Я пишу приложение с использованием С++ и OpenMP, и я хочу надежно (и правильно) измерить время выполнения его частей. Я рассмотрел несколько вариантов (Windows, TDM-GCC x64 4.8.1):
-
omp_get_wprocиclock, похоже, выполняют эту работу, но документация (в прямом противоречии с фактическим поведением) говорит, что они измеряют общие временные ресурсы, потребляемые данным процессом (то есть, например, одна секунда с двумя рабочими потоками считается двумя секунд). "Правильное" поведение не то, что я хочу, -
time/difftimeне имеют достаточного разрешения, -
GetProcessTime(WinAPI) делает то, что часы должны делать и зависит от платформы, -
QueryPerformanceCounter(WinAPI), по-видимому, является способом выхода, но является платформенным, - С++ 11
high_resolution_clockработает нормально, но это часть нового стандарта.
Мой вопрос, в первую очередь, заключается в следующем: как люди, занимающиеся научными вычислениями, делают это, и почему это так? И, является ли поведение clock ошибкой в моей реализации стандартной библиотеки или слишком распространенным заблуждением?
EDIT: Небольшое объяснение: я немного не решаюсь использовать С++ 11, потому что я, вероятно, буду запускать свой код в кластере с несколько старым программным обеспечением.