【发布时间】:2025-12-05 00:40:01
【问题描述】:
我编写了一些在 Haswell i7 处理器上运行的 AVX2 代码。相同的代码库也用于非 Haswell 处理器,其中相同的代码应替换为其 SSE 等效项。我想知道编译器是否有办法忽略非 Haswell 处理器上的 AVX2 指令。我需要类似的东西:
public void useSSEorAVX(...){
IF (compiler directive detected AVX2)
AVX2 code (this part is ready)
ELSE
SSE code (this part is also ready)
}
}
现在我正在编译之前注释掉相关代码,但必须有一些更有效的方法来做到这一点。我正在使用 Ubuntu 和 gcc。感谢您的帮助。
【问题讨论】:
-
“函数”是指“cpu指令”吗?
-
如果您使用 gcc,您可能会对 target 属性感兴趣。
-
你可能严重高估了编译器的智能,运行在你的机器上,去猜测用户机器的样子。它当然永远不会是“编译器指令”。它必须是运行时测试,您的 CRT 将包装 CPUID 指令,告诉您处理器的真实外观。您没有留下任何面包屑,您使用的具体 CRT 很重要。