Re: [問題] 拆迴圈+效能測試
※ 引述《s3748679 (冷羽翼塵)》之銘言:
: → s3748679:@@a 因為這邊把迴圈拆了連i++和往回跳的動作都省啦~所以 10/13 20:49
: → s3748679:才會覺得在相同條件下會比較快就是了 10/13 20:49
很合理的猜測
但你得要思考一下迴圈內做的事情
那就是從記憶體內讀取資料,然後存到另一塊記憶體內
除了 i++ 以及判斷迴圈成立條件之外沒有做任何事
所以其實最花時間的是記憶體搬移這件事
根據 Intel 的 Optimization Reference Manual
目前最主流的 Sandy Bridge 架構其 L1 cache latency 至少為 4 cycle
這遠大於 i++ 所需要花的時間
另一方面固定次數的 for 迴圈對 branch prediction 來說準確率非常高
因此迴圈的 branch 形成的額外成本並不高
反觀把迴圈拆開的版本
儘管少了 i++ 和 branch
但它的 code size 卻大幅成長
導致更多次的 instruction cache miss
迴圈內的工作已經是 memory intensive 而你還讓它雪上加霜 XD
再次得到算盤本是好物的結論
--
※ 發信站 :批踢踢實業坊(ptt.cc)
◆ From: 118.168.56.96
推
10/13 23:15, , 1F
10/13 23:15, 1F
推
10/13 23:27, , 2F
10/13 23:27, 2F
→
10/13 23:28, , 3F
10/13 23:28, 3F
→
10/13 23:28, , 4F
10/13 23:28, 4F
→
10/13 23:28, , 5F
10/13 23:28, 5F
→
10/13 23:30, , 6F
10/13 23:30, 6F
推
10/13 23:57, , 7F
10/13 23:57, 7F
推
10/14 01:38, , 8F
10/14 01:38, 8F
推
10/14 07:36, , 9F
10/14 07:36, 9F
推
10/14 07:40, , 10F
10/14 07:40, 10F
→
10/14 07:42, , 11F
10/14 07:42, 11F
→
10/14 07:43, , 12F
10/14 07:43, 12F
→
10/14 07:44, , 13F
10/14 07:44, 13F
→
10/14 07:46, , 14F
10/14 07:46, 14F
推
10/14 20:01, , 15F
10/14 20:01, 15F
推
10/14 20:19, , 16F
10/14 20:19, 16F
→
10/14 20:20, , 17F
10/14 20:20, 17F
→
10/14 21:04, , 18F
10/14 21:04, 18F
→
10/14 21:04, , 19F
10/14 21:04, 19F
→
10/14 21:05, , 20F
10/14 21:05, 20F
推
10/15 01:34, , 21F
10/15 01:34, 21F
→
10/15 01:35, , 22F
10/15 01:35, 22F
→
10/15 02:01, , 23F
10/15 02:01, 23F
討論串 (同標題文章)