【发布时间】:2015-03-23 20:02:36
【问题描述】:
似乎是一个简单的问题;我必须对两个数组进行按位与,如果任何两个位匹配,则返回 true,基本上:return ((dataArray & maskArray) != 0)。
当然,这不是合法的 C++。目前的解决方案类似于:
uint32_t dataArray[BIG_NUM] //Pretend it's initialized
uint32_t maskArray[BIG_NUM] //Pretend it's initialized
bool returnVal = false;
for(int i = 0; i < BIG_NUM; i++)
{
if((dataArray[i] & maskArray[i]) != 0)
{
returnVal = true;
break;
}
}
return returnVal;
虽然功能正常,但既不能并行也不能矢量化,因此很痛苦,10% 的 CPU 周期在此函数中被烧毁。关于如何清理它的任何想法?
编辑:意识到我不应该将底层成员 sizeof() 作为数组大小的一部分。
【问题讨论】:
-
你能缓存一个奇偶校验值或校验和作为大多数情况下的快速检查吗?
-
[BIG_NUM * sizeof(uint32_t)]这里在做什么? -
@milleniumbug,显然没有完全注意我输入的内容;谢谢你的收获。
-
您使用的是 64 位计算机吗?如果是这样,并且如果可能,编译为使用 64 位整数。这将使您的吞吐量翻倍。
-
@MustafaOzturk,我希望我是,但也许在未来。我想我可以将类型转换为 size_t 数组,然后如果发生迁移,该函数将很好地重新编译。
标签: c++ optimization c++03