奇怪的SSE输出

时间:2018-01-30 10:14:23

标签: c performance sse simd auto-vectorization

从过去的一周开始,我正在研究SSE指令和自动矢量化。我有用C编写的代码,其中包含长时间运行的循环,在非常大的图像上执行插值。下面是骨架代码。

void Interpolate()
{
    for (unsigned int y = 0; y < dstRegionHeight; ++y)
    {
        //Some code to access pixel from bitmap structure. 
        for (unsigned int x = 0; x < dstRegionWidth; ++x)
        {
            //Some code to access pixel from bitmap structure.
            for (register unsigned int i = 0; i < 4; ++i)
            {
                //Interpolation arithmetic
            }
        }
    }
}

我编写了上面的代码,以便VS 2015成功自动矢量化,但我在矢量化后没有得到任何性能差异。 (由于上述代码的内存访问模式和较少的算术,这是预期的。) 我创建了上面代码的3组编译副本,并测试了相同数据的执行速度。以下是结果。

1)没有矢量化且没有SSE开关的测试代码==&gt;速度是1X 2)没有使用/Arch:SSE2编译矢量化==&gt;速度是10X 3)成功自动向量化所有代码并/Arch:SSE2 ==&gt;速度为10.5X

第二个副本只是通过启用SSE2指令集进行编译,代码根本无法进行矢量化。 仅使用SSE2交换机,性能如何提高10倍?没有任何矢量化

注意:我在Intel I3上用4 GB ram和windows 7 32位OS进行了测试,我还在64位窗口上测试了代码,结果很相似。

0 个答案:

没有答案