以下是显示支持的指令集的类的示例。 https://msdn.microsoft.com/en-us/library/hskdteyh.aspx
我想编写单个函数的三个不同实现,每个函数使用不同的指令集。但是由于flag / ARCH:AVX2,这个应用程序不会在第四代+英特尔处理器上运行,所以整个检查点毫无意义。
所以,问题是:这个标志的完全是什么?使用提供的指令集启用支持或启用编译器优化?
换句话说,我可以完全删除这个标志并继续使用immintrin.h,emmintrin.h等函数吗?
答案 0 :(得分:1)
使用选项/ ARCH:AVX2允许以最佳方式使用YMM寄存器和CPU的AVX2指令。但如果CPU不支持这些指令,那将是一个程序崩溃。如果你使用AVX2指令和编译器标志/ ARCH:SSE2将会降低性能(约2倍)。
这是使用相应的编译器选项(/ ARCH:AVX2,/ ARCH:SSE2等)编译函数的每个实现时的最佳实现。最简单的方法 - 将您的实现(标量,SSE,AVX)放在不同的文件中,并使用特定的编译器选项编译每个文件。
如果您创建一个单独的文件,您可以检查CPU能力并调用相应的函数实现,这也是一个好主意。