Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::file\u映射时如何强制页面文件扩展_C++_Windows_Performance_C++11_Boost - Fatal编程技术网

C++ 使用boost::file\u映射时如何强制页面文件扩展

C++ 使用boost::file\u映射时如何强制页面文件扩展,c++,windows,performance,c++11,boost,C++,Windows,Performance,C++11,Boost,在我目前的遗传算法中,我迭代了几个相当大的文件。现在,我正在使用boost::file_mapping访问此数据 我有3个不同的测试用例可以启动程序:(我的计算机有8GB内存,Windows 8.1,我对页面文件限制的不同尝试,如下所示) 1000个文件,大约4MB大小,总共4GB。 这种情况是,当第一次执行时有点慢,但从第二次迭代开始,memoryaccess不再是它的瓶颈,速度完全受我的CPU限制 1000个文件,大约6MB大小,总共6GB。 这是一个完全不同的场景。。。第一次迭代的速度是成

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

我有3个不同的测试用例可以启动程序:(我的计算机有8GB内存,Windows 8.1,我对页面文件限制的不同尝试,如下所示)

  • 1000个文件,大约4MB大小,总共4GB。 这种情况是,当第一次执行时有点慢,但从第二次迭代开始,memoryaccess不再是它的瓶颈,速度完全受我的CPU限制

  • 1000个文件,大约6MB大小,总共6GB。 这是一个完全不同的场景。。。第一次迭代的速度是成比例的慢,但即使是后续迭代也不会加快速度。我实际上已经考虑过尝试将4GB加载到我的内存中,并保持2GB的映射。。。不确定这是否真的有效,但可能值得一试。。。但即使这样做可行,这也无助于案例c)

  • 1000个文件,大约13MB大小,总共13GB。 这是完全没有希望的。第一次迭代的速度非常慢(考虑到数据量,这是可以理解的),但即使是进一步的迭代也没有速度提高的迹象。即使是部分加载到内存也不会有多大帮助

  • 现在,我尝试了页面文件限制的各种设置:

  • 由Win管理-pagefil的大小停止在5-5.2 GB左右。。。永远不会变大。这显然对案例b)和c)没有帮助,实际上会导致文件循环。。。(如果至少前4 GB保持不变,这实际上会很有帮助,就像现在一样,基本上没有从页面文件中重用任何内容)

  • 手动:最小1 GB,最大32 GB:页面文件的大小不会超过4.5GB

  • 手动:最小16GB,最大32GB:以防您自己没有尝试过。。。不要这样做。它使引导几乎不可能,而且没有任何东西可以顺利运行了。。。是的,我没有用这个测试我的程序,因为这是不可接受的

  • 所以,我想要的是告诉我的Windows,当使用页面文件设置1)或2)时,我真的很想在本例中为我的程序使用一个非常大的页面文件。但我不想让我的电脑完全在页面文件上运行(3基本上就是这样),有什么办法可以强制这样做吗

    或者有没有其他方法可以正确地加载数据,以便至少从第二次迭代开始,快速完成访问?数据仅由大量64位整数组成,这些整数由我的算法进行位检查(每200-300整数之间有一组格式化符号),因此我只需要读访问


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

    这是没有道理的。内存映射文件时,内存由该文件支持。它不占用页面文件空间。若您试图将比物理RAM更多的数据映射到内存中,那个么当旧页面从RAM中移出以为当前正在访问的内容腾出空间时,就会发生抖动。页面文件大小不会改变这一点,只会安装更多的RAM(或同时尝试映射更少的数据)。那么如何解释a的行为(从第二次迭代开始提高速度)?它是否真的将所有文件存储在我的RAM中(taskmanager不显示它),而在情况b)和c中它不能这样做)?当数据放入RAM时,它可以全部保留在页面缓存中(即,在RAM中,而不是页面文件中)。这解释了第一次迭代后的加速。