假设您有一个巨大的(40+ GB)特征值(浮点)矩阵,行是不同的特征,列是样本/图像.
该表是按列预先计算的.然后,它被完全访问行和多线程(每个线程加载整行)几次.
处理这个矩阵的最佳方法是什么?我特别琢磨超过5分:
内存映射整个文件可以使过程更容易.
您希望布置数据以针对最常见的访问模式进行优化.听起来好像数据将被写入一次(逐列)并多次读取(逐行).这表明数据应按行主顺序存储.
一旦完成预计算就将矩阵标记为只读可能无助于性能(有一些可能的低级优化,但我认为没有任何实现它们),但它会防止错误意外写入数据你不打算.不妨.
madvise 一旦你的应用程序被编写和工作,最终可能会变得有用.
我的总体建议:以最简单的方式编写程序,首先按顺序编写,然后将计时器放在整个事物和各种主要操作上.确保主要操作时间总和为总时间,因此您可以确定您没有遗漏任何东西.然后将您的性能改进工作定位到实际花费最多时间的组件上.
根据JimR在评论中提到的4MB页面,您可能最终想要查看hugetlbfs或使用具有透明大页面支持的Linux内核版本(合并为2.6.38,可能可以修补到早期版本).这可能会为您节省大量TLB未命中,并说服内核以足够大的块来执行磁盘IO以分摊任何搜索开销.
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |