作者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