2017-05-30 159 views
3

我是基準朱莉婭執行速度。我在Julia提示符下執行了@time [i^2 for i in 1:1000],這導致了20毫秒的順序。這似乎很奇怪,因爲我的電腦是現代的,有一個i7處理器(我正在使用Linux Ubuntu)。朱莉婭執行速度

另一個奇怪的是,當我在1:10範圍內執行相同的命令時,執行時間爲15毫秒。

我在這裏一定有一些微不足道的東西嗎?

回答

8

幾件事情,看到performance tips

  1. 不要在全局範圍內沒有標杆。
  2. 不要測量像這樣的第一次執行。
  3. 使用BenchmarkTools

Julia是一種JIT編譯語言,所以你第一次測量的東西,你測量的是編譯時間。這是一個很小的固定開銷,因此對於需要相當長時間的任何事情來說,這是微不足道的,但對於像這樣的短期運行代碼,幾乎都是這樣。非常量的全局變量迫使編譯器幾乎不考慮類型,這往往會影響你的所有性能。在某些情況下這很好,但大多數情況下,您應該編寫代碼,以便輸入是函數的顯式參數,而不是來自某些全局變量的隱式參數,以及b)不應編寫使用可變全局州。

+0

我沒有測量第一次執行。 20ms是第二次執行中的執行時間。在Julia教程中,同樣的基準測試要求不到1ms。 – NSL

+2

好吧,我現在就明白了。看來,當我在命令提示符下運行它時,它每次都會編譯。所以,我在一個* .il文件中的函數中定義了這段代碼並調用了函數。事實上,從第二次開始,它在1:100000列表上花費少於1毫秒。謝謝! – NSL

+0

@NSL - 全球空間的基準測試是許多新用戶的共同陷阱,因爲它包含編譯時間,所以總是對除第一次運行之外的函數進行基準測試。也就是說,即使你在帶有返回類型註解的REPL中運行這個理解列表,'@time(Int64)[i^2 for i in 1:1000];',這個運行時間約爲4μs。請參閱[本JuliaCon 2016年談話](https://youtu.be/szE4txAD8mk)瞭解編寫好的Julia代碼的許多類似技巧的更多細節。 – AboAmmar