2012-04-30 3 views
2

Я недавно построил реализацию ЦП Huffman в C++. Я также построил версию графического процессора в CUDA для сравнения времени, но я столкнулся с проблемой при тестировании времени процессора:CPU huffman сжатие быстрее после первого выполнения?

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

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

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

ответ

5

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

+0

Нужно ли использовать тайминги, когда файл запускается первым, или когда он кэшируется системой и считывается из памяти? Если первый, как я могу убедиться, что я выполняю прогон, и он не читается из памяти? – SuperXero

+0

@superXero: У меня есть программа в моей системе, похожей на «try {while (true) new char [1000];} catch (...) {return 0;}», которая заставит систему сбросить все буферы, Можно. Обычно люди используют второй тайм. Это проще и надежнее. –

+1

Я предполагаю, что вы действительно хотите, это время, используемое вашим алгоритмом без времени, используемого операциями ввода-вывода. Так что, если бы я был вами, я буду читать весь файл в памяти, записать время начала, запустить алгоритм с содержимым файла в памяти, а затем записать время окончания. – BlueWanderer