Я пишу тестовую программу на С ++, которая включает в себя синхронизацию количества вызовов функций. Функции вызываются повторно и каждый раз записываются для последующего статистического анализа. Требуется, чтобы функции выполнялись одновременно в нескольких потоках и, таким образом, для обеспечения точности и справедливости эталонного теста, он запускался в операционной системе реального времени с контролируемым поведением планирования. Следующие мои проблемы:
Существуют ли детерминированные способы сбора временных данных? Я посмотрел на printf и stringstream, но ни один из них не имеет детерминированного поведения из-за операций с памятью и буфером. Они также не выполняют в O (1) по той же причине, я прав? В настоящее время я использую большой массив символов и пользовательскую функцию strcat
, чтобы каждое значение времени можно было собрать в O (1). Затем этот массив печатается в конце теста, когда все данные собраны.
Я использую clock_gettime
для таймингов, а clock_getres
дает мне разрешение 1 нс. Можно ли доверять этому значению?
До сих пор я все делаю правильно, и есть ли другие проблемы, о которых мне следует знать при написании теста?