【发布时间】:2012-03-15 19:44:16
【问题描述】:
美好的一天。
我想就处理展开的循环剩余部分的技巧寻求贡献,但需要注意的是循环相当小,是展开因子的 1-3 倍,例如:
EG。给定 B 的展开因子
int i = 0;
for (; i < N-N%B; i += B) {
...
}
// remainder
for (; i < N; ++i) {
...
}
如果 B 为 2,我可以执行以下操作:
// remainder
if (N%2) {
....
}
但是有什么好办法处理B>2
【问题讨论】:
-
很难理解为什么需要一个技巧,你循环 N / B 次,余数是 N % B。你通常把这个留给代码生成器,它已经知道如何展开循环。
-
嗯,总是有 Duff's device 但你的代码没有问题。
-
用 C 或任何语言?在某些汇编语言中,谓词指令可以很好地解决这个问题。
-
@Mike 我在想一些类似的事情。循环很短,因此余数的开销很大。
-
@harold C 是首选,但你可以举一些组装的例子吗?