はじめに
幣学科で,最短経路探索コンペなるものが開催されました.その時にCとFortranのファイルinput速度の差が気になったので簡単に比較してみました.
実行環境
実行環境はこんな感じです.
- Windows 10 Pro
- CPU : Intel(R) Core(TM) i7-7820X
- Compiler : gcc (MinGW.org GCC-6.3.0-1) 6.3.0
- Compiler : GNU Fortran (MinGW.org GCC-6.3.0-1) 6.3.0
コード
実験用に書いたコードはこんな感じです.link.datファイル(100MBくらい)を読み込む速度のみを測定する.
C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int *link_id, *from_node, *to_node, *length;
clock_t start = clock();
FILE *input_file = fopen("link.dat", "r");
while (!feof(input_file)){
fscanf(input_file, "%i%i%i%i\n",&link_id, &from_node, &to_node, &length);
}
fclose(input_file);
clock_t end = clock();
printf("%f[s]\n",(double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
Fortran
program fileIO
implicit none
integer:: i, link_id, from_node, to_node, length
real(8):: s_time, e_time, time
call cpu_time(s_time)
open(4, file='link.dat', status='old')
do
read (4,*,end=999)link_id, from_node, to_node, length
end do
999 close(4)
call cpu_time(e_time)
time = e_time - s_time
write(*,*) time, '[s]'
end program fileIO
実行結果
コンパイルオプションは-Ofastを使用した.
コンパイルして実行~~
C:\Users\file_io_test>gcc -Ofast fileIO.c
C:\Users\file_io_test>a
2.423000[s]
C:\Users\file_io_test>gfortran -Ofast fileIO.f95
C:\Users\file_io_test>a
3.8906250000000000 [s]
Cの方がはやそうですね.(何回かやったけど,同様の結果でした.)
今回は以上です.
3