C++ 有没有一种方法可以使用Eigen获得更快的点积?

C++ 有没有一种方法可以使用Eigen获得更快的点积?,c++,eigen,dot,C++,Eigen,Dot,所以,我使用Eigen在我自己的数据结构上执行矩阵数学,它封装了std::数组。我基本上获得了点积: Eigen::Map<const Eigen::Matrix<D, N, 1>> m1(my_array1.data()); Eigen::Map<const Eigen::Matrix<D, N, 1>> m2(my_array2.data()); return m1.dot(m2); Eigen::Map m1(my_array1.data(

所以,我使用Eigen在我自己的数据结构上执行矩阵数学,它封装了std::数组。我基本上获得了点积:

Eigen::Map<const Eigen::Matrix<D, N, 1>> m1(my_array1.data());
Eigen::Map<const Eigen::Matrix<D, N, 1>> m2(my_array2.data());
return m1.dot(m2);
Eigen::Map m1(my_array1.data());
Eigen::Map m2(my_array2.data());
返回m1.点(m2);
这是从模板类中提取的,因此是矩阵维度的替代项,但在其他方面,它相当简单。我注意到我在创建地图时会有一些开销,当然还有实际点产品的成本

总的来说,我对Eigen的性能非常满意,它肯定比我之前天真的点产品实现快得多。然而,由于我的程序大量使用点产品,我想知道是否有向导有一些技巧可以进一步加快速度。Dot产品大约占我的程序总运行时间的10%,所以这对我的buck优化来说是一个巨大的挑战。我唯一的限制是,我的向量仍然存在于连续的堆栈变量中(我并没有专门与std::array结合,但我喜欢它们目前完成任务的方式)


那么,有什么建议吗?或者这是我能得到的最好的吗?

使用
Eigen::Map
,您注意到了多少开销?在发布模式下编译时,不应该有任何。如果你想“加速你的点产品”,你需要显示更多的上下文。哦,是的,在发布模式中几乎没有开销!我不小心在调试中运行了探查器。您还需要多少上下文?我使用MSVC在Windows10上运行。我不能自由地分享更多的代码,因为它是专有的。如果dot产品在您的代码中如此重要,您可以尝试使用
std::internal_product()
而不是使用Egen的
.dot()
。哇,它快多了!比我快两倍多。我想有时候最简单的解决方案就是最好的。