如果我们在一个内部循环中将一个数除以除法,那么添加特殊情况处理以消除该除法是否明智:
之前:
int collapseFactorDepth...
for (int i = 0; i < numPixels; i++)
{
pDataTarget[i] += pPixelData[i] / collapseFactorDepth;
}
后:
if (collapseFactorDepth != 1)
{
for (int i = 0; i < numPixels; i++)
{
pDataTarget[i] += pPixelData[i] / collapseFactorDepth;
}
}
else
{
for (int i = 0; i < numPixels; i++)
{
pDataTarget[i] += pPixelData[i];
}
}
编译器可以自行推理吗?现代CPU是否包含任何优化方法?
如果您认为附加代码相对于性能提升(是否有任何优势)有利,我尤其感兴趣。
背景:
Numpixels大
crashFactorDepth是90%的时间1
现代CPU:Intel x86 / amd64架构
请不要考虑更广泛的事情。优化了加载的内存开销。
让我们汗流that背,无论如何我们都应该将其作为双倍乘法进行。
最佳答案
通常,答案是“否”。当探查器告诉您有问题时,请先编写清晰的代码,然后对其进行优化。
回答此特定优化是否对特定热点有帮助的唯一方法是:“对其进行测量并查看”。
除非collapseFactorDepth
几乎始终为1,或者numPixels
很大(至少数千甚至更多),否则我不希望优化会有所帮助(分支机构很昂贵)。
使用SSE或类似的SIMD指令,您更有可能受益。