c语言 高效 矩阵乘法,高效矩阵乘法

高效矩阵乘法

1000*1000的矩阵A、B、C,C=A*B,用C/C++实现

参考:blocking factor,http://home.iae.nl/users/mhx/mm.c

效率可以对比matlab

int m;

int i, j, k;

double r;

double *A, *B, *C;

m = 1000;

A = new double[m*m];

B = new double[m*m];

C = new double[m*m];

//置初值

for (i=0; i

A[i] = 1;

B[i] = 1;

C[i] = 0;

}

int bf; // blocking factor

int jj, kk, im;

int minj, mink;

bf = 48; // 可以修改

for (jj=0; jj

for (kk=0; kk

for ( i=0; i

minj = (jj+bf)

for (j=jj; j

r = 0;

im = i*m;

mink = (kk+bf)

for (k=kk; k

r += A[im+k]*B[k*m+j];

}

C[im+j] += r;

}

}

delete[] A;

delete[] B;

delete[] C;

这个程序比matlab要慢1倍,我曾到网上搜索到一个fortran程序(分块dgemm),

其速度比matlab慢0.5倍左右,不知道有谁能写一个能与matlab媲美的程序?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值