快速业务通道

1000*1000的矩阵A、B、C,C=A*B

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-05-23

效率可以对比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<m*m; 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<m; jj+=bf)
for (kk=0; kk<m; kk+=bf)
for ( i=0; i<m; ++i) {
minj = (jj+bf)<m ? (jj+bf):m;
for (j=jj; j<minj; ++j) {
r = 0;
im = i*m;
mink = (kk+bf)<m ? (kk+bf):m;
for (k=kk; k<mink; ++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媲美的程序?

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号