ファイルinput速度の比較 C vs Fortran

はじめに

幣学科で,最短経路探索コンペなるものが開催されました.その時に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