[問題] Matlab VS OpenCV

看板C_and_CPP (C/C++)作者 (SaoAn)時間15年前 (2010/10/31 22:53), 編輯推噓5(5012)
留言17則, 11人參與, 最新討論串1/1
大家好,我最近奉命將一個matlab code改成C++,遇到一件很崩潰的事情 好不容易改好了,但是同一組test data在matlab上跑29秒,在C++上要跑40秒 code本身要處理很多3維矩陣,還要做FFT IFFT和很多矩陣元素間加減乘除的動作 還要求要64 bit double求精確度,小弟我用OpenCV的IplImage **來表示3維矩陣 call OpenCV的內建function+for loop做矩陣元素間加減乘除。連OpenMP都開了還 跑比較慢,真的很奇怪。 不知道大家有沒有知道什麼加速的好方法,目前只有想到一個,不知道可不可行? 1. matlab有很多一行就寫完的code,我需要中間allocate一些暫時的buffer,我算完 就把它release掉了,以後如果還需要,又重新allocate,所以還蠻多allocate- release的動作,寫好一些global buffer,程式全部跑完在release掉,這樣會 不會比較快? 因為這樣改工程很大,而且會降低程式閱讀性,遲遲還不敢改 大家還有沒有什麼optimize的小技巧可以提供給小弟,我一直以為C++一定會跑的比 matlab快的說 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.161.183.254

10/31 22:55, , 1F
用CUDA
10/31 22:55, 1F

10/31 22:55, , 2F
聽說matlab內部做了很多很多的最佳化...XDDD
10/31 22:55, 2F

10/31 22:56, , 3F
你可以運用一些工具,先分析、找出目前程式的瓶頸
10/31 22:56, 3F

10/31 22:58, , 4F
一個內部做了一堆運算最佳化,一個是自己人肉最佳化
10/31 22:58, 4F

10/31 22:58, , 5F
問題是我也沒寫什麼很特別的只是call Opencv的function
10/31 22:58, 5F

10/31 22:58, , 6F
難不成matlab c=a+b 比C++ cvAdd(a,b,c,0)還要快?
10/31 22:58, 6F

10/31 22:59, , 7F
你可以做做實驗,其實挺難說的....
10/31 22:59, 7F

10/31 23:00, , 8F
matlab要賣得這麼貴 如果還比免費的難用 那.....XDDD
10/31 23:00, 8F

10/31 23:02, , 9F
可是我聽到很多人說matlab會跑的比C++慢 這是為什麼呢?
10/31 23:02, 9F

10/31 23:13, , 10F
矩陣運算有很多加速的空間.如果剛好用到沒加速的函式庫.ㄎㄎ
10/31 23:13, 10F

10/31 23:18, , 11F
openCV其實很多都沒寫很好
10/31 23:18, 11F

10/31 23:36, , 12F
這使我想起這篇文章.. #1CicCNVl
10/31 23:36, 12F

10/31 23:39, , 13F
注意container, 有些container會用光時間記憶體。
10/31 23:39, 13F

10/31 23:40, , 14F
也許可先用ublas 之類的lib算, or lapack++
10/31 23:40, 14F

11/01 08:39, , 15F
先進行耗時分析吧.
11/01 08:39, 15F

11/01 23:59, , 16F
openCV多用幾次後就會發覺真的缺點還不少
11/01 23:59, 16F

11/21 23:27, , 17F
程式跑得快慢跟coding也很有關
11/21 23:27, 17F
文章代碼(AID): #1CpOBt6M (C_and_CPP)
文章代碼(AID): #1CpOBt6M (C_and_CPP)