请大家帮个忙,关于windows和linux下编程效率出现问题

lgvictor 2012-06-04 09:18:31
我在将一段代码从vs2008中移植到fedora11中的时候碰到耗时长短差异问题,所以在这里请大家帮忙。
十分感谢。
再有,我也不是很清楚这个问题到底发在哪个版,所以要是地方不对,请版主提示哦。
以下是这段代码的解释


需要衡量的代码为
{
ts = cvGetTickCount();
for(y = 0; y < sh; y++)
{
ptr_topleft = img + y * IMAGE_WIDTH;
for(x = 0; x < sw; x++)
{

GetTBFeatures(ptr_topleft, tbft, feat);

conf = GetConfidence(feat, tbft);

if(map_conf != NULL)
{
map_conf[y*sw+x] = conf;
}
if(conf > max_conf)
{
max_conf = conf;
mx = x;
my = y;
}
ptr_topleft += 1;
}
}
te = cvGetTickCount();
printf("time is lag ........ %f\n",(te-ts)/cvGetTickFrequency()/1000);
}
相同机器情况下,
我在winxp vs2008和fedora11下gcc测试,这段程序的结果分别为:sw==sh==100
Win(ms) fedora(ms)
Debug 25 ~36
Release 6 ~36(-O3)
分别测试时,其中的GetConfidence相差不大,但是GetTBFeatures的一次调用相差蛮大的,大致结果为:
Win(ms) fedora(ms)
Debug 0.001 0.004
Release <0.001 0.003
所以经过最外层的循环,整段代码的时间相差较大。
GetTBFeatures函数中的操作是最简单的取地址和移位操作,所以让人有些想不通。怀疑是fedora11系统的设置问题。
其中的两个函数为:
void GetTBFeatures(unsigned char *img, TBFT *tbft, unsigned char *feat)
{
FOOTPRINT *fpt = tbft->footprint;
int n = tbft->size;
int i = 0;
unsigned char f = 0;
unsigned char center = 0;
unsigned char first = 0;
unsigned char second = 0;
for(i = 0; i < n; i++)
{
center = img[fpt[i].off[0]];

f = 0;

/////////////////////////////////////
first = img[fpt[i].off[1]];
second = img[fpt[i].off[2]];
f <<= 1;
f |= first > center ? 1 : 0;
f <<= 1;
f |= second > center ? 1 : 0;
/////////////////////////////////////
/////////////////////////////////////
first = img[fpt[i].off[3]];
second = img[fpt[i].off[4]];
f <<= 1;
f |= first > center ? 1 : 0;
f <<= 1;
f |= second > center ? 1 : 0;
/////////////////////////////////////
/////////////////////////////////////
first = img[fpt[i].off[5]];
second = img[fpt[i].off[6]];
f <<= 1;
f |= first > center ? 1 : 0;
f <<= 1;
f |= second > center ? 1 : 0;
/////////////////////////////////////
/////////////////////////////////////
first = img[fpt[i].off[7]];
second = img[fpt[i].off[8]];
f <<= 1;
f |= first > center ? 1 : 0;
f <<= 1;
f |= second > center ? 1 : 0;
/////////////////////////////////////
feat[i] = f;
}
}
int GetConfidence(unsigned char *feat, TBFT *tbft)
{
int conf = 0;
unsigned char f = 0;
unsigned char t = 0;
unsigned char x = 0;
unsigned char best_score = 0;
int n = tbft->size;
CODEBOOK *codebook = tbft->codebook;
CODEBOOK book;
int i = 0;
int j = 0;
int k = 0;
for(i = 0; i < n/2; i++)
{
f = feat[i];
best_score = 0;
book = codebook[i];
k = book.len;
for(j = 0; j < k; j++)
{
t = book.code[j].feat;
x = ~(f ^ t);
best_score = max(best_score, table_bitcount[x]);
}
conf += best_score;
}
if(conf < n*8/4)
{
return conf;
}
for(i = n/2; i < n; i++)
{
f = feat[i];
best_score = 0;
book = codebook[i];
k = book.len;
for(j = 0; j < k; j++)
{
t = book.code[j].feat;
x = ~(f ^ t);
best_score = max(best_score, table_bitcount[x]);
}
conf += best_score;
}
return conf;
}

十分感谢了。
...全文
11360 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧