使用AVX CPU指令:没有“ / arch:AVX”的情况下性能较差]]

问题描述 投票:49回答:2

我的C ++代码使用SSE,现在我想对其进行改进以支持AVX。因此,我检测到AVX何时可用,并调用使用AVX命令的函数。我使用Win7 SP1 + VS2010 SP1和带有AVX的CPU。

要使用AVX,必须包括以下内容:

#include "immintrin.h"

然后您可以使用内在AVX函数,例如_mm256_mul_ps_mm256_add_ps等。问题在于,默认情况下,VS2010生成的代码运行缓慢,并显示警告:

警告C4752:找到英特尔(R)高级矢量扩展;考虑使用/ arch:AVX

似乎VS2010实际上并不使用AVX指令,而是模拟它们。我在编译器选项中添加了/arch:AVX,并获得了良好的结果。但是此选项告诉编译器尽可能在任何地方使用AVX命令。因此,我的代码可能在不支持AVX的CPU上崩溃!

所以问题是如何使VS2010编译器生成AVX代码,但仅当我直接指定AVX内部函数时才如此。对于SSE来说,它可以工作,我只使用SSE内在函数,它可以生成SSE代码,而无需任何编译器选项,例如/arch:SSE。但是对于AVX,由于某些原因它无法正常工作。

我的C ++代码使用SSE,现在我想对其进行改进以支持AVX。因此,我检测到AVX何时可用,并调用使用AVX命令的函数。我使用Win7 SP1 + VS2010 SP1和一个...

c++ performance visual-studio-2010 sse avx
2个回答
81
投票

您看到的行为是昂贵的状态切换的结果。


20
投票

tl; dr

© www.soinside.com 2019 - 2024. All rights reserved.