2011-12-13 27 views
7

Có bất kỳ khuyết điểm nào khi sử dụng scalacl plugin không?Hoạt động Scala với hiệu suất mảng (plugin scalacl)

Tôi đang lên kế hoạch sử dụng scala trong dự án của mình. Tôi đã viết một chút mã trong scala để xem thời gian thực hiện.

(1 to 1000000).map(1 + _).sum 

1. Không cắm

được biên dịch để một cái gì đó như thế này:

BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$)); 

và chạy trong khoảng 375 ms

2. Với plugin scalacl

int i = 1; 
int j = 1000000; 
int k = j; 
int m = i; 
for (VectorBuilder localVectorBuilder = new VectorBuilder(); m <= k;) { 
    int n = m; 
    localVectorBuilder.$plus$eq(BoxesRunTime.boxToInteger(1 + n)); 
    m += 1; 
} 
int a = BoxesRunTime.unboxToInt(localVectorBuilder.result().sum(Numeric.IntIsIntegral..MODULE$)); 

259 ms

+2

Cải thiện 30% không nhiều. Tôi đã tối ưu hóa một phần mã của tôi, hiện đang sử dụng các mảng và trong khi các vòng lặp, với tốc độ 100x. Scala thành ngữ có thể rất chậm. Ví dụ, nếu bạn thoát khỏi boxing, thì bạn sẽ nhận được một cái gì đó ấn tượng hơn. – ziggystar

+0

Btw, 'Range # sum' hiện được tối ưu hóa trong thân cây và chạy trong thời gian không đổi' O (n) 'thay vì tuyến tính' O (n) '. Cải tiến thuật toán là phần lớn thời gian thích hợp hơn. – soc

Trả lời

10

khuyết điểm có thể xảy ra tôi có thể nghĩ:

1) tối ưu hóa vòng lặp xuất hiện để làm việc và các nhà phát triển có vẻ rất có thẩm quyền, nhưng nó nói bằng chữ in đậm trong "Giới thiệu về ScalaCL" màn hình " ScalaCL không sẵn sàng cho sản xuất! "Nói cách khác, có một cơ hội nhỏ bạn có thể giới thiệu lỗi và sự bất ổn

2) Bạn cần phải nhớ biên dịch với plugin mỗi lần, nếu không bạn có thể đột nhiên thấy mình gặp vấn đề về hiệu suất. chắc chắn rằng plugin sẽ được duy trì/tương thích trong trung hạn hoặc dài hạn

3) Bạn có thể phụ thuộc vào sự tối ưu của nó, dẫn bạn viết mã không hiệu quả, trong khi xác định và tối ưu hóa tay các nút cổ chai có thể dẫn đến mã nhanh hơn Nói cách khác, nó có thể có hiệu lực "giấy trên các vết nứt"

4) Đó là một phụ thuộc thư viện phụ và thêm độ phức tạp cho tệp xây dựng của bạn

Bạn đã yêu cầu chống lại nhưng điều này khá nhỏ so với những ưu điểm của nó. Cá nhân tôi sẽ không ngần ngại về việc sử dụng vòng lặp tối ưu hóa cho các dự án cá nhân; Tôi đã thử chúng và thấy GPU của tôi chậm hơn một chút so với CPU của tôi - nó phụ thuộc vào phần cứng có sẵn), nhưng tôi nghĩ rằng dự án có một tương lai tuyệt vời, cho dù là của riêng mình hay được tích hợp vào trình biên dịch và thư viện chuẩn. Tôi đã nhìn thấy một số tăng tốc rất ấn tượng (lên đến 20x nhanh hơn) đối với một số mã.

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