平台: 树莓派 3 上的 g++
使用的库: OpenCV 和 OpenMP
问: 我使用 openMP 来提高我的跟踪算法的性能。我已经验证了 Dual core NB 上的代码,处理时间变成了 50%。然后我将代码移植到 Raspberry Pi 3(四核)上,与在没有 openMP 的 Raspberry Pi 3 上运行相比,处理时间仍然变为 50%。
预期输出: 我希望它更快~~~
附言
- 没有 num_threads(4) 我只通过 omp_get_thread_num() 输出 0 和 1
- 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;
}