tôi gặp phải vấn đề này trong khi làm bài tập về nhà từ Coursera "chuyên môn hóa scala" (điều này được đơn giản hóa phiên bản và không chứa bất kỳ thông tin chi tiết bài tập ở nhà, nó chỉ là mảng traversal)Scala mô hình phù hợp với hiệu suất
val chars: Array[Char] = some array
def fun1(idx:Int):Int = {
some code here (including the stop condition)
val c = chars(idx)
c match{
case '(' => fun1(idx+1)
case _ => fun1(idx+1)
}
}
Mã này là 4 lần chậm hơn so với
def fun2(idx: Int):Int = {
some code here (including the stop condition)
val c = chars(idx)
(c == '(') match{
case true => fun2(idx+1)
case _ => fun2(idx+1)
}
}
Tất cả tôi đang làm là thay đổi mô hình phù hợp với (tôi đang chạy nó bằng cách sử ScalMeter vì vậy tôi tin vào số liệu thống kê).
Có ai có thể giải thích hành vi này không?
Tôi nghi ngờ rằng đây là bất kỳ điều gì gần phương pháp đo điểm chuẩn hợp lệ. ScalaMeter không giống như vài chục warmups cho đến khi kết quả ổn định. Bạn thậm chí không kiểm tra bằng cách sử dụng cùng một dữ liệu. –
Đúng, không phải cùng một dữ liệu. Nhưng tôi nhận được kết quả khá gần giữa các lần chạy. Stddev cực kỳ thấp, điều này gợi ý rằng nếu tôi sử dụng cùng một dữ liệu, tôi sẽ không thấy nhiều sự khác biệt. Như đã đề cập trong câu trả lời, tôi cũng đã làm ấm lên, vì vậy không chắc chắn về điểm chuẩn này bạn thấy "không hợp lệ". Tôi đứng trước những phát hiện của tôi, và thách thức bạn bác bỏ chúng một cách dứt khoát (và tái tạo) nếu bạn có thể. – Dima
Vay các chức năng của bạn, đây là điểm chuẩn với scala meter: https://gist.github.com/lukaszwawrzyk/a2505d5b3083bb72de51b8445fbb9a76 Đưa ra 'thời gian char: 13.172258374999998 ms' và' bool time: 4.739404575 ms'. Nó được thực hiện cho mảng như trong câu hỏi, nếu sử dụng một kết quả seq được lập chỉ mục thực sự gần hơn nhưng không bằng nhau (95 giây so với 80 giây) –