Re: [心得] Loop unrolling, Duff's device
※ 引述《FRAXIS (喔喔)》之銘言:
: 不過Duff's device的技巧就是可以把這兩個迴圈融合在一起。
: i = 0;
: switch ( n % 5 ) {
: case 0: do {sum += a[ i++ ];
: case 1: sum += a[ i++ ];
: case 2: sum += a[ i++ ];
: case 3: sum += a[ i++ ];
: case 4: sum += a[ i++ ];
: } while ((n -= 5) > 0);
: }
假設 n = 6,則 n % 5 是 1
所以第一次 loop 會加 a[0]~a[3] 4 個數 (case 1 ~ case 4)
第二次 loop 又加了 a[4]~a[8] 5 個數
這樣總共就加了 a[0]~a[8] 9 個數了
所以 case 那裡應該要反過來排才是對的
switch ( n % 5 ) {
case 0: do {sum += a[ i++ ];
case 4: sum += a[ i++ ];
case 3: sum += a[ i++ ];
case 2: sum += a[ i++ ];
case 1: sum += a[ i++ ];
} while ((n -= 5) > 0);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.49
※ 編輯: HuangTzHuan 來自: 140.112.30.49 (06/29 00:43)
推
06/29 00:49, , 1F
06/29 00:49, 1F
推
06/29 07:59, , 2F
06/29 07:59, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):