- 如果某些程序使用例如 SSE 指令,它可以在不支持 SSE 的 CPU 上运行吗?
不会。但通常这通常会产生陷阱或异常,并且陷阱/中断处理程序可以在需要时对其进行处理。
例如,很久以前的软件通常包含 x87 的代码。如果有 x87 协处理器,该指令在硬件中可以正常运行,但如果计算机没有 x87 协处理器,则会产生一个陷阱,之后该指令将在软件中处理并正常返回结果。请参阅MS-DOS 中 x87 浮点仿真的协议是什么?
Hackintosh 的第一个版本也使用它在不支持该指令集的 CPU 上模拟 SSE2。当然,性能很糟糕,但它会运行。
- 如果不是,这是否意味着此类新指令的真正性能影响将在几年后大多数 CPU 将支持此类技术(因此不会有任何不兼容性)?
是的。但几年后,也许软件需要更新,对吧?对于关键性能软件,可能需要重写以利用新指令集。对于其他一些人来说,性能的提升可能并不明显
- 当我编译一个带有优化的 C++ 程序时,这是否意味着它将使用一些新指令?(我知道这取决于许多因素,尤其是代码,但我想要一些一般性的答案)或者它们主要是为用 asm 编写的程序保留的?
取决于您在编译时传递给它的编译器和选项。
现代编译器支持自动矢量化,因此它们会检测常见的习语并对其进行优化。您只需要重新编译以利用新的指令集。但是对于复杂的情况,您仍然需要使用 SIMD 内在函数进行手动优化
如果您使用外部库,当库更新以支持新指令集时,您将自动获得速度提升,即使您对程序不做任何事情