作者Nestarneal (Nestarneal)
看板C_and_CPP
標題[問題] 該如何加速這段 code 的運作
時間Sat Apr 13 22:28:30 2013
開發平台(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
→ akasan:有切換到 Release build 了嗎? 04/13 22:49
→ akasan:ctor 部份換 memcpy 試試 04/13 22:50
→ linotwo:可以試試把 Q 傳進 calKp 累加,而不要用 return 的方式 04/13 23:09
→ Nestarneal:a大:有切到 release build。ctor指的是...? 04/13 23:40
→ Nestarneal:l大:收到。我來改改看 :) 04/13 23:40
推 Bencrie:這種東西 CPU 要算到 realtime 好像有點拚 XDD 04/14 00:06
→ linotwo:如果不需要每個 frame 都重算的話,可以另外做個工具程式 04/14 00:22
→ linotwo:把算好的資料存成自己的格式的檔案,減少重複計算量。 04/14 00:23
推 johnlinvc:有跑過profiler嗎? 04/14 11:19
→ Nestarneal:目前改用多個 thread 下去跑總算比較滿意了 XD 04/14 18:34
→ Nestarneal:j大說的 profiler 是指什麼呀?聽一次聽到 04/14 18:35
→ diabloevagto:profiler 可以分析程式運行數據,你可以用來查說 04/14 18:48
→ diabloevagto:那個部份花費多少時間,佔總體百分比為多少 04/14 18:48