考慮下面的代碼段的第一VS第二呼叫的(朱)性能的函數
bar(x) = for i = 1:9999 x+x*x-x+x end # Define the "bar" function
print("First try: "); @time bar(0.5)
print("Second try: "); @time bar(0.5)
bar(x) = for i = 1:9999 x+x*x-x+x end # Redefine the same "bar" function
print("Third try: "); @time bar(0.5)
print("Fourth try: "); @time bar(0.6)
輸出是
First try: elapsed time: 0.002738996 seconds (88152 bytes allocated)
Second try: elapsed time: 3.827e-6 seconds (80 bytes allocated)
Third try: elapsed time: 0.002907554 seconds (88152 bytes allocated)
Fourth try: elapsed time: 2.395e-6 seconds (80 bytes allocated)
爲什麼是第二(和第四)嘗試這樣比第一個(和第三個)嘗試更快(並佔用更少的內存)?
據我瞭解,Julia是一個即時編譯器。因此,第一個(和第三個)運行是編譯代碼(爲此需要分配),第二個(和第四個)運行只是運行先前編譯的代碼。 –
焦點話題:如果您重新運行代碼而不進行修改會發生什麼? Python創建.pyc文件(一種編譯的源代碼)。如果pyc文件仍然與源文件匹配,則不需要重新編譯它(呃,不是所有的東西)。 =>更快 –
哦,好的。這完全有道理。我會認爲編譯會在函數的定義中發生,而不是在第一次運行時發生。我猜你可以從你的評論中作出回答。謝謝@保羅 –