用于不同SSE版本的通用二进制文件

Ben*_*Uri 5 xcode sse universal-binary

我可以为Mac OS X创建一个通用二进制文件,它包含我的应用程序的两个版本,一个用SSE4.2编译,另一个用SSE3编译?

在这种情况下,我将使用SSE4.2编译的版本自动加载到支持SSE4.2的CPU.

如果不是,我想获得建议在不支持SSE4.2的旧CPU上运行我的应用程序,但在支持它的CPU上使用SSE4.2.

请注意,如果重要的话,我会定位到Mac AppStore.我使用Clang和Xcode 4.5.

ugh*_*fhw 3

Mac OS X 使用的 Mach-O 格式不支持此功能。该格式允许针对不同体系结构的二进制文件。有一个子类型字段,但只为不同代的处理器定义了值,而不是它们的能力。

有几种方法可以解决这个问题。一种方法是使用不同的函数名称将 SSE4.2 和旧处理器的代码内置到同一个二进制文件中。您的代码将确定是否支持 SSE4.2,然后调用正确的函数。

另一种选择是构建两个库,一个带有 SSE4.2,一个没有,并将它们都包含在您的应用程序包中,但不链接到它们。首次加载时,您的代码将确定是否支持 SSE4.2,然后加载正确的库。

使用第一种方法,您不必担心加载库和连接所有函数,但您总是会加载不会执行的额外代码,并且您必须在每个函数调用之前检查变量。使用第二种方法,您可以简单地调用函数,而无需每次都检查任何内容,但是加载库并连接所有函数比每次简单地比较变量需要更多工作。