Как измерить время выполнения встроенных функций в C++?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как измерить время выполнения встроенных функций в C++?

Сообщение Гость »


У меня есть несколько функций, которые выполняются за несколько наносекунд, и я хочу измерить время их выполнения, чтобы оценить их производительность.

Основная идея очень проста: возьмите временную метку, выполните одни и те же блоки кода в цикле много раз, возьмите другую временную метку, вычислите разницу между временными метками и разделите значение на количество итераций.

Все очень просто, проблема в том, что когда я помещаю код тестирования в функцию main, компилятор распознает, что я выполняю те же вычисления и ничего не делаю с результатом, поэтому он делает цикл без операции. Поэтому я получаю очень маленькие цифры.

Мне удалось запустить код, имитируя использование, он работает в Visual Studio 2022, но мне не удалось заставить его работать в Code::Blocks (компилятор MSYS2 g++).

Этот метод сложно использовать повторно, поскольку всякий раз, когда я хочу протестировать другую функцию, мне приходится копировать и вставлять одни и те же строки кода. Поэтому я превратил это в функцию, и это увеличивает возможность повторного использования, но значительно увеличивает цифры. Многие из моих функций встроены, и при использовании этой функции для сравнения других функций встроенная оптимизация не учитывается.

Минимально воспроизводимый пример:

#include #include #include #include #include #include #include #include используя std::array; используя std::chrono::steady_lock; используя std::chrono::duration; используя std::cout; используя станд::вектор; используя std::function; двойной d = 0,0; плавающий г = 0,0; constexpr double DU = 1,0 / (uint64_t(1) 23) & 0xff) - 127; двойной m1 = 1 + (биты & 0x7fffff) * FU; двойной s = apply_poly(m1, LOG2_POLY9); вернуть е + s; } шаблон double timeit(const function& func, const вектор& значения, int run = 1048576){ автоматический запуск = Steady_Clock::now(); size_t len ​​=values.size(); for (int64_t i = 0; i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»