我如何优化算法和条件在这个for循环
How can I optimize the arithmetic and conditionals in this for loop?
for (int i = 0; i < someValue; i += 4) {
__m64 mmxValue;
if (i + 3 < someValue) {
mmxValue = _mm_set_pi16(_buffer[i], _buffer[i + 1], _buffer[i + 2], _buffer[i + 3]);
// add and use result
} else if (i + 2 < someValue) {
mmxValue = _mm_set_pi16(_buffer[i], _buffer[i + 1], _buffer[i + 2], 0);
// add and use result
} else if (i + 1 < someValue) {
mmxValue = _mm_set_pi16(_buffer[i], _buffer[i + 1], 0, 0);
// add and use result
} else {
mmxValue = _mm_set_pi16(_buffer[i], 0, 0, 0);
// add and use result
}
}
我试图用最多4个16位带符号的值设置mmxValue,然后我将在每个条件中用于添加。
我想知道是否有可能以更优的方式使用更少的条件(或根本没有)重写这个。
条件存在,因为对于i>= someValue的值,_buffer的索引超出了范围
更快的循环将移动4,直到到达最后一个块
int i = 0;
while (i <= somevalue-4) {
mmxValue = _mm_set_pi16(_buffer[i],
_buffer[i+1],
_buffer[i+2],
_buffer[i+3]);
... use the the result ...
i += 4;
}
... handle only last block with conditionals ...
当然,如果可能的话,更好的方法是扩大_buffer
变量,以便为填充所需的额外零提供空间。
相关文章:
- 如何在for循环中包含两个索引值的测试条件
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 在循环条件 i<sqrtN(预先计算)和 i*i<N 中,C++哪个更有效?
- 尽管条件为真,循环仍停止
- 为什么我不能在 for 循环中出现这样的条件?(C++)
- C++ 即使不满足条件,循环也会终止
- 具有迭代器和自定义步长的循环结束条件
- 有没有办法在循环中的条件至少满足一次时运行语句?
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 虽然循环即使应用了错误条件也不会退出
- 当循环在条件C++之前停止工作时
- Leetcode C++用于循环条件
- 当满足条件时,While循环未结束
- 对于检查 >=0 终止条件时的循环索引类型
- 调用以条件循环(c++)
- 使用布尔条件c++循环时无法退出
- 在条件C++循环语句中向SQLite3表中插入条目