アクセス順について
Posted: 2013年2月05日(火) 08:51
今年からC言語を学び始めました。
このアクセス順のプログラムでサイズを20000にすると列:2.5(sec),行:9.3(sec)という結果になるのですがこの違いは何故ですか?
また、自分でも少し調べたのですが、C言語だと列で配列が確保されているから列でアクセスしたため高速になるそうなのですが、行による配列の確保、アクセスするにはプログラムをどう変えるべきか教えてください。
よろしくお願いします。
このアクセス順のプログラムでサイズを20000にすると列:2.5(sec),行:9.3(sec)という結果になるのですがこの違いは何故ですか?
また、自分でも少し調べたのですが、C言語だと列で配列が確保されているから列でアクセスしたため高速になるそうなのですが、行による配列の確保、アクセスするにはプログラムをどう変えるべきか教えてください。
よろしくお願いします。
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#define n 20000
void sumij();
void sumji();
int A[n][n];
int main() {
struct timeval s, e;
printf("サイズ:d\n", n);
gettimeofday(&s, NULL);
sumij();
gettimeofday(&e, NULL);
printf("列: %.2f (sec)\n", (e.tv_sec - s.tv_sec) + (e.tv_usec - s.tv_usec)*1.0E-6);
gettimeofday(&s, NULL);
sumji();
gettimeofday(&e, NULL);
printf("行: %.2f (sec)\n", (e.tv_sec - s.tv_sec) + (e.tv_usec - s.tv_usec)*1.0E-6);
return 0;
}
void sumij() {
int i, j, sum=0;
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
sum += A[i][j] ;
}
}
}
void sumji() {
int i, j, sum=0;
for(j=0; j<n; j++) {
for(i=0; i<n; i++) {
sum += A[i][j] ;
}
}
}