gpt4 book ai didi

c - 性能下降

转载 作者:行者123 更新时间:2023-11-30 17:57:21 25 4
gpt4 key购买 nike

谁能帮我解决这个问题吗?

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时,所有性能都会下降。这是正常的?我做错了什么?

最佳答案

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

如果您声明 float mat[16],并直接对其进行索引,例如 mat[1 + 2*4],则这些元素的获取将是也许快两倍。

关于c - 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com