使用 SSE2 编译一个源代码是否安全?
Is it safe to compile one source with SSE2 another with AVX architecture?
我正在使用 AVX 内在函数,但由于除了基于 _mm256 的内在函数之外,MSVC 生成的所有指令都不会产生麻烦,因此我需要使用 /arch:AVX 编译整个源代码。该项目的其余部分是使用 /arch:SSE2 编译的,因此它可以在较旧的 CPU 上运行,我正在手动检查 AVX 是否可用。
包含 AVX 代码的源代码(为 AVX 编译)包括一个巨大的模板库和其他东西,只是为了有定义。 compiler/linker 是否有可能决定使用 AVX 指令实例化某些模板,只是因为它也已包含在此源中?在那种情况下,它会使其在非 AVX 处理器上崩溃
Is there a possibility that the compiler/linker decides to instantiate
some template with AVX instructions, just because it has been included
in this source as well?
是的,这可能会发生,正如我在 中看到的那样。查看那里给出的(其他)好的答案。
我首选的解决方法是修改模板以包含一个判别参数,但如果它真的是 "huge library",这可能会很麻烦,就像您在自己的回答中提到的那样使用全局定义.
我正在使用 AVX 内在函数,但由于除了基于 _mm256 的内在函数之外,MSVC 生成的所有指令都不会产生麻烦,因此我需要使用 /arch:AVX 编译整个源代码。该项目的其余部分是使用 /arch:SSE2 编译的,因此它可以在较旧的 CPU 上运行,我正在手动检查 AVX 是否可用。
包含 AVX 代码的源代码(为 AVX 编译)包括一个巨大的模板库和其他东西,只是为了有定义。 compiler/linker 是否有可能决定使用 AVX 指令实例化某些模板,只是因为它也已包含在此源中?在那种情况下,它会使其在非 AVX 处理器上崩溃
Is there a possibility that the compiler/linker decides to instantiate some template with AVX instructions, just because it has been included in this source as well?
是的,这可能会发生,正如我在
我首选的解决方法是修改模板以包含一个判别参数,但如果它真的是 "huge library",这可能会很麻烦,就像您在自己的回答中提到的那样使用全局定义.