【发布时间】:2016-10-29 18:28:15
【问题描述】:
我正在对 SandyBridge 处理器 (i7-3820) 上的一组应用程序进行基准测试。 基准测试由两个不同的版本组成。 这两个版本包含相同的代码,唯一的区别是第一个版本使用 sse/sse2 instrinsics,第二个版本使用 avx instrinsics。
为了编译基准,我使用的是 Visual Studio 2015。
在 x64 或 x86 上使用 sse instrinsics 编译版本,执行时间几乎相同。但是使用 avx instrinsisc 为 x64 编译基准测试,执行时间是最差的(几乎是两倍)与 avx instrinsisc 和为 x86 编译的基准相比。此外,与 sse instrinsics 的基准相比,使用 x86 编译的 avx benchmark 的执行时间仅成功了一小部分(x8%)。
最后,我在 Ivy Bridge 处理器 (i7-3770) 上测试了上述配置,并且 avx instrincis 的 x64 和 x86 之间的执行时间是相同的。但是 avx 内在函数对 sse 没有任何改进。
对于为 x64 编译的 Sandy Bridge 上的 avx instrinsics 性能不佳,有什么解释吗?
为什么这两种架构没有显示 avx 指令相对于 sse 指令的任何加速?
此外,我尝试了从 arch:AVX 到 /arch:SSE2 的不同编译切换,反之亦然,但在执行时没有任何改变。但如果我是对的,Visual Studio 中的“启用增强指令集”属性只会影响矢量化。
提前致谢。
【问题讨论】:
-
您也可以发布代码吗?
-
这真的取决于您使用的 AVX 指令 - 有些指令与 SSE 等效指令相比没有任何好处。但是,如果没有看到您的代码,我们只能猜测,这不是很有建设性。请发布相关代码,最好是minimal reproducible example。
-
/arch:AVX不仅仅影响矢量化,它还允许使用 vex 编码指令,即如果您尝试使用没有/arch:AVX的 AVX 内部函数,它将无法工作。 -
s/instrinsics/intrinsics/g
标签: visual-studio-2015 sse simd avx