2014-06-26 27 views
8

Nhiều ngôn ngữ máy tính khoa học tạo sự khác biệt giữa thời gian tuyệt đối (đồng hồ treo tường) và thời gian CPU (chu trình bộ xử lý). Ví dụ, trong Matlab ta có:Đo thời gian CPU đã trôi qua trong Julia

>> tic; pause(1); toc 
Elapsed time is 1.009068 seconds. 

>> start = cputime; pause(1); elapsed = cputime - start 
elapsed = 
     0 

và trong Mathematica ta có:

>>In[1]:= AbsoluteTiming[Pause[1]] 
>>Out[1]= {1.0010572, Null} 

>>In[2]:= Timing[Pause[1]] 
>>Out[2]= {0., Null} 

Sự khác biệt này rất hữu ích khi điểm chuẩn mã chạy trên các máy chủ tính toán, nơi có thể có sai cao trong thời gian tuyệt đối kết quả tùy thuộc vào những gì các quá trình khác đang chạy đồng thời.

Các Julia thư viện chuẩn cung cấp hỗ trợ cho thời gian của biểu thức thông qua tic(), toc(), @time và một vài chức năng khác/macro tất cả dựa trên time_ns(), một chức năng đo thời gian tuyệt đối.

>>julia> @time sleep(1) 
elapsed time: 1.017056895 seconds (135788 bytes allocated) 

Câu hỏi của tôi: Có cách nào đơn giản để có được thời gian CPU để đánh giá biểu thức ở Julia không?

(Side lưu ý:. Làm một số đào, dường như Julia thời gian được dựa trên uv_hrtime() chức năng từ libuv Dường như với tôi rằng việc sử dụng uv_getrusage từ cùng một thư viện có thể cung cấp một cách để truy cập vào thời gian CPU trôi qua trong Julia, nhưng Tôi không có chuyên gia nào cả.)

+0

Đây là một gợi ý tuyệt vời. Vui lòng gửi một vấn đề hoặc gửi email danh sách gửi thư (hoặc gửi yêu cầu kéo nếu bạn nhận được một cái gì đó hoạt động!) –

Trả lời

5

Tôi không thể tìm thấy bất kỳ giải pháp hiện có nào, vì vậy tôi đã kết hợp một gói với một số chức năng định thời CPU đơn giản tại đây: https://github.com/schmrlng/CPUTime.jl. Các gói phần mềm là hoàn toàn chưa được kiểm tra trên mã song song và có thể có lỗi khác, nhưng nếu ai khác muốn thử nó ra gọi

>> Pkg.clone("https://github.com/schmrlng/CPUTime.jl.git") 

từ julia> nhắc nên cài đặt gói.

9

Julia không có các lệnh tic()toc() mà làm việc giống như tictoc trong Matlab:

julia> tic(); 7^1000000000; toc() 
elapsed time: 0.046563597 seconds 
0.046563597 
Các vấn đề liên quan