使用大量的浮点矩阵

时间:2010-12-22 14:41:05

标签: c++ optimization memory-management matrix

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

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

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开销? (对于一百万个项目和四种统计数据,我们有大约400万个malloc操作,没有考虑到std :: map插入开销...)

1 个答案:

答案 0 :(得分:1)

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

  

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