加速比和优化的C函数 [英] Speedup and optimize C function

查看:111
本文介绍了加速比和优化的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆