2014-11-20 13 views
5

tôi sao chép mã từ:Clojure Transients Ví dụ - Không đáng kể tăng tốc

http://clojure.org/transients

nhưng kết quả của tôi khác signifiantly từ những gì đã được đăng.

(defn vrange [n] 
    (loop [i 0 v []] 
    (if (< i n) 
     (recur (inc i) (conj v i)) 
     v))) 

(defn vrange2 [n] 
    (loop [i 0 v (transient [])] 
    (if (< i n) 
     (recur (inc i) (conj! v i)) 
     (persistent! v)))) 



(quick-bench (def v (vrange 1000000))) 
"Elapsed time: 459.59 msecs" 

(quick-bench (def v2 (vrange2 1000000))) 
"Elapsed time: 379.85 msecs" 

Tốc độ tăng nhẹ nhưng không có gì giống như tăng 8x được ngụ ý trong tài liệu ví dụ?

Bắt đầu từ java trong chế độ máy chủ thay đổi câu chuyện, nhưng vẫn không có gì giống như các tài liệu ..

(quick-bench (def v (vrange 1000000))) 
"Elapsed time: 121.14 msecs" 

(quick-bench (def v2 (vrange2 1000000))) 
"Elapsed time: 75.15 msecs" 

Là nó mà việc triển khai kéo dài đã được cải thiện kể từ khi bài về transients đây: http://clojure.org/transients?

Yếu tố nào khác có thể góp phần vào việc không tăng cường với chuyển tiếp?

Tôi đang sử dụng phiên bản java OpenJDK 1.7 trên ubuntu 12.04. Có lẽ đó là chậm hơn rất nhiều so với (được cho là) ​​Hotspot 1.6 phiên bản được sử dụng trong các tài liệu? Nhưng không phải điều đó hàm ý BOTH sẽ chậm hơn một chút, với khoảng cách tương tự?

Trả lời

1

Kết quả của bạn phù hợp với trải nghiệm của tôi với chuyển tiếp. Tôi đã sử dụng chúng khá một chút và tôi thường thấy một cải tiến hiệu suất 2x.

Tôi đã thử trên Ubuntu 12.04, OpenJDK 1.7 với Clojure 1.6.0 và 1.7.0-alpha3. Tôi nhận được 2x hiệu suất với transients, hơi ít hơn 3x tôi nhận được trên OSX với 1.8 Oracle jvm.

Ngoài ra trang ở trên là từ thời điểm Clojure 1.2 và hiệu suất của các bộ sưu tập đã được cải thiện đáng kể kể từ đó. Tôi đã thử nghiệm với 1,2 nhưng Criterium không làm việc với nó, vì vậy tôi đã phải sử dụng thời gian giống như trên trang đó. Rõ ràng kết quả là biến đáng kể (từ 2x đến 8x). Tôi nghi ngờ ví dụ trong tài liệu có thể đã được chọn lựa.

+0

Cảm ơn Diego. Đây là những gì tôi hy vọng * là lý do. Nói cách khác, nó không phải là transients chậm hơn so với báo cáo trong tài liệu, đó là các bộ sưu tập liên tục nhanh hơn. – Scott

Các vấn đề liên quan