1

プラットフォーム: Raspberry Pi 3 上の g++

使用ライブラリ: OpenCV & OpenMP

質問: 追跡アルゴリズムのパフォーマンスを向上させるために openMP を使用しています。デュアルコア NB でコードを確認したところ、処理時間が 50% になりました。次に、コードをRaspberry Pi 3(4コア)に移植しましたが、openMPなしでRaspberry Pi 3で実行した場合と比較して、処理時間は50%になります。

期待される出力: もっと速くなると思います~~~

PS

  1. num_threads(4) なし omp_get_thread_num() で 0 と 1 しか出力しない
  2. omp_get_num_procs() >> これを使用して、コア番号が 4 であることを確認します

クリティカルコード

vector<double> vSumRadio(sampleBoxNum, 0);
#pragma omp parallel for num_threads(4)
for (int j=0; j< sampleBoxNum; j++)
{
double eSumRadioTmp = 0;
        double eTmp1 = 0;
        double eTmp2 = 0;
        eSumRadioTmp = 0.0f;

        for (int i = 0; i<featureNum; i++)
        {
                double ePosTmp = 0, eNegTmp = 0;
                eTmp1 = (sampleValue[i][j]-Pos[i])*(sampleValue[i][j]-Pos[i]);
                eTmp2 = (sampleValue[i][j]-Neg[i])*(sampleValue[i][j]-Neg[i]);
                ePosTmp = exp(eTmp1/-(2.0f*sigmaPos[i]*sigmaPos[i]
                +1e-30))/(sigmaPos[i] + 1e-30);

                eNegTmp = exp(eTmp2/-(2.0f*sigmaNeg[i]*sigmaNeg[i]+
                1e-30))/(sigmaNeg[i]+1e-30);
                eSumRadioTmp += log(ePosTmp + 1e-30) - log(eNegTmp + 1e-30);
        }
        vSumRadio[j] = eSumRadioTmp;
}           
4

0 に答える 0