特征密集矩阵*密集向量乘法应该比GSL慢7倍吗?

时间:2015-10-27 16:30:53

标签: c++ eigen

this question of mine的答案让我期望(对于1/4非消失条目的矩阵) 密集矩阵*密集矢量 应该超越 稀疏矩阵*密集向量。

我不仅看到相反的情况,而且两者的表现也优于GSL 7倍和4倍。

我是否错误地使用了Eigen?我不小心计时吗?我很吃惊。

我的编译选项如下:

  

ludi @ ludi-M17xR4:〜/ Desktop / tests $ g ++ -o eigenfill.x eigenfill.cc -L / usr / local / lib -lgsl -lgslcblas&& ./eigenfill.x

我的代码是:

 <a href="#text2" id="appoint">Next</a>

 <div class="lightbox" id="text2">
              <div class="box">
              <a class="close" href="#">X</a>
                <p class="title">Modal Window with Text</p>
                <div class="content">
                <form>
                  <input type="text" >Name <br>
                  <input type="password">Password <br><br>
                  <input type="submit" value="Submit">
                </form>
                </div>
              </div>
            </div>

2 个答案:

答案 0 :(得分:3)

使用Eigen,在没有编译器优化的情况下编译时性能很差。有几种方法可以显着提高性能:

  • 启用优化(-O2或-O3,以g ++为单位),性能可提高两到三个数量级。
  • 通过在包含特征库之前定义NDEBUG,可以获得额外的(更小的)加速。这会禁用边界检查,因此请确保在启用此功能之前没有问题。
  • Eigen can also take advantage of vectorization(SSE截至3.2.6和AVX截至3.3,PowerPC和ARM)导致进一步加速。只需在编译器中启用相关标志即可。
  • Enabling OMP也可以带来加速。再次,在编译器中启用相关标志,Eigen将完成其余的工作。

答案 1 :(得分:0)

实际上,默认情况下,Spaesematrix是columnmajor,不适用于带有vector的乘积。使用Spaesematrix,您会发现它更快。