- 论坛徽章:
- 0
|
写了一个矩阵乘法的函数, 计算 c(i, j) = c(i, j) + sum_{k} a(i, k)*b(k, j)
void gemm1(int n, double *a, double *b, double *c)
{
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < n; k++) {
c[i+n*j] += a[i+n*k]*b[k+n*j];
}
}
}
return;
}
后来改了一下循环的顺序
void gemm2(int n, double *a, double *b, double *c)
{
int i, j, k;
for (i = 0; i < n; i++) {
for (k = 0; k < n; k++) {
for (j = 0; j < n; j++) {
c[i+n*j] += a[i+n*k]*b[k+n*j];
}
}
}
return;
}
发现快了好多, 不大明白为什么?
还有一个问题也想不明白,就是 gemm1 的运行时间:
n t
255 0.15~0.17 s
256 0.65~0.80 s
511 1.9 ~ 2.0 s
512 13 s
十分的诡异。
请各位大侠拍砖! |
|