我想执行块矩阵乘法(将matirix划分为多个sxs矩阵并乘以相应的块).我编写的代码如下Hennesy架构书的示例代码:
for(int jj=0;jj<=(n/s);jj += s){
for(int kk=1;kk<=(n/s);kk += s){
for(int i=1;i<=(n/s);i++){
for(int j = jj; j<=((jj+s-1)>(n/s)?(n/s):(jj+s-1)); j++){
temp = 0;
for(int k = kk; k<=((kk+s-1)>(n/s)?(n/s):(kk+s-1)); k++){
temp += b[i][k]*a[k][j];
}
c[j][i] += temp;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里,nxn是原始矩阵的大小.a,b矩阵大小相同.我将a,b矩阵划分为大小为sxs的块.在我的程序中,我已经将块大小设置为4.我将a,b的所有元素设置为5,常量和n = 1000.但是,我在结果中得到了错误的值.我在这里做错了吗?从过去的2个小时就坚持了下来.如果可能的话,请你们帮忙吗?书中的参考代码如下:
for (jj = 0; jj <= size; jj += N) {
for (kk = 1; kk <= size; kk += N) {
for (i = 1; i <= size; i++) {
for (j = jj; j <= findMin(jj+N-1, size); j++) {
temp = 0;
for (k = kk; k <= findMin(kk+N-1, size); k++) {
temp += B[i][k] * A[j][k];
}
C[j][i] += temp;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里,s = N且size = n/s
for(int jj=0;jj<N;jj+= s){
for(int kk=0;kk<N;kk+= s){
for(int i=0;i<N;i++){
for(int j = jj; j<((jj+s)>N?N:(jj+s)); j++){
temp = 0;
for(int k = kk; k<((kk+s)>N?N:(kk+s)); k++){
temp += a[i][k]*b[k][j];
}
c[i][j] += temp;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
AxB大小为N
| 归档时间: |
|
| 查看次数: |
15311 次 |
| 最近记录: |