使用boost :: file_mapping时如何强制页面文件扩展

时间:2014-05-09 01:12:40

标签: c++ windows performance c++11 boost

在我目前的遗传算法中,我正在迭代几个相当大的文件。现在我正在使用boost::file_mapping来访问这些数据。

我有3个不同的测试用例我可以启动该程序:(我的电脑有8GB内存,Windows 8.1,我对页面文件限制的不同尝试,请阅读下面的内容)

  1. 1000个文件,大小约4MB,总共4 GB。 这种情况下,首先执行有点迟缓,但从第二次迭代开始,memoryaccess不再是瓶颈了,速度完全受我的CPU限制。

  2. 1000个文件,大小约6MB,总共6 GB。 这是一个完全不同的场景......第一次迭代按比例缓慢,但即使在迭代之后也不会加速。我实际上已经考虑过尝试将4 GB加载到我的内存并保留2 GB映射...不确定这实际上是否有效,但它可能值得测试......但即使这样可行,但这对案例无济于事C)...

  3. 1000个文件,大小约13 MB,总共13 GB。 这完全没有希望。第一次迭代非常慢(考虑到数据量,这是可以理解的),但即使是进一步的迭代也没有显示出速度提升的迹象。甚至对内存的部分负荷也无济于事。

  4. 现在我尝试了各种页面文件限制设置:

    1. 由Win管理 - pagefil的大小停在5-5.2 GB左右......永远不会变大。这显然对情况b)和c)没有帮助,并且实际上导致文件循环...(如果至少前4 GB将保留,它实际上是有帮助的,因为它现在是,基本上什么都没有被重用来自页面文件)

    2. 手册:最小1 GB,最大32 GB:页面文件不会超过4.5 GB

    3. 手册:最小16GB,最大32 GB:如果您自己没有尝试过这种情况......请不要这样做。它使得启动几乎不可能,并且没有任何运行顺利......是的,我没有用这个测试我的程序,因为这是不可接受的。

    4. 所以,我正在寻找的是告诉我的Windows的一些方法,当使用页面文件设置1)或2)时,我真的很想在我的程序中使用非常大的页面文件。但我不希望我的计算机完全在页面文件上运行(因为它基本上发生在3))有什么办法可以强迫这个吗?

      或者有没有其他方法如何以某种方式正确加载数据,以便至少从第二次迭代开始快速完成访问?数据只包含大量的64位整数,这些整数由我的算法进行检测(每200-300个int之间有一堆格式符号),所以我只需要读取权限。

      如果需要信息,我正在使用VS Pro 2013.代码的可移植性不是问题,它只需要在我的笔记本上运行。当然它是64位应用程序,我的处理器支持;)

0 个答案:

没有答案