質問

私はいくつかの数値コード(Pythonモジュールを生成する)ためのFortran(95)を使用し始めてきました。ここでは簡単な例があります:

subroutine bincount (x,c,n,m)
  implicit none
  integer, intent(in) :: n,m
  integer, dimension(0:n-1), intent(in) :: x
  integer, dimension(0:m-1), intent(out) :: c
  integer :: i

  c = 0
  do i = 0, n-1
    c(x(i)) = c(x(i)) + 1 
  end do
end

私は、これは32ビットで、非常によく実行することを発見しましたが、x86_64版としてコンパイルした場合には(r.research.att.comからMacBook Proのcore2duo、ユキヒョウ、のgfortran 4.2.3)についての5倍遅くしています。私は最終的に、これが原因の代わりにネイティブ型の32ビット整数型を使用するかもしれません実現、と私はINTEGER * 8と交換したときに実際に、64ビットのパフォーマンスは、32ビットのものよりも25%しか悪化しています。

なぜ64ビットマシン上であまり遅い32ビットの整数を使用しているのですか?私が認識しないかもしれないインデックスで起こってどの暗黙のキャストはありますか?

それは(私はこれで驚いた)64ビットコードのこのタイプのために32ビットよりも遅くなることを常にそうである - または私は同じ速度またはより高速に動作する64ビットコンパイルされたバージョンを得ることができるチャンスがありますか?

をメイン質問の)で64ビットのコンパイル時に32ビット、64ビットをコンパイルしたとき「ネイティブ」タイプ...すなわち32ビットであることを(整数)の変数を宣言する方法はあります近代的なFORTRAN。これがなければ、そのコンパイル方法に応じても遅くはないだろうポータブルFortranコードを書くことは不可能であるように思える - と私は、これは私が私のプロジェクトのためのFORTRANの使用を停止する必要があります意味だと思います。私は親切で、selected_kindに見えたが、これを行います何かを見つけることができませんでした。

[編集:大規模なパフォーマンスヒットは、配列は、32ビットのint、そうFORTRANに固有の何にも64ビットのintからそれをキャストするf2pyラッパーコピーからだった。

役に立ちましたか?

解決

あなたの「メインの質問」への回答は32または64ビットで宣言されたデフォルトの整数を持っているために、正しいコンパイラオプションを選択することです。私はのgfortranを使用したことがない(私はG95、さらに良い有料のコンパイラ好む)ので、私はGoogleで検索し、-fdefault整数-8はあなたが必要なオプションであると思われます。

あなたのよう私は、64ビット版は32ビット版よりも遅いことを驚いています。私はその時点での照明は何もありません。

他のヒント

本当にも77 watfor実行するために、64ビットを使用してみましたが、鉱山だった完全impossible.Iは私の64ビット用GF-FOR-コンパイラを持って、GoogleのANS使用上のいくつかのオプションを試してみましたが、後にはgccを使用するオプションが与えられました4.3と4.3のgfortranを-mp。まだ遅かったバージョン。 私はあなたのprogsのより迅速かつ正確に実行するために、あなたのプログラムまたは脱グレードの32ビットへのあなたの64ビット版を実行するcompactible FORTRANで32ビットマシンを使用しアドバイスします。 WATFOR77とサブルーチンprogsのでcampactibly runingて64ビットマシンを取得するように研究を続けてみましょう。

私は慎重に研究を行っていないものの、

、私はそのような大きな速度差を見ていない。

私はのgfortranの新しいバージョンをしようと提案します。バージョン4.2以前である(のgfortranは4.0で開始)し、時代遅れと見なさ。 4.3と4.4は非常に改善され、より多くの機能を持っています。 4.4は、現在の非ベータ版です。 Mac上でそれらを取得する簡単な方法は、MacPortsを介して、次のとおりです。gcc43とgcc44パッケージはのgfortranが含まれます。他のバージョンと競合しないように、コンパイラは、GCC-MP-4.3のgfortran-MP-4.3、等としてインストールされています。それとものgfortran wikiページから4.5の最新のビルドを試すことができます。

インテルFortranは、時々のgfortranよりも大幅に高速です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top