在我目前的遗传algorithm中,我遍历了一些相当大的文件。 现在我正在使用boost::file_mapping
来访问这些数据。
我有3个不同的testing用例,我可以启动程序:(我的电脑有8GB内存,Windows 8.1,我在页面文件限制的不同尝试,下面阅读)
1000个文件,大小约4MB,总共4GB。 这种情况是,当执行第一个有点迟缓,但从第二次迭代起,内存访问不再是瓶颈了,速度完全受限于我的CPU。
1000个文件,大小约6MB,总计6GB。 这是一个完全不同的场景……第一次迭代的速度比较慢,但即使迭代次数也不会加快。 我实际上已经考虑试图加载4 GB到我的记忆,并保持2 GB映射…不知道这实际上可以工作,但它可能是值得一试…但即使这将工作,这将无助于案件C)…
1000个文件,大小约13 MB,总计13 GB。 这是完全没有希望的。 第一次迭代非常慢(考虑到数据量,这是可以理解的),但是更进一步的迭代没有显示速度改善的迹象。 甚至对内存的部分负载也不会有太大的帮助。
现在我尝试了页面文件限制的各种设置:
由Winpipe理 – 页面大小停在大约5-5.2 GB …永远不会变大。 这对b)和c)情况显然没有帮助,并且实际上导致文件循环…(如果至less前4个GB仍然存在,那实际上是有帮助的,就像现在一样,基本上什么都没有被重用从页面文件)
手动:最小1 GB,最大32 GB:页面文件不超过4.5GB
手动:最小16GB,最大32GB:如果你还没有尝试过这一点…不要这样做。 它使启动几乎不可能,没有什么能够顺利运行…是的,我没有用这个testing我的程序,因为这是不可接受的。
所以,我正在寻找的是一些告诉我的Windows的方式,当使用页面文件设置1)或2),我真的很想在这种情况下使用一个非常大的页面文件为我的程序。 但我不希望我的电脑完全运行在页面文件(因为它基本上发生在3))有什么办法,我可以强制这个?
或者还有什么其他的方法可以正确加载数据,至less从第二次迭代开始,访问就快速完成了吗? 数据只包含大量的64位整数,这些整数是由我的algorithm检查的(每200-300个整数之间有一堆格式化符号),所以我只需要读访问权限。
如果需要的信息,我使用的VS Pro 2013.代码的可移植性不是一个问题,它只需要在我的笔记本上运行。 当然,这是一个64位的应用程序,我的处理器支持;)