[问题] OpenMP 如何确定每颗核心都有用到?

楼主: hardman1110 (笨小孩)   2016-05-20 10:04:35
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++ on Raspberry Pi 3
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
OpenCV OpenMP
问题(Question):
在加速一些追踪的算法,在双核的笔电上以验证过,速度变1.8倍
但在4核心的树莓派3上却也只大约变2倍
喂入的资料(Input):
可平行化的循环(如程式码)
预期的正确结果(Expected Output):
速度变为原来的3倍多
错误结果(Wrong Output):
效能不符合预期
程式码(Code):(请善用置底文网页, 记得排版)
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;
}
补充说明(Supplement):
1. 原本没用 num_threads(4),用omp_get_thread_num()抓出来的执行绪只有0跟1
2. omp_get_num_procs() 抓出来的核心数确定为4核心
作者: Bencrie   2016-05-20 11:32:00
不是 top 看一下就知道了吗
楼主: hardman1110 (笨小孩)   2016-05-20 12:16:00
top是指?? 如果真的只用到其中两颗核心 那要怎做才能4颗都用到呢?
作者: Bencrie   2016-05-20 12:33:00
/usr/bin/top 啊
作者: james732 (好人超)   2016-05-20 13:36:00
top是linux下的一只程式,可看cpu使用率等资讯不过我更喜欢htop
作者: nowar100 (抛砖引玉)   2016-05-20 13:44:00
time 看 real 和 user 的比例
楼主: hardman1110 (笨小孩)   2016-05-20 15:11:00
谢谢指导 还真的不知道top 看了一下CPU使用率,不管我有没有强制切成4个执行绪,run程式时4颗cpu使用率都会增加到40~50% 原本都5%以内

Links booklink

Contact Us: admin [ a t ] ucptt.com