Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。
例如二维数组Amn
下面是用c语言测试存储方式对计算效率的影响
Program1. 不按计算机规定的存储方式编程
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main ()
{
int i,j;
float a[1000][5000];
clock_t beg, end;
double time;
beg=clock();
for (i=0; i<1000; i++) {
for (j=0; j<5000; j++) {
a[i][j]=0.5;
}
}
for (j=0; j<5000; j++) {
for (i=0; i<1000; i++) {
a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;
}
}
end=clock();
time=(double)(end-beg)/CLOCKS_PER_SEC;
printf("Compute time is %f seconds\n",time);
}
Compute time is 0.063000 seconds
Program2.按计算机规定的存储方式编程
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main ()
{
int i,j;
float a[1000][5000];
clock_t beg, end;
double time;
beg=clock();
for (i=0; i<1000; i++) {
for (j=0; j<5000; j++) {
a[i][j]=0.5;
}
}
for (i=0; i<1000; i++) {
for (j=0; j<5000; j++) {
a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;
}
}
end=clock();
time=(double)(end-beg)/CLOCKS_PER_SEC;
printf("Compute time is %f seconds\n",time);
}
Compute time is 0.046000 seconds
可以看出按计算机规定的存储方式进行编程可以在一定程度上提高程序的计算效率,认识这一点对于海量地震数据的快速处理很有帮助。