私はリアルタイムのものをいくつかやっていますし、スピードが必要です。しかし、私のコードでは、私はこれを持っている:C++の最適化
float maxdepth;
uint32_t faceindex;
for (uint32_t tr_iterator = 0; tr_iterator < facesNum-1; tr_iterator++)
{
maxdepth = VXTrisDepth[tr_iterator];
faceindex = tr_iterator;
uint32_t tr_literator = 3*tr_iterator;
uint32_t facelindex = 3*faceindex;
for (uint32_t tr_titerator = tr_iterator+1; tr_titerator < facesNum; tr_titerator++)
{
float depth = VXTrisDepth[tr_titerator];
if (depth > maxdepth)
{
maxdepth = depth;
faceindex = tr_titerator;
}
}
Vei2 itmpx = trs[tr_literator+0];
trs[tr_literator+0] = trs[facelindex+0];
trs[facelindex+0] = itmpx;
itmpx = trs[tr_literator+1];
trs[tr_literator+1] = trs[facelindex+1];
trs[facelindex+1] = itmpx;
itmpx = trs[tr_literator+2];
trs[tr_literator+2] = trs[facelindex+2];
trs[facelindex+2] = itmpx;
float id = VXTrisDepth[tr_iterator];
VXTrisDepth[tr_iterator] = VXTrisDepth[faceindex];
VXTrisDepth[faceindex] = id;
}
VXTrisDepthはちょうどフロートの配列で、TRSはVei2の配列で、Vei2はちょうど整数の2Dベクトルで、faceindexはのuint32_tで、大きな数です。 問題はfacensumに16074のようなものがあるとき、このループは私のコンピュータ上で実行するには700ミリ秒かかります。それはあまりにも、最適化の考えですか?
'-O3'スイッチを試しましたか? –
tmp変数を持つ部分全体にstd :: swapを使ってみてください – JLev
可能な最適化は、第1ループから第2ループを外すことです。第2ループはすべてのtr_titeratorに対してmaxdepthとfaceindexのベクトルを構築します。第1ループは、代わりにそれを使用します。 – megabyte1024