第一次执行后CPU哈夫曼压缩速度更快? 我最近在C++中构造了一个赫夫曼编码的CPU实现。为了比较时间,我还在CUDA中构建了一个GPU版本,但在测试CPU时间时遇到了一个问题:

第一次执行后CPU哈夫曼压缩速度更快? 我最近在C++中构造了一个赫夫曼编码的CPU实现。为了比较时间,我还在CUDA中构建了一个GPU版本,但在测试CPU时间时遇到了一个问题:,c++,compression,huffman-code,C++,Compression,Huffman Code,当通过压缩大文件进行压力测试时,例如一个97mb的文本文件,几乎包含字母表中的每个字母和各种其他ascii字符,我的CPU实现在第一次执行时大约需要8.3秒。之后,时间显著下降到1.7秒。注意:我只是对CPU的频率计数进行计时,而不是对字符串进行编码并写入文件 你知道这是怎么回事吗?我正在关闭所有文件指针,据我所知,我不应该缓存任何东西 请告诉我是否需要任何源代码,谢谢。第一次运行后,文件内容由系统缓存(并由所有进程共享),因此下一次运行时,您实际上是从内存读取文件。那么,我应该在文件第一次运行

当通过压缩大文件进行压力测试时,例如一个97mb的文本文件,几乎包含字母表中的每个字母和各种其他ascii字符,我的CPU实现在第一次执行时大约需要8.3秒。之后,时间显著下降到1.7秒。注意:我只是对CPU的频率计数进行计时,而不是对字符串进行编码并写入文件

你知道这是怎么回事吗?我正在关闭所有文件指针,据我所知,我不应该缓存任何东西


请告诉我是否需要任何源代码,谢谢。

第一次运行后,文件内容由系统缓存(并由所有进程共享),因此下一次运行时,您实际上是从内存读取文件。

那么,我应该在文件第一次运行时使用计时,还是在文件由系统缓存并从内存读取时使用计时?如果是第一个,我如何确保我正在运行并且没有从内存中读取它?@superXero:我的系统上有一个类似“try{while(true)new char[1000];}catch(…){return 0;}”的程序,这将使系统尽可能地刷新所有缓冲区。通常人们只使用第二个计时。我想你真正想要的是你的算法所用的时间,而不是IO操作所用的时间。因此,如果我是你,我会将整个文件读入内存,记录开始时间,使用内存中的文件内容运行算法,然后记录结束时间。谢谢,我将使用第二个计时,从内存中读取文件。它可能不仅仅是内存缓存。CPU缓存可能在这里工作。最好寻找一种方法来刷新所有缓存。。。或者每次重新启动计算机。或者让从服务器计算机运行算法并自动重启,然后等待noxt作业。