С ++ бенчмаркинг, изменчивый

Я пытаюсь измерить, сколько времени требуется для выполнения функции ‘check ()’ с помощью rdtsc следующим образом:

a = rdtsc();
check(pw);
b = rdtsc();

return (b-a);

Тем не менее, я получаю очень небольшую разницу во времени, что, я думаю, связано с тем, что мой компилятор (использующий G ++ для Windows) оптимизирует код. Поскольку ‘check ()’ не влияет на другие части программы, я думаю, что компилятор вообще игнорирует этот вызов.

Я читал об использовании того, что называется asm volatile, чтобы сказать компилятору не оптимизировать определенный раздел кода, но я не могу понять, как это реализовать.

Любая помощь в этом?

0

Решение

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

2

Другие решения

1) Вам нужно выполнить сотни миллионов итераций для получения своего рода avg. спектакль

2) НЕ измеряйте такие вещи низкого уровня, потому что это почти не связано с реальным миром. Реальная задача — миллиарды циклов ЦП и одноразовое энергозатраты могут добавить всего 0,000001% накладных расходов … или могут увеличить их на 100000%, если ваши потоки постоянно обращаются к общим данным. Вы можете проверить часть вашего алгоритма, а затем улучшить его, но не конкретные инструкции.

0

По вопросам рекламы [email protected]