Eigen的速度为啥这么快( 四 )

注意开头两个宏指令。如果不清楚详见Eigen的说明文档:
Eigen的Intel MKL说明:
http://eigen.tuxfamily.org/dox-3.2/TopicUsingIntelMKL.html

对MKL的g++的编译链接参数可以参考Intel的指导网页:
Intel? Math Kernel Library Link Line Advisor
https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/

按照Intel Link Advisor的配置进行编译链接,这里选择了静态链接,以便发布到其他机器上测试运行。

g++ -std=c++11 -O3 -fopenmp main.cpp -DMKL_ILP64 -m64 -I/opt/intel/mkl/include -I/home/eric/local_install/eigen-337 -Wl,--start-group /opt/intel/mkl/lib/intel64/libmkl_intel_ilp64.a /opt/intel/mkl/lib/intel64/libmkl_gnu_thread.a /opt/intel/mkl/lib/intel64/libmkl_core.a -Wl,--end-group -lgomp -lpthread -lm -ldl -o main

在三台物理机上的测试结果:
Eigen的速度为啥这么快

值得注意的是,如果你的环境没有安装MKL或其他blas库,那么请至少记得开启你的gcc优化选项-O2 -O3 和openmp多线程支持-fopenmp。
如果不开启gcc优化, 单纯开启-fopenmp, 我在本地机器下同样的1w*1w的matrix dot product, 5分钟都没有结果。开启-O3优化后, 58秒出结果。所以可见gcc的编译优化对于Eigen还是很重要的。


■网友
Armadillo+Openblas的组合比Eigen要快很多
■网友
eigen最好的地方不应该是head-only 可以直接扔到cuda里面骚操作嘛?
其他啥matlab做得到嘛~几乎无痛切换到cuda的诱惑比写simd啊avx啊高的不知道哪里去了
(然而windows下eigen 在cuda下面各种报错,我已经看腻了bug fix了)

■网友
通过并行指令集将算法并行化,比如矢量运算,底层合理并行,速度就快了几倍。一言以蔽之,结合硬件的编程技巧
■网友
【Eigen的速度为啥这么快】 为啥在我这里两个1000阶双精度随机数矩阵相乘,numpy耗时肉眼不可察觉,而Eigen花费大概4秒以上?

■网友
模板,模板元--------------------------------------------------------我是都没用过,闭眼答得、、还有,动态多态(继承,虚函数)只会降低执行速度的、、


推荐阅读