【问题标题】:Eigen Library : real time processing特征库:实时处理
【发布时间】:2014-06-23 10:16:48
【问题描述】:

我正在尝试使用没有堆分配的Eigen 进行实时处理。

据我所知:

Matrix<double, Dynamic, Dynamic> allocates on the stack
Matrix<double, Dynamic, Dynamic, AutoAlign, 1, 1> allocates on the heap
and Matrix<double, 1, 1> allocates on the stack;

实时使用Eigen 的一种方法是在启动时调整矩阵的大小,使用较大的尺寸,然后只使用该尺寸的一小部分。

我的问题是:使用像 Rm.colPivHouseholderQr().solve(Rhs) 这样的函数,我如何使用动态矩阵执行这样的计算?
该函数将采用矩阵的整个大小来执行不好的操作,因为我们只希望处理这个大小的一部分。
另外我们显然不能use .resize()

那么如何通过实时处理来执行操作呢?

【问题讨论】:

    标签: matrix real-time eigen


    【解决方案1】:

    实时处理通常涉及按固定时间表重复完成相同的工作。那么动态内存分配的一种方法是拥有一个连续的内存块(一个池),您可以从中线性分配。然后,您在处理期结束时将所有这些内存标记为空闲。分配成本为 O(1),释放成本为 O(1),对于给定的工作量,您可以轻松保证所有内存分配都会得到满足。因此,一种解决方案是使用自定义分配器。

    【讨论】:

      【解决方案2】:

      使用block() method:

      Rm.block<3, 3>(0,0).colPivHouseholderQr().solve(Rhs)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-08
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-19
        • 2022-12-07
        • 2018-12-23
        相关资源
        最近更新 更多