0

谁能帮我这个?

void _vect_mat(float *vect,float **mat){
  float temp[4];

  temp[0] = vect[0];
  temp[1] = vect[1];
  temp[2] = vect[2];
  temp[3] = vect[3];

  vect[0] = (temp[0] * mat[0][0]) + (temp[1] * mat[1][0]) + (temp[2] * mat[2][0]) + (temp[3] * mat[3][0]);
  vect[1] = (temp[0] * mat[0][1]) + (temp[1] * mat[1][1]) + (temp[2] * mat[2][1]) + (temp[3] * mat[3][1]);
  vect[2] = (temp[0] * mat[0][2]) + (temp[1] * mat[1][2]) + (temp[2] * mat[2][2]) + (temp[3] * mat[3][2]);
  vect[3] = (temp[0] * mat[0][3]) + (temp[1] * mat[1][3]) + (temp[2] * mat[2][3]) + (temp[3] * mat[3][3]);
}

int main(){
  int i,j,k;

  float *vect,**mat;

  vect =  (float *)malloc(4 * sizeof(float));
  mat  = (float **)malloc(4 * sizeof(float *);
  for(i=0;i<4;i++)mat[i] = (float *)malloc(4 * sizeof(float));

  vect[0] = 1.0;
  vect[n] = ......etc.

  mat[0][0] = 1.0;
  mat[n][m] ......etc.     

  while (1){
    for(i = 0;i < 5;i++){
      for(j = 0;j< 6;j++){
        for(k = 0;k < 3600;k++)_vect_mat(vect,mat); 
      }
    }
  }
}

_vect_mat当我在循环内调用函数时,所有性能都会下降。这是正常的?我究竟做错了什么?

4

1 回答 1

0

你说的一个问题float **mat。这意味着获取类似的元素mat[1][2]是一个两步过程。首先它必须mat[1]作为指针获取,然后它必须从中获取元素[2]

相反,如果您声明float mat[16], 并直接对其进行索引,例如mat[1 + 2*4],这些元素的获取可能会快两倍。

于 2012-10-12T03:06:43.907 回答