Сжатие процессора Хаффмана быстрее после первого выполнения?

Недавно я создал реализацию процессора кодирования Хаффмана на C++. Я также построил версию GPU в CUDA, чтобы сравнить время, но столкнулся с проблемой при тестировании времени CPU:

При нагрузочном тестировании путем сжатия больших файлов, например текстового файла размером 97 МБ, содержащего почти все буквы алфавита и различные другие символы ascii, моя реализация ЦП займет примерно 8,3 секунды при первом выполнении. После этого время значительно падает до 1,7 секунды. ПРИМЕЧАНИЕ. Я замеряю только подсчет частоты ЦП, а не кодирование строки и запись в файл.

Любые идеи, как это может быть? Я закрываю все указатели файлов и, насколько мне известно, не должен ничего кэшировать.

Дайте мне знать, если нужен какой-либо исходный код, спасибо.


person SuperXero    schedule 30.04.2012    source источник


Ответы (1)


После первого запуска содержимое файла кэшируется системой (и используется всеми процессами), поэтому при следующем запуске вы фактически читаете файл из памяти.

person BlueWanderer    schedule 30.04.2012
comment
Так должен ли я использовать тайминги при первом запуске файла или когда он кэшируется системой и читается из памяти? Если первое, как я могу гарантировать, что я выполняю прогон и он не читается из памяти? - person SuperXero; 30.04.2012
comment
@superXero: у меня в системе есть программа, примерно похожая на «try {while (true) new char [1000];} catch (...) {return 0;}», которая заставит систему очистить все буферы, которые она может . Обычно люди просто используют второй тайминг. Это проще и надежнее. - person Mooing Duck; 30.04.2012
comment
Я предполагаю, что вам действительно нужно время, используемое вашим алгоритмом, без времени, используемого операциями ввода-вывода. Так что на вашем месте я прочитаю весь файл в память, запишу время начала, запущу алгоритм с содержимым файла в памяти, а затем запишу время окончания. - person BlueWanderer; 30.04.2012
comment
Спасибо, воспользуюсь вторым таймингом, где читаю файл по памяти. - person SuperXero; 30.04.2012
comment
Это может быть не только кеш памяти. Здесь могут быть задействованы кеши ЦП. Лучше поискать способ сбросить все кэши... Или каждый раз перезагружать компьютер. Или сделайте так, чтобы подчиненный сервер запускал алгоритм и автоматически перезагружался и не ждал никакой работы. - person Gediz GÜRSU; 12.06.2020