Повторная синхронизация void-функции в 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
1 ответ
Это зависит от того, что требует времени, чтобы исправить ситуацию.
Это может быть вызвано:-
- Услуги по погрузке. Ваша кластеризация может основываться на базе данных и требует запуска служб базы данных (в первый раз)
- Кэширование диска. ОС запомнит данные, которые она прочитала, и сможет предоставить данные, как если бы они были в памяти.
- Кэширование памяти. Процессор имеет разные скорости памяти, доступной ему, используя ту же самую память дважды, будет быстрее во второй раз.
- Государственное кеширование. Данные могут быть в более подходящем состоянии для последующих прогонов. Это можно рассматривать как сортировку массива дважды. Второй раз уже отсортирован, что может привести к ускорению.
Запуск сервиса может длиться несколько секунд.
Дисковый кеш ускоряется примерно в 20 раз. Кэш-память примерно в 6 раз ускоряет кэширование состояния, может быть неограниченным.
Я думаю, что ваш код должен сбросить объект сканирования, чтобы убедиться, что он снова работает