10

次のようなNumbaでPython関数をコンパイルした後:

from numba import jit

@jit
def sum(x, y):
    return x + y

コンパイルされた関数の生成された LLVM コードを (文字列として) 取得するにはどうすればよいですか?

これは、コンパイルされた関数の lfunc プロパティを介して以前のバージョンの Numba で利用できたかのように見えますが、これは機能していません。

同様の機能が、生成された LLVM アセンブリを (コンパイル中に) ダンプするという形で存在するようにも見えました。ただし、これはもう機能していないようです-何か間違ったことをしていない限り。サブプロセスでこれを実行できることはわかっていますが、Python内のコードが本当に好きなので、端末コマンドを実行する必要があるのは理想的ではありません。

これは、実行時に変換される Python コードの移植可能なバージョンを作成しようとするものです。これに関する提案を歓迎します。

ありがとう

4

2 に答える 2

5

これがこれを行うための最良の方法であるかどうかは覚えていませんが、関数を別の方法でコンパイルしても構わない場合は、次のことができます。

from numba.compiler import compile_isolated

# second argument specifies the argument types to the sum function
cfunc = compile_isolated(sum, (types.int64, types.int64))

# get llvm IR as string
llvm_code_str = str(cfunc.llvm_module)

引数の型を指定する必要があるのは、(明示的に指定するか、実際に関数を呼び出すことによって) シグネチャを認識するまで、関数は実際にはコンパイルされないためです。

NUMBA_DUMP_LLVM=1 環境変数を設定し、Python スクリプトを実行することで (または、Anaconda の bin パスまたは Numba リポジトリの bin dir にインストールされている numba コマンドを使用して、端末から llvm IR を引き続きダンプできます: numba --dump- llvm test.py)。

于 2014-09-19T21:57:00.883 に答える