gpt4 book ai didi

c++ - C/C++ 中简单快速的矩阵 vector 乘法

转载 作者:IT老高 更新时间:2023-10-28 22:02:52 31 4
gpt4 key购买 nike

我需要经常使用 matrix_vector_mult() 将矩阵乘以 vector ,下面是它的实现。

问题:有没有一种简单的方法可以显着加快速度至少两倍?

备注:1)矩阵大小约为300x50。期间不变跑。 2) 它必须在 Windows 和 Linux 上都可以运行。

double vectors_dot_prod(const double *x, const double *y, int n)
{
double res = 0.0;
int i;
for (i = 0; i < n; i++)
{
res += x[i] * y[i];
}
return res;
}

void matrix_vector_mult(const double **mat, const double *vec, double *result, int rows, int cols)
{ // in matrix form: result = mat * vec;
int i;
for (i = 0; i < rows; i++)
{
result[i] = vectors_dot_prod(mat[i], vec, cols);
}
}

最佳答案

这是理论上一个好的编译器应该自己做的事情,但是我尝试使用我的系统 (g++ 4.6.3) 并通过手动展开 4 次乘法(大约 18us 每矩阵而不是每个矩阵 34us):

double vectors_dot_prod2(const double *x, const double *y, int n)
{
double res = 0.0;
int i = 0;
for (; i <= n-4; i+=4)
{
res += (x[i] * y[i] +
x[i+1] * y[i+1] +
x[i+2] * y[i+2] +
x[i+3] * y[i+3]);
}
for (; i < n; i++)
{
res += x[i] * y[i];
}
return res;
}

但是,我希望这种级别的微优化的结果在系统之间会有很大差异。

关于c++ - C/C++ 中简单快速的矩阵 vector 乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289235/

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