[問題] 該如何加速這段 code 的運作

看板C_and_CPP作者 (Nestarneal)時間12年前 (2013/04/13 22:28), 編輯推噓2(2011)
留言13則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual Studio 2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenGL, OpenMesh 問題(Question): 我利用 OpenMesh 讀入 .obj 檔並且進行處理,接著再用 OpenGL 畫出, 而目前卡在速度上有很大的問題。 對於 .obj 檔,如果它有 n 個 Vertex, 我就必須要呼叫以下這個函式( calQ() ) n 次: http://codepad.org/ynhb7hmq 其中的 Matrix44 是我自定義的 class,以下是 Constructor 的部分: Matrix44::Matrix44(double* m) { for(int i=0 ; i<16 ; i++) Q[i] = m[i]; } 在剛剛的 calQ() 函式中會呼叫 calKp(),程式碼如下: http://codepad.org/ibVKUZhH 所以總共有: 1. function : calQ() 2. function : calKp() 3. class : Matrix44 現在的問題就是當我檔案很大時,我甚至要呼叫到四萬次以上 calQ() 結果我跑了很久很久都還跑不完。 純粹論執行的話應該是沒有寫錯的部分,因為已經拿較小的檔案做檢查了。 現在就只差如何讓它跑快一點,不然根本沒辦法用... 想了很久還是想不到該怎麼辦,想請各位前輩指點指點 (_m_) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.82.93

04/13 22:49, , 1F
有切換到 Release build 了嗎?
04/13 22:49, 1F

04/13 22:50, , 2F
ctor 部份換 memcpy 試試
04/13 22:50, 2F

04/13 23:09, , 3F
可以試試把 Q 傳進 calKp 累加,而不要用 return 的方式
04/13 23:09, 3F

04/13 23:40, , 4F
a大:有切到 release build。ctor指的是...?
04/13 23:40, 4F

04/13 23:40, , 5F
l大:收到。我來改改看 :)
04/13 23:40, 5F

04/14 00:06, , 6F
這種東西 CPU 要算到 realtime 好像有點拚 XDD
04/14 00:06, 6F

04/14 00:22, , 7F
如果不需要每個 frame 都重算的話,可以另外做個工具程式
04/14 00:22, 7F

04/14 00:23, , 8F
把算好的資料存成自己的格式的檔案,減少重複計算量。
04/14 00:23, 8F

04/14 11:19, , 9F
有跑過profiler嗎?
04/14 11:19, 9F

04/14 18:34, , 10F
目前改用多個 thread 下去跑總算比較滿意了 XD
04/14 18:34, 10F

04/14 18:35, , 11F
j大說的 profiler 是指什麼呀?聽一次聽到
04/14 18:35, 11F

04/14 18:48, , 12F
profiler 可以分析程式運行數據,你可以用來查說
04/14 18:48, 12F

04/14 18:48, , 13F
那個部份花費多少時間,佔總體百分比為多少
04/14 18:48, 13F
文章代碼(AID): #1HQMkJQW (C_and_CPP)