Как измерить время выполнения встроенных функций в 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
У меня есть несколько функций, которые выполняются за несколько наносекунд, и я хочу измерить время их выполнения, чтобы оценить их производительность.
Основная идея очень проста: возьмите временную метку, выполните одни и те же блоки кода в цикле много раз, возьмите другую временную метку, вычислите разницу между временными метками и разделите значение на количество итераций.
Все очень просто, проблема в том, что когда я помещаю код тестирования в функцию 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
Мобильная версия