синхронизация c ++ один и тот же цикл дает разные результаты - PullRequest
0 голосов
/ 02 декабря 2018

Может кто-нибудь объяснить, почему многократный запуск этого кода дает очень переменные результаты?Если я не сделал что-то не так, он должен измерить время, которое моя система (MacOSX Sierra, Xcoe9.2) берет на себя, чтобы 1000 раз запустить цикл с пустым циклом.

#include <iostream>
#include <chrono>

void printstuff (){
    for (int i = 0; i < 1000; ++i){
    //empty loop
    }
}

int main(int argc, const char * argv[]) {

    auto time1 = std::chrono::high_resolution_clock::now();
    printstuff();
    auto time2 = std::chrono::high_resolution_clock::now();

    std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(time2 - time1).count() << std::endl;

    return 0;
}

1 Ответ

0 голосов
/ 02 декабря 2018

Как вы компилируете этот код?Какие флаги вы используете?

Если вы используете какой-либо уровень оптимизации (используя один из флагов оптимизации, см., Например: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html для gcc), то функция printstuff () компилируется внулевые инструкции, как вы можете видеть здесь: https://godbolt.org/z/gXq-mG

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

Если вы хотите сравнить код, я бы порекомендовал вам Google Benchmark

...