加速比和优化的C函数 [英] Speedup and optimize C function
本文介绍了加速比和优化的C函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有运行稍慢的功能。我想知道如果有反正我可以成倍地提高我的程序的加速。这里是低于code。
INT mask_product(INT米[3] [3],字节位[MAX_ROW] [MAX_COL],[NUM_COLORS],INT X,INT Y,INT Z)
{
INT TMP [9];
INT I,总和; 总和= 0; TMP [0] = M [0] [0] *位图[X-1] [Y-1] [Z];
TMP [1] = M [1] [0] *位图[X] [Y-1] [Z];
TMP [2] = M [2] [0] *位图[X + 1] [Y-1] [Z];
TMP [3] = M [0] [1] *位图[X-1] [Y] [Z];
TMP [4] = M [1] [1] *位图[X] [Y] [Z]。
TMP [5] = M [2] [1] *位图[X + 1] [Y] [Z];
TMP [6] = M [0] [2] *位图[X-1] [Y + 1] [Z];
TMP [7] = M [1] [2] *位图[X] [Y + 1] [Z];
TMP [8] = M [2] [2] *位图[X + 1] [Y + 1] [Z];
对于(i = 0; I< 9;我++)
总和=总和+ TMP [I]
返回总和;
}
无效detect_naive(INT宽度,高度INT,INT阈值)
{
INT X,Y,Z;
INT TMP; 对于(Y = 1; Y<宽1; Y ++)
为(X = 1; X&下;高度-1; X ++)
对于(Z = 0; Z 3;; Z +)
{
TMP = mask_product(掩模,A,X,Y,Z);
如果(TMP> 255)
TMP = 255;
如果(TMP℃,)
TMP = 0;
如果(TMP<阈值)
TMP = 0;
B〔X] [Y] [Z] = 255-TMP;
}
返回;
}
解决方案
我已经这样做了简单的优化是可以理解的,我希望这改变对你的工作。
INT mask_product(INT米[3] [3],字节位[MAX_ROW] [MAX_COL],[NUM_COLORS],INT X,INT Y,INT Z)
{
INT总和; 总和= 0; 总和+ = M [0] [0] *位图[X-1] [Y-1] [Z];
总和+ = M [1] [0] *位图[X] [Y-1] [Z];
总和+ = M [2] [0] *位图[X + 1] [Y-1] [Z];
总和+ = M [0] [1] *位图[X-1] [Y] [Z]。
总和+ = M [1] [1] *位图[X] [Y] [Z]。
总和+ = M [2] [1] *位图[X + 1] [Y] [Z]。
总和+ = M [0] [2] *位图[X-1] [Y + 1] [Z];
总和+ = M [1] [2] *位图[X] [Y + 1] [Z];
总和+ = M [2] [2] *位图[X + 1] [Y + 1] [Z]; 返回总和;
}
无效detect_naive(INT宽度,高度INT,INT阈值)
{
INT X,Y,Z;
INT TMP;
为(X = 1; X&下;高度-1; X ++)
对于(Y = 1; Y<宽1; Y ++)
对于(Z = 0; Z 3;; Z +)
{
TMP = mask_product(掩模,A,X,Y,Z);
如果(TMP> 255)
TMP = 255;
否则,如果(TMP℃,|| TMP<阈值)//还,如果你的阈值大于0,你可以删除TMP℃,
TMP = 0;
B〔X] [Y] [Z] = 255-TMP;
}
}
I have a function that is running slightly slow. I was wondering if there is anyway I can exponentially increase the speedup of my program. Here is the code below.
int mask_product(int m[3][3], byte bitmap[MAX_ROW][MAX_COL],[NUM_COLORS], int x, int y, int z)
{
int tmp[9];
int i, sum;
sum = 0;
tmp[0] = m[0][0]*bitmap[x-1][y-1][z];
tmp[1] = m[1][0]*bitmap[x][y-1][z];
tmp[2] = m[2][0]*bitmap[x+1][y-1][z];
tmp[3] = m[0][1]*bitmap[x-1][y][z];
tmp[4] = m[1][1]*bitmap[x][y][z];
tmp[5] = m[2][1]*bitmap[x+1][y][z];
tmp[6] = m[0][2]*bitmap[x-1][y+1][z];
tmp[7] = m[1][2]*bitmap[x][y+1][z];
tmp[8] = m[2][2]*bitmap[x+1][y+1][z];
for (i=0; i<9; i++)
sum = sum + tmp[i];
return sum;
}
void detect_naive(int width, int height, int threshold)
{
int x, y, z;
int tmp;
for (y = 1; y < width-1; y++)
for (x = 1; x < height-1; x++)
for (z = 0; z < 3; z++)
{
tmp = mask_product(mask,a,x,y,z);
if (tmp>255)
tmp = 255;
if (tmp<0)
tmp = 0;
if (tmp<threshold)
tmp = 0;
b[x][y][z] = 255-tmp;
}
return;
}
解决方案
I have done this simple optimization to be understandable, I hope this changes work for you.
int mask_product(int m[3][3], byte bitmap[MAX_ROW][MAX_COL],[NUM_COLORS], int x, int y, int z)
{
int sum;
sum = 0;
sum += m[0][0]*bitmap[x-1][y-1][z];
sum += m[1][0]*bitmap[x][y-1][z];
sum += m[2][0]*bitmap[x+1][y-1][z];
sum += m[0][1]*bitmap[x-1][y][z];
sum += m[1][1]*bitmap[x][y][z];
sum += m[2][1]*bitmap[x+1][y][z];
sum += m[0][2]*bitmap[x-1][y+1][z];
sum += m[1][2]*bitmap[x][y+1][z];
sum += m[2][2]*bitmap[x+1][y+1][z];
return sum;
}
void detect_naive(int width, int height, int threshold)
{
int x, y, z;
int tmp;
for (x = 1; x < height-1; x++)
for (y = 1; y < width-1; y++)
for (z = 0; z < 3; z++)
{
tmp = mask_product(mask,a,x,y,z);
if (tmp>255)
tmp = 255;
else if (tmp<0 || tmp<threshold)//also if your threshold is larger than 0 you can delete tmp<0
tmp = 0;
b[x][y][z] = 255-tmp;
}
}
这篇关于加速比和优化的C函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文