Я хотел бы знать, сколько времени занимает выполнение некоторого кода. Код, который я выполняю, имеет дело с матрицами и операциями openCV. Код будет выполняться в среде ROS в Linux. Я не хочу, чтобы код прерывался системными функциями во время моего теста производительности.
Смотря на эта почта по поводу бенчмаркинга, ответчик сказал, что степень детализации составляет 15 мс. Я хотел бы сделать это намного лучше, и поэтому я решил сделать функцию атомарной (только для целей бенчмаркинга). Я не уверен, что это хорошая идея по нескольким причинам, в первую очередь потому, что у меня нет глубокого понимания архитектуры процессора.
void atomic_wrapper_function(const object& A, const object& B) {
static unsigned long running_sum = 0;
unsigned long before, after;
before = GetTimeMs64();
function_to_benchmark(A, B);
after = GetTimeMs64();
running_sum += (after - before);
}
Функция, которую я пытаюсь оценить, не является короткой функцией.
Будет ли результат точным? Для отметки времени, которое я собираюсь использовать эта функция Андреаса Бонини.
Будет ли это сделать что-то ужасное с моим компьютером? Назовите меня суеверным, но я думаю, что хорошо задать этот вопрос.
Я использую C ++ 11 на ядре Linux.
Атомика C ++ 11 не является атомарной в смысле RTOS, она просто обеспечивает гарантии при написании многопоточного кода. Linux не является ОСРВ. Ваш код может и всегда будет прерван. Есть несколько способов уменьшить эффект, но не без глубокого погружения в Linux.
Вы можете, например, настроить любезность меньше прерываться другими программами пользовательского пространства. Вы можете указать ядру, на каком ядре процессора обрабатывать прерывания, а затем прикрепить вашу программу к другому процессору. Вы можете увеличить точность таймера и т. Д., Но:
Есть много других вещей, которые могут изменить время выполнения вашего алгоритма, например, несколько уровней кэшей ЦП, функции энергосбережения вашего ЦП и т. Д. Если вы действительно заинтересованы только в сравнительном анализе времени выполнения вашей функции для несложного реального времени проблемы, проще просто запустить алгоритм много раз и получить статистическую оценку времени выполнения.
ИЛИ: Вы говорите, что хотите знать, какое влияние алгоритм оказывает на общее время выполнения программы? Используйте инструменты профилирования, такие как callgrind
(интегрируется в QtCreator).
Других решений пока нет …