タグ付けされた質問 「fortran」

Fortranは、科学計算コミュニティで広く使用されている汎用プログラミング言語です。

6
Fortranコンパイラは実際にどれほど優れていますか?
この質問は、「C ++ vs Fortran for HPC」への回答で最近出された2つの議論の延長です。そして、それは質問よりも少し挑戦です... Fortranを支持する最もよく耳にする引数の1つは、コンパイラーが優れていることです。ほとんどのC / Fortranコンパイラは同じバックエンドを共有するため、両方の言語で意味的に同等のプログラム用に生成されたコードは同一である必要があります。ただし、コンパイラが最適化するのはC / Fortranの方が多かれ少なかれ簡単だと主張することができます。 そこで、簡単なテストを試すことにしました。daxpy.fとdaxpy.cのコピーを入手し、gfortran / gccでコンパイルしました。 daxpy.cはdaxpy.fのf2c変換(自動生成コード、見苦しい)なので、そのコードを取り、それを少しクリーンアップしました(daxpy_cに会います)。 for ( i = 0 ; i < n ; i++ ) dy[i] += da * dx[i]; 最後に、gccのベクトル構文を使用して書き直しました(daxpy_cvecと入力します)。 #define vector(elcount, type) __attribute__((vector_size((elcount)*sizeof(type)))) type vector(2,double) va = { da , da }, *vx, *vy; vx = ...
74 fortran  c  blas  benchmarking 

12
HPC用のC ++とFortran
私の計算科学のPhDプログラムでは、ほぼすべてC ++とFortranで作業しています。一部の教授は他の教授よりも一方を好むようです。特定の状況において、どちらが「優れている」のか、一方が他方より優れているのか疑問に思っています。
56 hpc  fortran  c++  languages 

4
Fortranを高速化するものは何ですか?
Fortranは数値プログラミングにおいて特別な場所です。確かに他の言語で優れた高速のソフトウェアを作成できますが、Fortranはその時代にもかかわらず非常に優れたパフォーマンスを維持します。さらに、Fortranで高速プログラムを作成するのが簡単です。私はC ++で高速プログラムを作成しましたが、ポインターエイリアシングのようなことに注意する必要があります。したがって、これには理由があり、非常に技術的な理由が必要です。コンパイラがさらに最適化できるからでしょうか?技術的な詳細を知りたいので、別の言語を使用する場合はこれらのことを考慮に入れることができます。 たとえば、私は知っている-またはそのように考えている-1つのことは、標準ではポインターが常にメモリ内で連続していることを指定しているため、メモリアクセスが高速になることを意味します。コンパイラにフラグを付けることで、C ++でこれを行うことができると思います。このように、Fortranが優れていることを知るのに役立ちます。したがって、別の言語を使用している場合、これを模倣できます。

8
PythonでModern Fortranコードをラップするには、どのパッケージを使用すればよいですか?
私は知っていて、f2py2eを使用して古いFortran 77コードをラップしましたが、私の理解では、新しいFortran 95コードでは機能しません。私は何を使うべきかを研究しましたが、fwrapとG3 f2pyに出会いましたが、どちらも現在の状態や基本的な使用法を超えた使用方法については説明していません。 また、f2pyのバージョンには第3世代のf2pyを使用するオプションがあることも確認しましたが、機能しないとコメントされています。これを考えると、私はどのプロジェクトをuniプロジェクトに使用すべきかわかりません。新しいコードにはどれを使うべきですか? PSこれは基本的にhttps://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-pythonと同じ質問であり、ここで尋ねるとより良い答えが得られることが示唆されました。
27 python  fortran 

3
FortranコンパイラをMacにインストールするにはどうすればよいですか?(OS X 10.x、x> = 4)
関連質問:科学計算とHPCでのMac OSの状態 計算科学のかなりの数のソフトウェアパッケージがFortranで記述されており、Fortranはなくなりません。他のソフトウェアパッケージをビルドするには、Fortranコンパイラも必要です(注目すべき例の1つはSciPyです)。 ただし、Mac OS XにはFortranコンパイラが含まれていません。Fortranコンパイラをマシンにインストールする方法は?
25 software  fortran 

3
インテルFortranコンパイラー:コンパイル時の最適化のヒント
私の研究室での個人的な経験から始めます。ifort 9と10日に戻って、-O3とプロセッサ固有のフラグ(たとえば、-xW -xSSE4.2)を使用してコンパイルする最適化に非常に積極的でした。しかし、ifort 11から始めて、次のことに気付き始めました 。1.結果にいくつかの矛盾があります(セマンティクスが保持されなかったため) 2. -O2に比べて小さいゲイン。 そのため、現在は、通常-O2と-xhostを使用してコンパイルするだけです。ifort 11でより良い提案がありますか?ifort 12に移行すると、これは再び変わりますか?前もって感謝します。

6
次元に依存しないコードを作成するにはどうすればよいですか?
特定の操作/アルゴリズムの1次元、2次元、3次元のバージョンについて、非常によく似たコードを書くことがよくあります。これらのバージョンをすべて維持するのは面倒です。単純なコード生成はかなりうまく機能しますが、より良い方法が必要だと考えられているようです。 一度操作を記述し、それを高次元または低次元に一般化する比較的簡単な方法はありますか? 具体例の1つ​​は次のとおりです。スペクトル空間で速度場の勾配を計算する必要があるとします。3次元では、Fortranループは次のようになります。 do k = 1, n do j = 1, n do i = 1, n phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k) end do end do end do ここで、ddx配列は適切に定義されています。(マトリックス乗算でもこれを行うことができます。)2次元フローのコードはほぼ同じですが、3番目の次元がループ、インデックス、およびコンポーネントの数から削除されます。これを表現するより良い方法はありますか? 別の例は次のとおりです。3次元グリッド上で点ごとに定義された流体速度があるとします。速度を任意の位置(つまり、グリッドポイントに対応しない)に補間するには、3次元すべてにわたって連続して1次元ネビルアルゴリズムを使用します(つまり、次元削減)。単純なアルゴリズムの1次元の実装を前提として、次元削減を行う簡単な方法はありますか?

2
割り当て可能な形状配列を使用したF2Py
f2py最新のFortranで使用したいと思います。特に、次の基本的な例を動作させようとしています。これは、私が生成できる最小の有用な例です。 ! alloc_test.f90 subroutine f(x, z) implicit none ! Argument Declarations ! real*8, intent(in) :: x(:) real*8, intent(out) :: z(:) ! Variable Declarations ! real*8, allocatable :: y(:) integer :: n ! Variable Initializations ! n = size(x) allocate(y(n)) ! Statements ! y(:) = 1.0 z = x + y ...
18 python  fortran 

5
並列科学計算ソフトウェア開発言語?
ゼロから並列科学計算ソフトウェアを開発したいです。どの言語から始めるべきかを考えてみたい。このプログラムは、txtファイルへのデータの読み取り/書き込みと、多くのLU分解およびスパース線形ソルバーの使用を伴う大量の計算を並行して実行します。私が考えていたソリューションの候補は、OpenMPまたはco-arrayを備えたFortran 2003/2008、openmp cilk +またはTBB、pythonを備えたC ++です。その他の文書化された提案は大歓迎です!私はC、Fortran、Javaを(この順序で)よく知っています。私はPythonでいくつかのスクリプトを作成しましたが、基本的なものです。 fortranは非常に高速ですが、保守や並列化が難しいことは知っています。私が好きなPythonなどの外部ライブラリを使用しない限り、C ++は遅いと言われていますが、フルスケールの産業レベルのソフトウェアを書くことは現実的ですか? ソフトウェアは、大量のデータを処理でき、科学計算で効果的である必要があります。パフォーマンスが重要です。 背景については、Fortranで書かれた動作するソフトウェアが既にあります。多くの人々が長年にわたって開発に関わっており、コードは本当に汚れています。コードの維持と並列化は悪夢であることが証明されており、代替案を考えています。 ペトロス

2
Fortranのどのバージョンを学ぶべきですか?
私は、航空宇宙工学の分野に興味のある機械工学の学生で、Fortranがまだ一般的に使用されていると言われています。 どのバージョンのFortranを学習するために時間を費やすべきですか?
17 fortran 

6
PythonとFORTRAN
どちらが良いですか:FORTRANまたはPython?そして、どちらの場合もGnuplotが必要だと思います。 現在、Windowsマシンで作業しています。 モンテカルロシミュレーション、数値積分と微分、分子動力学などを含む物理問題の数値解を得るために使用したいと思います。 FORTRAN(私が信じる77)とPythonの両方を紹介する計算物理学のコースを見ました。私は一方から始めて、もう一方を学ぶことを計画していますが、どの遷移が最も簡単かはわかりません。 また、どのコンパイラをお勧めしますか? 私にとっての基本的な質問は、学習するのが最も簡単なもの、最も速いもの、最も使いやすいもの、そして何よりも最も使用されているものです(これら4つの比較)。そして、その次に使用されている最も一般的な(無料または有料)コンパイラは何ですか?現在、古いラップトップ(初期のIntelデュアルコア)をLinuxに変換することを検討しています。うまくいけば、それは十分に高速です。 これまでの回答に感謝します!私が探しているものと一致する答えはLKlevinとSAADのものです。 私はC ++、Mapleの基本を知っており、MATLABとMathematica9をマスターすれば、それが助けになります。
17 python  fortran 

4
行列の行優先レイアウトと列優先レイアウト
密行列計算のプログラミングで、列優先レイアウトより行優先レイアウトを選択する理由はありますか? 選択したマトリックスのレイアウトに応じて、速度を上げるためにキャッシュメモリを効果的に使用するために適切なコードを記述する必要があります。 行優先レイアウトは、より自然でシンプルに見えます(少なくとも私には)。しかし、Fortranで書かれたLAPACKのような主要なライブラリは列の主要なレイアウトを使用するため、この選択をした理由がいくつかあるに違いありません。
16 matrix  fortran 

3
Fortran:コードのセクションの時間を計る最良の方法は?
コードの最適化中にコードの特定の部分の時間を測定することが必要になる場合がありますが、私は長年にわたって次のものを使用していましたが、それを行うより簡単/より良い方法があるかどうか疑問に思っていましたか? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
OpenMPなどの共有メモリモードでMPI-3.0を実行する方法
5次元の人口バランスモデルを数値的に解くためにコードを並列化します。現在、FORTRANには非常に優れたMPICH2並列化コードがありますが、パラメーター値を大きくすると、配列が大きくなりすぎて分散メモリモードで実行できなくなります。 15ノードのクラスターにアクセスできます。各ノードには2つの8コアCPUと128GBのRAMがあります。共有メモリモードでMPI-3.0を使用してプログラムを実行し、各プロセスが各アレイの独自のコピーを生成しないようにしたいと思います。 クラスターで何かを実行する前に、Ubuntuを実行しているデスクトップでテストする必要があります。2つの8コアCPUと128 GBのRAMを備えているという点で、本質的にクラスターの1つのブレードです。コードを書いてテストしますので、Ubuntuコンピューターでプログラムを実行するように応答してください。 MPI-3.0をデフォルトの分散メモリモードの代わりにOpenMPのような共有メモリモードで実行する方法があることを読みました。 質問: コードを変更するにはどうすればよいですか?次のような他のMPI関数への呼び出しを追加する必要がありMPI_WIN_ALLOCATEますか? 共有メモリモードでMPI-3.0を実行するようにコードをコンパイルするにはどうすればよいですか?複数のノードにまたがる場合、これは異なりますか? 可能な場合は、サンプルのコンパイルスクリプトを提供してください。また、GNUコンパイラしかありません。私が使用しているクラスターは、Intelコンパイラーをサポートしていません。

6
OOPで最新のFortranを使用するオープンソースの科学ライブラリはありますか?
私はここ数か月、特定のPDEシステムを解決するためのFortranプログラムのコーディングに費やしました(流体の流れ/燃焼について説明しています)。私は、最新のFortranと、最新のFortranに備わっている新しいOOP機能を使用しようとしました。私は自分で作業していて、質問をするためのFortranの第一人者がいないので、私にとって学習するための自然な方法は、最新のFortranを使用する他のライブラリ/ソルバーを調べることです。 残念ながら、そこにあるすべてのFortranライブラリは、かなり古いFortran、Fortran90トップで書かれているようです。したがって、クラスの設計と相互作用を自分で考えなければなりませんでした。そして、特にパフォーマンスの観点から見た場合、私はそれを正しくやったとはまったく言えません。しかし、おそらく私は何かを見逃しており、FortranとOOPを使用している場合、現代の科学的なパッケージがありますか? 多くの優れたC ++ライブラリ(OpenFOAM、deal.IIなど)やPythonライブラリから学ぶことができます。これらの言語には、一般に大きなコミュニティもあります。例を使って学習したい場合、Fortranを削除して言語を切り替える方が良いでしょうか?
14 fortran 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.