Subject | : Re^5: SAD Update. V1.0.10.2.3b. g95 compatible. |
Date | : 2008/02/19(Tue) 21:17:40 |
Contributor | : Akio Morita |
> ですから、g95用では、すでにfgetcは使わないようになっています(使おうと思っても存在しない、fgetcのダミールーチンも使っていない)。他のコンパイラの場合も同じに出来ますが、その前に少しテストしたかったので、fgetcを使うルーチンが残っているだけです。 > src/itfgetbuf_.cの実装に関してですが、1byte毎に read(2)を呼び出すと system callに伴う kernel call gateや context switchのコストが増加による 大きなファイルを読み込む際のパフォーマンス低下が予測されます # fgetc_()[Fortran]や fgetc()[LIBC]の場合、後ろに入力バッファを抱えており # read(2)はバッファフィルにだけ使われるので system callに伴う overheadは # 低減されている fgetc_()を使わないままで、パフォーマンスの改善策としては - Fortran I/O LUNを捨てて LIBCの stdio library(FILE構造体)へ乗り換える o Fortran側で FILE構造体へのポインタをどう管理するかが問題になる o write(lfno,*)を全てリプレースする必要がある - File Descripter毎に自前のバッファリング機構を用意して管理する o write(lfno,*)をリプレースすると、Fortran I/O LUNを File Descripter(整数)で置き換え可能