ベクトル化できない数学演算を実行する複雑な関数があります。NUMBA jit コンパイラを使用すると、実際にパフォーマンスが低下することがわかりました。おそらく、この関数内で python math.sqrt を呼び出しているためです。python math.sqrt への呼び出しを sqrt へのより高速な C 呼び出しに置き換えるように NUMBA を強制するにはどうすればよいですか?
-- Kes について
ベクトル化できない数学演算を実行する複雑な関数があります。NUMBA jit コンパイラを使用すると、実際にパフォーマンスが低下することがわかりました。おそらく、この関数内で python math.sqrt を呼び出しているためです。python math.sqrt への呼び出しを sqrt へのより高速な C 呼び出しに置き換えるように NUMBA を強制するにはどうすればよいですか?
-- Kes について
Numba はすでに、math.sqrt の呼び出しを sqrt のマシンコード ライブラリの呼び出しに置き換えています。したがって、パフォーマンスが低下している場合は、別の原因である可能性があります。
スピードアップしようとしているコードを投稿できますか。また、使用している Numba のバージョン。Numba の最新バージョンでは、装飾された関数の inspect_types メソッドを呼び出して、Python オブジェクトとして解釈されているもの (したがってまだ遅いもの) のリストを出力できます。
Numba はすでに libcで/へのmath.sqrt
呼び出しをマッピングしています。スローダウンは、おそらく Numba のオーバーヘッドによるものです。このオーバーヘッドは、PyObject をボックス化 (アン) し、コンパイルされたコードでエラーが発生したかどうかを検出することから発生します。Python からの小さな関数の呼び出しには影響しますが、(アン) ボクシングがないため、別の Numba でコンパイルされた関数から呼び出す場合は影響が少なくなります。sqrt
sqrtf
環境変数 を設定するNUMBA_OPT=3
と、アグレッシブな最適化がオンになり、オーバーヘッドの一部がなくなりますが、コード生成時間が長くなります。