2013-09-25 29 views
10

Tôi đang khám phá bằng cách sử dụng Julia như một ngôn ngữ máy tính khoa học có mục đích chung (như trái ngược với python), nhưng thời gian khởi động của nó khá chậm chạp.Slow Julia Startup Time

Có cách nào để tăng tốc độ này không?

$ time python -c 'print "Hello"' 
Hello 

real 0m0.030s 
user 0m0.018s 
sys 0m0.010s 

$ time julia -e 'println("Hello")' 
Hello 

real 0m4.614s 
user 0m4.644s 
sys 0m0.116s 

PHỤ LỤC: Here là một trích dẫn từ một trong những tác giả Julia năm ngoái. Có khó khăn gì với chiến lược này không?

Hầu hết Julia được viết bằng chính nó, sau đó phân tích cú pháp, kiểu suy luận và JITted, vì vậy bootstrapping toàn bộ hệ thống từ đầu mất một 15-20 giây. Để làm cho nó nhanh hơn, chúng tôi có một hệ thống phân đoạn, trong đó chúng tôi phân tích cú pháp, nhập-infer và sau đó lưu vào bộ nhớ cache một phiên bản được sắp xếp theo thứ tự của AST loại được suy ra trong tệp sys.ji. Tệp này sau đó được tải và được sử dụng để chạy hệ thống khi bạn chạy julia. Tuy nhiên, không có mã LLVM hoặc mã số được lưu trong bộ nhớ cache trong sys.ji, do đó tất cả các lệnh LLVM vẫn cần để thực hiện mỗi khi julia khởi động, do đó mất khoảng 2 giây.

Thời gian trễ khởi động 2 giây này khá khó chịu và chúng tôi có kế hoạch để sửa chữa. Kế hoạch cơ bản là có thể biên dịch toàn bộ chương trình Julia thành nhị phân: một trong hai tệp thực thi có thể chạy hoặc .so/.dylib thư viện được chia sẻ có thể được gọi từ các chương trình khác. Thời gian khởi động cho một nhị phân sẽ là giống như bất kỳ chương trình C nào khác, do đó, thời gian trễ khởi động 2 giây sẽ biến mất.

+0

Bây giờ có một chi nhánh trong kho lưu trữ Julialang bạn có thể xem. https://github.com/JuliaLang/julia/pull/4898. Có lẽ một số vấn đề vẫn còn, vì vậy hãy thử rủi ro của riêng bạn. Nó có thể sẽ được đưa vào bản phát hành sắp tới 0.3. – ivarne

Trả lời

7

Các branch tôi đã đề cập trong các bình luận đã được sáp nhập và julia được hơn tối ưu hóa cho khởi động (và không làm gì cả), hơn bao giờ hết.

$> time julia -e 'println("Hello")' 
Hello 

real 0m0.622s 
user 0m1.013s 
sys  0m0.624s 

Điều này hiện khả dụng trong bản dựng hàng đêm và sẽ được đưa vào bản phát hành 0.3 tiếp theo.

+0

'' 'thời gian julia -e 'println ("Hello")' Xin chào 1m35.137s thực dùng 0m0.328s sys 1m33.604s ' '' Và tôi đang trên julia 0.5.0 Và đây là một máy i3 lõi với RAM 16GiB và không phải là một mâm xôi pi! –

+0

Có vẻ như có sự cố với cài đặt julia của bạn. Os bạn đang sử dụng và làm thế nào bạn cài đặt julia – ivarne

+0

Tôi đang sử dụng ubuntu 16.04.1 LTS. Tôi đã cài đặt nó từ tệp ".tar.gz". –

7

Thật không may Julia hiện đang sử dụng rất nhiều thời gian để bắt đầu, vì vậy gần như không thể sử dụng nó trong tập lệnh bash cho các vấn đề thực sự nhỏ. Có thể bạn sẽ nhận được kết quả thích hợp hơn với một ví dụ phức tạp sử dụng vòng lặp để thực hiện nhiều thứ, nhưng với 2-4 giây bắt đầu, nó đòi hỏi một vấn đề lớn để có đủ thời gian bắt kịp. Nếu thời gian khởi động là quan trọng nhất đối với máy tính khoa học của bạn, Julia chưa sẵn sàng.

So sánh không công bằng như nhau là xem xét số hiệu máy tính bằng cách sử dụng công thức đệ quy ngu ngốc. Nó trở nên tồi tệ hơn nhiều nếu bạn đi trên 26. Ngoài ra, hãy chú ý đến phiên bản mã của Julia nhỏ gọn như thế nào.

>>> ivarne~/dev/julia$ time julia -e 'fib(x) = x<2?1:fib(x-1)+fib(x-2);println(fib(36))' 
24157817 

real 0m2.763s 
user 0m2.776s 
sys  0m0.093s 
>>> time python -c $'def fib(x):\n if x<2: return 1\n else: return fib(x-1)+ fib(x-2);\nprint fib(36)' 
24157817 

real 0m8.371s 
user 0m8.336s 
sys  0m0.025s 

Khi bạn yêu cầu cách tăng tốc độ sự cố; ở đây là:

>>> time echo "Hello" 
Hello 

real 0m0.000s 
user 0m0.000s 
sys  0m0.000s 
+0

Tôi không chắc chắn về việc so sánh được chứng minh là gì. Phiên bản Python là lỗi - hai phiên bản thậm chí không tính cùng một số!- và bạn có thể đã viết 'fib = lambda x: 1 nếu x <3 khác fib (x-1) + fib (x-2)' nếu bạn quan tâm đến độ chặt, mặc dù thường các lập trình viên Python quan tâm đến tính chính xác và rõ ràng hơn nhân vật. – DSM

+0

Tôi cố gắng cho thấy rằng khi bạn so sánh hiệu suất giữa Julia và Python, kết quả phụ thuộc rất nhiều vào công việc bạn thực hiện. – ivarne

+2

Tôi không cố gắng tìm ra tiếng vang hiệu quả nhất; -PI chỉ tự hỏi điều gì là hiện đại nhất trong việc giảm chi phí ở julia –