Я пытаюсь время функции пустотПовторного выбор времени функции пустот в C++
for (size_t round = 0; round < 5; round++) {
cpu_time_start = get_cpu_time();
wall_time_start = get_wall_time();
scan.assign_clusters(epsilon, mu);
cpu_time_end = get_cpu_time();
wall_time_end = get_wall_time();
...
}
Первая синхронизация дает 300 секунд, в то время как следующие четыре тайминги дают 0,000002 секунд. Это указывает на то, что функция функции void для функции assign_clusters
оптимизирована. Как я могу заставить свою программу выполнять этот многозадачный вызов функции каждый раз и все же использовать оптимизацию для остальной части кода?
Что я обычно делаю, это сохранить результат этой функции, а затем распечатать ее, но поскольку это функция void
, есть ли у меня такая же опция?
Я использую следующие флаги оптимизации: -std=c++0x -march=native -O2
Он также может быть эффектом кэша. или лучшее предсказание ветвления в последующих прогонах. –
Вы уверены, что 'assign_clusters' оптимизирован? Вы взглянули на код сборки? Не зная, что делает 'assign_clusters', это трудно ответить. Возможно, эта функция выполняется так быстро во второй раз, потому что вашей системе просто не нужно назначать кластеры дважды. – flowit
Что произойдет, если вы скомпилируете свой код _without_ какой-либо оптимизации? –