gpt4 book ai didi

c++ - 编译器优化导致性能下降

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:03 26 4
gpt4 key购买 nike

我有一个奇怪的问题。我有以下代码:

template<clss index, class policy>
inline int CBase<index,policy>::func(const A& test_in, int* srcPtr ,int* dstPtr)
{
int width = test_in.width();
int height = test_in.height();

double d = 0.0; //here is the problem
for(int y = 0; y < height; y++)
{

//Pointer initializations

//multiplication involving y
//ex: int z = someBigNumber*y + someOtherBigNumber;
for(int x = 0; x < width; x++)
{
//multiplication involving x
//ex: int z = someBigNumber*x + someOtherBigNumber;
if(soemCondition)
{
// floating point calculations
}
*dstPtr++ = array[*srcPtr++];
}
}
}

内部循环执行了将近 200,000 次,整个函数需要 100 毫秒才能完成。 (使用 AQTimer 分析)

我在外循环外发现了一个未使用的变量 double d = 0.0; 并将其删除。进行此更改后,该方法突然需要 500 毫秒来执行相同的执行次数。 (慢 5 倍)。

此行为可在具有不同处理器类型的不同机器上重现。(Core2,双核处理器)。

我正在使用优化级别为 O2 的 VC6 编译器。以下是使用的其他编译器选项:

 -MD -O2 -Z7 -GR -GX -G5 -X -GF -EHa

我怀疑编译器优化并删除了编译器优化/O2。该功能正常后,与旧代码一样需要 100 毫秒。

谁能解释一下这种奇怪的行为?

为什么在删除未使用的变量时编译器优化会降低性能?

注意:汇编代码(更改前后)看起来是一样的。

最佳答案

如果汇编代码在更改前后看起来相同,则该错误与您对函数计时的方式有某种关联。

关于c++ - 编译器优化导致性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com