【问题标题】:Working with huge quantity of float matrices处理大量浮点矩阵
【发布时间】:2010-12-22 14:41:04
【问题描述】:

好的,我实际上正在处理大量浮点矩阵的内存存储。这些矩阵存储统计数据,并且大多数时候,只有少数单元格包含非空值。

让我们考虑这个简单的问题。 一个项目随着时间的推移收集统计数据。这些统计信息存储在大约 30 个浮点条目的单行格式矩阵中。但是对于一个项目,我们也有不同类型的统计数据。那么对于一个item,我们可以定义这个简单的结构:

struct ItemStatistics
{
  uint64_t item_id;
  float * statistics_a;
  ...
  float * statistics_z;
};

当应用程序(服务器)运行时,我收集了数千个项目的大量统计信息。然后,我们可以定义一个全局结构,将我们所有项目的应用统计信息存储为快速访问的映射:

typedef std::map<uint64_t, ItemStatistics*> StatisticsDb; // item_id <-> statistics

这种幼稚的表示并不高效,因为每个 statistics_x 对象都是大约 30 个条目的固定大小的数组。由于平均只收集了 5 个值,因此矩阵大部分时间是 10%,有时甚至更少。

有没有一种内存高效的方式来存储这些数据?

有没有办法避免每个矩阵分配的 malloc 开销? (对于 100 万个项目和 4 种统计信息,我们有大约 400 万次 malloc 操作,不考虑 std::map 插入开销......)

【问题讨论】:

    标签: c++ optimization memory-management matrix


    【解决方案1】:

    也许 SparseLib++ 可能是您感兴趣的东西。看看它是否适合您的需求:http://math.nist.gov/sparselib++/

    SparseLib++ 是一个 C++ 类库,用于 高效的稀疏矩阵计算 跨越各种计算 平台。

    【讨论】:

    • 感谢您的链接。我去看看!
    • 稀疏矩阵只是节省内存消耗的方法。谢谢你的提示。我还从 boost::numeric::ublas 找到了 sparse_matrix。
    猜你喜欢
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2019-03-13
    • 2013-10-22
    • 2011-07-05
    • 2017-09-19
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多