Khi cố gắng chọn phương pháp lập chỉ mục để đề xuất, tôi đã cố gắng để làm hài lòng hiệu suất. Tuy nhiên, các phép đo lẫn lộn tôi rất nhiều. Tôi đã chạy nhiều lần trong các đơn đặt hàng khác nhau, nhưng các phép đo vẫn nhất quán. Dưới đây là cách tôi đã đo hiệu suất:Hiệu suất tạo chỉ mục
for N = [10000 15000 100000 150000]
x = round(rand(N,1)*5)-2;
idx1 = x~=0;
idx2 = abs(x)>0;
tic
for t = 1:5000
idx1 = x~=0;
end
toc
tic
for t = 1:5000
idx2 = abs(x)>0;
end
toc
end
Và đây là kết quả:
Elapsed time is 0.203504 seconds.
Elapsed time is 0.230439 seconds.
Elapsed time is 0.319840 seconds.
Elapsed time is 0.352562 seconds.
Elapsed time is 2.118108 seconds. % This is the strange part
Elapsed time is 0.434818 seconds.
Elapsed time is 0.508882 seconds.
Elapsed time is 0.550144 seconds.
tôi đã kiểm tra và cho các giá trị khoảng 100000 này cũng xảy ra, ngay cả ở các phép đo 50000 lạ xảy ra.
Vì vậy, câu hỏi của tôi là: Có ai khác trải nghiệm điều này trong một phạm vi nhất định hay không và điều gì gây ra điều này? (Đó có phải là lỗi không?)
Vâng, tôi chắc chắn sẽ giả 'abs (x)> 0' sẽ chậm hơn vì nó thực sự đang làm 2 hoạt động, nhưng các thử nghiệm N 100000, không làm theo điều này. Lạ thật. Tuy nhiên tôi hầu như luôn luôn sử dụng 'x ~ = 0' vì nó chỉ thực hiện một thao tác. Cũng lưu ý, sự khác biệt giữa hai người không cao đối với tôi như nó dành cho bạn. Các thử nghiệm thứ ba chỉ là riêng biệt bởi 0,4 giây không 1,5 – MZimmerman6
suy nghĩ duy nhất của tôi sẽ có một số phân bổ bộ nhớ lạ xảy ra trong nền rằng các thử nghiệm 100k ném ra – MZimmerman6
Tôi thấy điều tương tự, nhưng không phải là quyết liệt (R2012b, OS X 10.8.4). Tôi sẽ không "giả định" rằng 'abs (x)> 0' thực hiện hai thao tác. Khi JIT được biên dịch, bit dấu có thể bị bỏ qua trong so sánh. Nó thực sự là trường hợp 'x ~ = 0' phức tạp hơn (tương đương với' x> 0 | x <0'). Một lý do có thể cho sự khác biệt giữa các kích thước có thể là [cache missing] (https://en.wikipedia.org/wiki/CPU_cache#Cache_miss), được thảo luận chi tiết [here] (http://stackoverflow.com/questions/8547778/tại sao-là-một-loop-so-nhiều-chậm-hơn-hai-vòng). – horchler