Я пытаюсь измерить, сколько времени требуется для выполнения функции ‘check ()’ с помощью rdtsc следующим образом:
a = rdtsc();
check(pw);
b = rdtsc();
return (b-a);
Тем не менее, я получаю очень небольшую разницу во времени, что, я думаю, связано с тем, что мой компилятор (использующий G ++ для Windows) оптимизирует код. Поскольку ‘check ()’ не влияет на другие части программы, я думаю, что компилятор вообще игнорирует этот вызов.
Я читал об использовании того, что называется asm volatile, чтобы сказать компилятору не оптимизировать определенный раздел кода, но я не могу понять, как это реализовать.
Любая помощь в этом?
Предположительно функция рассчитывает и возвращает некоторое значение. Сделайте что-нибудь с этим значением, например, добавьте его в глобальную переменную (и, в конце концов, напечатайте эту переменную), чтобы компилятор не мог легко оптимизировать функцию.
1) Вам нужно выполнить сотни миллионов итераций для получения своего рода avg. спектакль
2) НЕ измеряйте такие вещи низкого уровня, потому что это почти не связано с реальным миром. Реальная задача — миллиарды циклов ЦП и одноразовое энергозатраты могут добавить всего 0,000001% накладных расходов … или могут увеличить их на 100000%, если ваши потоки постоянно обращаются к общим данным. Вы можете проверить часть вашего алгоритма, а затем улучшить его, но не конкретные инструкции.