作者forloricever (sigh...)
看板MATLAB
标题Re: [问题] MEX加速 with Eigen library
时间Tue Dec 24 12:51:08 2013
简单回一下,
1.
min_b || y - Xb ||^2
不要用 inv(X'X)X'y 来解, 用 X\y, Matlab 说明里有写而且会给 warning.
min_b || y - Xb ||^2 + c^2 ||b||^2
= min_b || [y; zeros(length(b), 1)] - [X; c*eye(length(b))]*b ||^2
所以加上 L2 penalty 一样用 \ 来解
2. Eigen 不一定比较快, 大部份的演算法他都还没平行化,
(不过做 cross-validation 就自己平行他吧...)
Blas3 也还没用到 AVX 指令, 在新的机器上 (Sandy bridge 以上吧)
Matlab 矩阵相乘会快上二倍 (Haswell 系列有 AVX2 可能会差到四倍)。
真的要比 MATLAB 快就 link MKL, Eigen 有 wrapper 可以直接 link MKL,
可是我没用过也不晓得 lapack 系列他有没有处理好,
如果不行的话改用 Armadillo
http://arma.sourceforge.net
MKL 在 linux 下有 academic license
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 207.237.240.224
1F:→ celestialgod:谢谢回应 12/24 13:02
※ 编辑: forloricever 来自: 207.237.240.224 (12/24 13:06)
2F:→ celestialgod:我最後看了我的东西,要解的是inv(X'X)*y 12/24 13:29
3F:→ celestialgod:第一点真的让我长了知识,谢谢您 12/24 13:29
4F:→ celestialgod:第二点则是EIGEN的矩阵对矩阵乘法都有平行 12/24 13:29
5F:→ celestialgod:我觉得不是慢在矩阵乘法 是回圈 12/24 13:30
6F:→ celestialgod:因为当我cv的parameter变少,EIGEN就比较快了 12/24 13:34
7F:→ celestialgod:所以我一开始想问的是我的理解是c++回圈应比matlab快 12/24 13:35
8F:→ celestialgod:但是 我的程式不是如此 想问为什麽? 12/24 13:35
9F:→ forloricever:可能要先用matlab profiler 看看慢在哪边 12/24 13:51
10F:→ forloricever:如果主要是矩阵运算慢的话用 C++ 也不会快太多 12/24 13:52
11F:→ forloricever:因为 MATLAB 也是 pass 给 MKL 做 12/24 13:52
12F:→ celestialgod:好,那我了解了,谢谢您。 12/24 16:55
13F:→ celestialgod:armandillo没有比较快XDDD 12/24 16:55