Я пишу приложение с использованием С++ и 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, потому что я, вероятно, буду запускать свой код в кластере с несколько старым программным обеспечением.