1

私は中程度のアマチュアスキルを持っていますが、言語のPython初心者でasmあり、言語の知識はありませんC

Cpython -extensions が正常に動作するには、特定のインターフェイスに従う必要があることを知っています。

Assemblyこれは、適切なインターフェイスと完全な機能を備えた純粋な Python 拡張機能を作成することは可能ですか? 2番目の質問は、それを正しく行う場合、それは十分に効率的でしょうか?

グーグルで調べている間、コードの例や、この質問に関する記事や解決策は見つかりませんでした。

そして、これは-code を内部から実行することに関する質問ではないので、SO のトピックと重複していません。asmPython

4

3 に答える 3

6

理論的には可能です。

実際には、そうするのは非常に非現実的です

C で Assembly を使用する正当な理由があるケースはほとんどありません。そのような状況に直面したとしても、その場合に Python を使用する可能性はほとんどありません。

また、コンパイラは C コードを最適化して、アセンブリを非常に効率的にできることにも注意してください。実際、非常に強力なアセンブリ スキルを持っているか、これまでずっとアセンブリを書いてきた場合を除き、アセンブリを手書きする可能性はほとんどなく、コンパイラ出力よりも効率的です。

于 2013-01-27T10:57:45.673 に答える
2

効率に関しては、asmをcエクステンション内にインラインasmとして書くことができます...

ティーポット。

効率は、言語の選択によって測定されるのではなく、言語がどれだけうまく実装され、どれだけうまく設計されているかによって測定されます。

于 2013-01-27T10:58:10.177 に答える
1

どうやってするの:

アセンブリで「純粋に」できるかどうかはわかりませんが、アセンブリ関数を呼び出すCで「プロキシクラス」を作成し(そのように呼び出すことができます)、Cでアセンブラを記述した場合次に、アセンブラー コードをコンパイルするだけです

nasm -felf64 -g -F dwarf assembly_function.asm

次に、以下を含む setup.py ファイルを使用します。

from distutils.core import setup, Extension
setup(name='assembly_include_name', version='1.0', ext_modules=[Extension('assembly_include_name', ['c_assembly_proxy.c'],extra_objects=["assembly_function.o"])])

やりたいことができるようになります。Python にアセンブリ コードをリンクするように指示するために、パラメータ「extra_objects」を Extension コンストラクタに追加する必要があることに注意してください。そうしないと、関数の名前が見つからないと言ってクラッシュします。

なぜあなたはそれをしますか:

コンパイラーが行う最適化に関係なく、SSE 命令 (SSE2、SSE3...) を使用したい場合。

拡張 API: https://docs.python.org/2/extending/extending.html

disutils.core リファレンス: https://docs.python.org/2/distutils/apiref.html?highlight=distutils.core#module-distutils.core

于 2015-05-26T14:30:24.790 に答える