問題タブ [f2py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - Fortran: 32 ビット / 64 ビットのパフォーマンスの移植性
いくつかの数値コード (Python モジュールの生成) に Fortran (95) を使い始めました。簡単な例を次に示します。
これは 32 ビットで非常にうまく機能することがわかりましたが、x86_64 としてコンパイルすると、約 5 倍遅くなります (macbook pro core2duo、snow leopard、r.research.att.com の gfortran 4.2.3)。これは、ネイティブ型ではなく 32 ビット整数型を使用していることが原因である可能性があることに最終的に気付きました。実際、整数 * 8 に置き換えると、64 ビットのパフォーマンスは 32 ビットのパフォーマンスよりも 25% だけ悪くなります。
64 ビット マシンで 32 ビット整数の使用が非常に遅いのはなぜですか? 私が気付いていない可能性のあるインデックス作成で暗黙のキャストが行われていますか?
このタイプのコードでは、64 ビットが 32 ビットよりも遅くなるというのは常にあるのでしょうか (私はこれに驚きました)。それとも、64 ビットでコンパイルされたバージョンを同じ速度またはより速く実行できる可能性はありますか?
(主な質問)(整数)変数を「ネイティブ」型として宣言する方法はありますか...つまり、32ビットでコンパイルすると32ビット、最新のfortranで64ビットでコンパイルすると64ビットです。これがなければ、コンパイル方法に応じてそれほど遅くならない移植可能なfortranコードを書くことは不可能に思えます.これは、プロジェクトでfortranを使用するのをやめなければならないことを意味すると思います. kind と selected_kind を見てきましたが、これを行うものは見つかりませんでした。
[編集: 大きなパフォーマンス ヒットは、配列をコピーして 64 ビット int から 32 ビット int にキャストする f2py ラッパーによるもので、fortran に固有のものは何もありません。]
f2py - F2PY: 単一要素の配列を Fortran に渡す
次の Fortran コードは、2D 配列 x に値 v を入力します。
この関数を Python から呼び出す場合:
このアサーションが失敗するのはなぜですか?
python - f2pyを使用してFortranプログラムからPythonモジュールを作成するにはどうすればよいですか?
私はPythonでいくつかのsmpsファイルを読み込もうとしていて、Fortranの実装を見つけたので、f2pyを試してみようと思いました。問題は、私がFortranの経験がないことです。
Linuxボックスにgfortranとf2pyを正常にインストールし、w f2pyページで例を実行しましたが、大きなプログラムのコンパイルと実行に問題があります。2つのファイルがあります。1つはファイルリーダーラッパーを含み、もう1つはすべてのロジックを含みます。彼らはお互いを呼んでいるようですが、コンパイルしてリンクしたり、f2pyを試したりすると、どういうわけかお互いを見つけることができないというエラーが発生します。
また、名前をFILE_WRAPPER.Fに変更しようとしましたが、それは役に立ちませんでした。
f2pyを使用して、フリーフォーマットを受け入れるためにコメントを含める必要があることを知り、これを新しいファイルとして保存して試してみました。
たくさんの出力と警告が表示されますが、エラーは次のようです。
ヘルプや提案をいただければ幸いです。
python - Ubuntu 10.04 LTS で Fortran ソースから Python C モジュールを作成する
私が取り組んでいるプロジェクトでは、Fortran からf2pyでコンパイルされた Python C モジュールを使用しています。Windows 7 32ビット(mingw32を使用)および32ビットLinux上に構築されたサーバーで問題なく構築できました。しかし、最近、開発に使用するラップトップにUbuntu 10.04 LTS 64ビットをインストールしました。ビルドすると、多くの警告が表示されます(明らかにすべてのgcc/fortranライブラリ/コンパイラをインストールしたにもかかわらず)。ビルドを終了します。ただし、ビルドされたモジュールをアプリケーションで使用しようとすると、ほとんどが正常に動作するように見えますが、エラーでクラッシュします。
* glibc が検出されました * /home/botondus/Envs/gasit/bin/python: free(): 次のサイズが無効です (高速): 0x0000000006a44760 ***
f2py -c -m module_name ./fortran/source.f90の実行に関する警告
gfortran multilib パッケージをインストールし、-m32 オプションを指定して f2py を実行することで、32 ビット バージョンのビルドを試みました (ただし、成功しませんでした)。
f2py -c -m モジュール名 ./fortran/source.f90 --f77flags="-m32" --f90flags="-m32"
32ビットバージョンをビルドするか、64ビットバージョンを正しくビルドするために何を試みることができるかについて何か提案はありますか?
編集:サブルーチンの最後でクラッシュするようです。「書き込み」は正常に実行されます...これは奇妙です。
完全なバックトレースは非常に長く、それが助けになるかどうかはわかりませんが、ここにあります:
python - f2pyの使用に関する問題
Pythonコードで使用したいfortranで書かれたルーチンがいくつかあります。簡単なウェブ検索でf2pyについて知らされたので、試してみました。使用する
変換中に多くのエラーが発生するまで、しばらくは機能するようです。次のコードがf2pyで機能しない理由について何か考えはありますか?
編集:これはエラーを含むログファイルです。
python - NameError: 名前 'f2py' が定義されていません
Python、numpy、および scipy_dist_utils をインストールした後、Python インタープリターに f2py と入力した結果は次のとおりです。
from numpy import f2py は問題を解決しましたが、現在は機能しません f2py -c --help-fcompiler
f2py -c --help-fcompiler トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、f2py -c --help-fcompiler NameError: 名前 'c' が定義されていません
何がうまくいかなかったのですか?誰でもこれで私を助けることができますか?
python - Pythonコールバック関数をFortranサブルーチンに渡すオーバーヘッドは何ですか?
F2PYを使用してFortran90サブルーチンをPythonにラップしました。ここでの微妙な点は、Fortranサブルーチンasloが引数の1つとしてPythonコールバック関数を使用することです。
これpyfunc
は私のPythonコードの他の場所で定義されているPython関数です。ラッパーは正常に動作しますが、上記のラップされたバージョンを実行すると、次のように純粋なPythonを使用して取得できる経過時間の約5倍の経過時間が得られました。
それで、問題は、オーバーヘッドは何から来るのかということです。pyfunc
純粋なFortran関数に再コーディングするのは非常に時間がかかるので、そのままにしておきたいのですが、ラッパーモジュールの速度を向上させる方法はありますか?
numpy - f2pyへの変更に伴うコンパイルの問題
パッケージscikits.bvp_solver(ソースはこちら)を更新しようとしていますが、f2pyで生成されたファイルでいくつかの問題が発生しました。2009年に生成されたファイル「bvp_solverf-f2pywrappers2.f90」および「bvp_solverfmodule.c」を使用すると、「python setup.py build_ext --inplace」を使用してパッケージをインプレースでビルドできますが、それらを削除して再構築しようとすると、エラー
このuseステートメントを追加する部分は、古いバージョンのファイルには表示されません。この問題を解決する方法を理解するのに苦労しています。誰かアドバイスはありますか?過去2年間のf2pyの主な変更点は何ですか?
python - f2pyエラー:未定義のシンボル
単純なfortran90コードをf2pyでラップする必要があります。fortranモジュール「test.f90」は
それから私はそれを包みます
しかし、Pythonでインポートすると
それは私にエラーを言って促しました
それを修正する方法について何かアイデアはありますか?ありがとう。
python - cythonとf2pyの両方に依存するパッケージのsetup.py
cythonとf2pyの両方に依存するいくつかのサブモジュールを含むPythonパッケージのsetup.pyスクリプトを作成したいと思います。setuptoolsとnumpy.distutilsを使用しようとしましたが、これまでのところ失敗しています。
setuptoolsの使用
setuptoolsを使用して、cython拡張機能をコンパイル(およびパッケージの残りの部分のインストールを作成)することができます。ただし、setuptoolsを使用してf2py拡張機能を生成する方法を理解できませんでした。徹底的に検索したところ、f2pyモジュールはnumpy.distutilsを使用してコンパイルする必要があるというこのようなかなり古いメッセージしか見つかりませんでした。
numpy.distutilsを使用する
numpy.distutilsを使用して、f2py拡張機能をコンパイル(およびパッケージの残りの部分のインストールを作成)することができます。ただし、最近は常にpyrexを使用してコンパイルしようとしているため(そしてcythonに固有の拡張機能を使用しているため)、numpy.distutilsでcython拡張機能をコンパイルする方法を理解できませんでした。私はcythonファイルのnumpy.distutilsを取得する方法を見つけるために検索を行いましたが、少なくとも1年前の時点で、 numpy.distutilsにモンキーパッチを適用することを推奨しています。このようなモンキーパッチを適用すると、Cythonに渡すことができるオプションも制限されるようです。
私の質問は、f2pyとcythonの両方に依存するパッケージのsetup.pyスクリプトを作成するための推奨される方法は何ですか?numpy.distutilsにパッチを適用することは、本当に静止する方法ですか?