3

私は numba を使用して、autojit デコレーターを使用して Python コードの一部を高速化しました。テストに合格し、%timeit はコードが実際に高速化されていることを示しています。

最初の実行が遅いのは、numba がコードをコンパイルしているためだと思います。理にかなっています。しかし、一連のテストを実行すると、実行速度が非常に遅くなり、変更前の 10 個のテストが約 10 秒、同じテストが 117 秒で完了しました。numba は、テストごとに別々に、何度も何度もコンパイルする必要があるようです。

これを避けることはできますか?関数内で 1 つの簡単なテストを実行しようとしましたsetUpが、すべてのテストで関数が 1 回コンパイルされる可能性があると考えましたが、実行時間は大幅に変わりませんでした。

4

1 に答える 1

1

このようなものがうまくいくかもしれません:

from numba import autojit

def autojit_except_when_unit_testing(func):
    if UNIT_TESTING:
        return func
    return autojit(func)

これは非常に重要な使用例であるため、キャッシングに関する numba の問題も発生する可能性があります。私は通常、このような異なる環境で単体テストと製品コードを実行することをかなり躊躇しますが、永遠にかかる単体テストはそれほど頻繁には実行されません。ほとんどの場合、numba でもテストする必要がありますが、それほど頻繁ではありません。

于 2014-01-26T23:04:26.270 に答える