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

王朝c/c++·作者佚名  2006-01-06
窄屏简体版  字體: |||超大  

参考: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<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媲美的程序?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航