优化Eigen中的大矩阵乘法

时间:2015-03-04 22:46:14

标签: c++ algorithm matrix-multiplication eigen

我在C ++中使用特征库进行一些大型随机矩阵(至少1000x1000)计算,我的代码由以下函数组成:

  

Eigen :: VectorXd grid(...);使用快速排序算法和ran1算法初始化(逐个元素)对数正态分布值的有序向量,假设大小为N,则所有矩阵的大小为NxN。

     

Eigen :: VectorXd conditionGrid(...);返回包含网格向量减去时间相关值的向量的循环。

     

Eigen :: MatrixXd xjkMatrix(...);通过循环从两个向量构造的矩阵。

     

Eigen :: MatrixXd qzMatrix(...);使用xjk矩阵使用概率密度函数逐元素地构造一个新的矩阵。

     

Eigen :: MatrixXd q1zMatrix(...);也使用xjk矩阵,使用概率密度函数逐元素地构造一个新的矩阵。

     

Eigen :: MatrixXd qjkMatrix(...); qz和网格的组合,逐个元素循环。

     

Eigen :: MatrixXd q1jkMatrix(...); qz,q1z和网格的组合,逐个元素循环。

     

Eigen :: MatrixXd mjkMatrix(...); qjk和q1jk中的元素,逐个元素循环。

     

Eigen :: MatrixXd globalMatrix(...);循环所有上述函数(一般120次),除了固定的网格,并乘以120 mjk矩阵以获得全局矩阵。

全局矩阵200x200需要大约20秒的计算,500x500大约需要200秒。如何让我的代码运行得更快,并优化我的矩阵乘法? (我尝试过稀疏矩阵,但需要更长的时间)。

我正在使用MinGW64。

1 个答案:

答案 0 :(得分:3)

确保使用完全优化进行编译,例如: g++ -O3 -DEIGEN_NO_DEBUG如果使用g ++。此外,通过OpenMP启用并行化可能有所帮助,在编译和链接时使用-fopenmp

我使用以下代码编译大多数Eigen代码(使用g ++):

g++ -I/path/to/eigen -O3 -DEIGEN_NO_DEBUG -fopenmp program.cpp