gpt4 book ai didi

c++ - 处理大量的浮点矩阵

转载 作者:行者123 更新时间:2023-11-28 08:24:32 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

SparseLib++ is a C++ class library for efficient sparse matrix computations across various computational platforms.

关于c++ - 处理大量的浮点矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com