数组和缓存
Arrays and Caching
如果我有一个长度为80亿的char
数组。将其拆分为更小的阵列会通过改进缓存来提高性能吗?基本上,我会迭代数组并进行一些比较。如果没有,使用这样长度的数组的最佳方式是什么。
我正在将二进制形式的文件读取到数组中,并将对文件的不同部分进行二进制比较。
8 GB的数据将不可避免地破坏数据的局部性,因此无论如何,您要么必须将内存管理得更小,要么您的操作系统将进行虚拟内存的磁盘交换。
然而,还有一种替代方案,即所谓的mmap
。从本质上讲,这允许您将文件映射到虚拟内存空间,然后您的操作系统负责访问文件并将必要的页面加载到RAM中,而您对该文件的访问只不过是一个简单的内存寻址。
有关mmap
的更多信息,请访问http://en.wikipedia.org/wiki/Mmap
如果你要做一次,那么就直接执行它。编程工作可能不值得花费时间。
我假设你想一次又一次地这样做,这就是为什么你想优化它。知道你的迭代和比较是否需要按顺序进行肯定会有帮助,等等?如果没有一些问题域输入,在这里很难给出一般的优化。
如果它可以并行完成,并且您必须多次执行,我建议您查看MapReduce技术来解决此问题。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何对0,1,..中的k个随机数进行采样..,n-1,而不缓存到数组
- 添加 L1 缓存大小的数组.大数组绝对比短数组快
- 如果我制作一个代码,每个线程都会修改数组的完全不同的部分,则将保持缓存相干性
- JNI 缓存 Java 数组
- 数组和缓存
- 我怎么知道我的数组在缓存中
- 在多线程代码中缓存友好的数组迭代模式
- 在2d数组上的缓存不友好循环比缓存友好循环快
- 需要将数组保留在L1缓存中的建议
- 2bit位域数组对性能和缓存效率的影响
- 为什么我的8M L3缓存不能为大于1M的数组提供任何好处?