看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《DrStein (啤酒肚)》之銘言: : 請愛用lapack : 若不會調用,有人已包好: : http://www.netlib.org/ : 直接用就是。 一個小問題,為什麼不用 MATLAB? 有個矩陣 A, 只要打 eig(A) 就都算完了, 只要花三秒打六個字元。 為了速度? C++ 會比較快? 用 netlib 的 lapack 會比較快? power method?? 真的嗎?? 為了做簡單的矩陣運算 (沒有成千上萬亂寫的 for loop 之類), 用 C++ 根本就是在找自己麻煩浪費時間。 不相信的話就 C++ 隨手寫個矩陣相乘, 例如 A B 各是 2000x2000 (或是矩陣 * 向量, 因為 power method 要一直疊代做這件事。) 然後打開 MATLAB 輸入 a = rand(2000); b = rand(2000); tic; a*b; toc 你很快會發現殘酷的事實... 別忘了把 -O3 打開, 但是, 相信我, 當你看到速度差距後, 很多人再也不會想用 C++ 做矩陣運算 --- WHY? 事實上 MATLAB 底層在做矩陣計算, 他包好了 Intel Math Kernel Library, (AMD CPU 會用 ACML, 比 MKL 慢一些) 比 netlib 裡的 reference BLAS, Lapack 快多了 (加上多核心, SSE2, SSE3, AVX 等指令集加持, 很多 routine 快了十幾倍有吧...) 那你要算的比 MATLAB 快,就直接的方法就是 C or C++ or fortran 用 MKL, (在 Linux 下學術用途免費,所以請不要用 Windows) 可是 LAPACK, BLAS 的 API 實在不是普通地難 call... 最後 compile, link 可能還會碰到新的問題。 OPEN CV 我是沒用過, 不過 google 了一下找到了這個 https://plus.google.com/102951334411452742447/posts/KfvpBrSygB2 簡單來說就很慢 至於之前提到的 Eigen, http://eigen.tuxfamily.org/index.php?title=Main_Page 似乎是最簡單在 C++ 裡得到還不錯地效能。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.38.170
tropical72:推!! 有時自己寫純粹是相關課程或興趣或簡單問題而已. 10/15 22:05
※ 編輯: forloricever 來自: 118.168.77.199 (10/15 22:25)
diabloevagto:http://www.simunova.com/en/node/24 10/16 03:13
diabloevagto:友人用過嗎? 10/16 03:13
diabloevagto:有 10/16 03:13
Bencrie:樓上看起來好像自問自答 XDDD 10/16 12:48
chubiei:我實地測過goto BLAS, BLAS, ATLAS和KML的矩陣相乘 10/16 22:04
chubiei:而goto BLAS和KML的效率幾乎一樣 ATLAS小輸一點點而已 10/16 22:04
forloricever:gotoblas 超快:P 可惜不維護了, 所以 intel AVX 10/16 22:44
forloricever:指令集不支援, 在 Sandy Bridge 可能比 ATLAs 慢吧 10/16 22:44
forloricever:但在拿這些 blas 編成 lapack 後, MKL 就強很多了... 10/16 22:45
uranusjr:Or you can try Numpy + Psyco, it's free everywhere, 10/17 07:36
uranusjr:and fast (離題) 10/17 07:36