2014-01-26 82 views
2

我使用numba來加速使用autojit裝飾器的部分Python代碼。測試通過,%timeit顯示代碼確實加速。我可以在單元測試的設置階段編譯numba嗎?

第一次執行速度很慢,因爲我假設numba正在編譯代碼。說得通。但是當我運行一套測試時,他們在極短的10秒內從10個測試中緩慢地運行極端,然後在117秒內對相同測試進行更改。似乎numba必須一次又一次地編譯,分別進行每個測試。

我可以避免這種情況嗎?我曾嘗試在setUp函數中運行一個簡單的測試,認爲可能會爲所有測試編譯一次函數,但這並沒有顯着改變運行時間。

+0

似乎緩存numba編譯將是最好的解決方案(但它尚未實現)。我能從腦海中想出最好的東西就是製作一個定製的裝飾器,在unittests期間關閉numba。 – U2EF1

+0

您是否碰巧知道暫時關閉numba的建議解決方案? –

回答

1

像這樣的東西可能會奏效:

from numba import autojit 

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

也可能碰到numba的關於緩存的問題,因爲這是一個非常重要的用例。我通常會對在不同的環境中運行單元測試和生產代碼猶豫不決,但永遠不會經常運行的單元測試。你幾乎可以肯定應該跟numba一起測試,只是不太經常。

+0

當然。我想我會同時運行,並希望儘快緩存。謝謝!附:這是[緩存功能請求問題](https://github.com/numba/numba/issues/224)。 –

+0

這聽起來像個糟糕的主意。你想在自動檢測時測試你的函數是否工作正常。 – asmeurer

+0

@asmeurer這是一個折衷。如果測試運行得很快,他會更頻繁地運行它們。但是你確實應該定期運行真實的東西。 – U2EF1

相關問題