Оптимизация — Повторная синхронизация функции void в Stack Overflow

Я пытаюсь рассчитать пустую функцию

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

4

Решение

Это зависит от того, что требует времени, чтобы исправить ситуацию.

Это может быть вызвано: —

  1. Услуги по погрузке. Ваша кластеризация может основываться на базе данных и требует запуска служб базы данных (в первый раз)
  2. Кэширование диска. ОС запомнит данные, которые она прочитала, и сможет предоставить данные, как если бы они были в памяти.
  3. Кэширование памяти. Процессор имеет разные скорости памяти, доступной ему, используя ту же самую память дважды, будет быстрее во второй раз.
  4. Государственное кеширование. Данные могут быть в более подходящем состоянии для последующих прогонов. Это можно рассматривать как сортировку массива дважды. Второй раз уже отсортирован, что может привести к ускорению.

Запуск сервиса может длиться несколько секунд.

Дисковый кеш ускоряется примерно в 20 раз.
Кэш памяти примерно в 6 раз быстрее
Состояние кэширования может быть неограниченным.

Я думаю, что ваш код должен сбросить объект сканирования, чтобы убедиться, что он снова работает

2

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

Других решений пока нет …