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
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
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