<分区>
我有以下代码给出了乘以 2 个 1024x1024 字段矩阵的结果时间:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 1024
float a[NUM][NUM],b[NUM][NUM],c[NUM][NUM];
void initialize_matrix(float m[][NUM]);
void load_matrix(float m[][NUM]);
int main() {
int i,j,k;
clock_t t_inicial,t_final;
load_matrix(a);
load_matrix(b);
initialize_matrix(c);
printf("Starting matrix multiplication 1024x1024...\n\n");
t_inicial=clock();
for(i=0;i<NUM;i++)
for(j=0;j<NUM;j++)
for(k=0;k<NUM;k++)
c[i][j] =c[i][j] + a[i][k] * b[k][j];
t_final=clock();
printf("Matrix multiplication finished in: %3.6f seconds",((float) t_final- (float)t_inicial)/CLOCKS_PER_SEC);
}
void initialize_matrix(float m[][NUM]) {
int i,j;
for(i=0;i<NUM;i++)
for(j=0;j<NUM;j++)
m[i][j]=0.0;
return;
}
void load_matrix(float m[][NUM]) {
int i,j;
#pragma omp parallel for
for(i=0;i<NUM;i++)
for(j=0;j<NUM;j++)
m[i][j]=(float) 10*rand()/(float) rand();
return;
}
这段代码需要 24 秒才能解决,我被告知缓存存在一些问题。我如何改进此代码以减少时间?花了这么长时间不是很好。