首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSVC /arch:[指令集]- SSE3,AVX,AVX2

MSVC /arch:[指令集]- SSE3,AVX,AVX2
EN

Stack Overflow用户
提问于 2016-09-14 06:59:29
回答 1查看 2.8K关注 0票数 1

下面是一个类的示例,它显示了支持的指令集。https://msdn.microsoft.com/en-us/library/hskdteyh.aspx

我想编写一个函数的三个不同的实现,每个实现使用不同的指令集。但是由于标记/ARCH:AVX2,这个应用程序不会在任何地方运行,而是在4th+一代的英特尔处理器上运行,所以检查的全部意义都是没有意义的。

所以,问题是:这个旗子到底是做什么的?使用提供的指令集启用支持或启用编译器优化

换句话说,我能否完全删除此标志并继续使用immintrin.h、emmintrin.h等的函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-14 10:58:28

/ARCH:AVX2选项的使用允许以最佳方式使用CPU的YMM寄存器和AVX2指令。但是,如果CPU不支持这些指令,就会导致程序崩溃。如果使用AVX2指令和编译器标志/ARCH:SSE2,则性能会下降(大约2倍)。

因此,当您的函数的每个实现都使用相应的编译器选项(/ARCH:AVX2、/ARCH:SSE2等)编译时,最好的实现。最简单的方法--将您的实现(标量、SSE、AVX)放在不同的文件中,并使用特定的编译器选项编译每个文件。

此外,如果您创建一个单独的文件,您可以检查CPU能力并调用相应的函数实现,这将是一个好主意。

有一个图书馆的例子,它执行CPU 正在检查呼叫 (一种已实现的功能)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39484264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档