我可以为Mac OS X创建一个通用二进制文件,其中包含我的应用程序的两个版本,一个用SSE4.2编译,另一个用SSE3编译?
在这种情况下,我将使用SSE4.2编译的版本自动加载到支持SSE4.2的CPU。
如果不是,我想获得建议在不支持SSE4.2的旧CPU上运行我的应用程序,但在支持它的CPU上使用SSE4.2。
请注意,如果重要的话,我会定位到Mac AppStore。 我使用Clang和Xcode 4.5。
答案 0 :(得分:3)
Mac OS X使用的Mach-O格式不支持此格式。该格式允许使用不同体系结构的二进制文件。有一个子类型字段,但只有为不同代的处理器定义了值,而不是它们的能力。
有几种方法可以解决这个问题。一种方法是使用不同的函数名将SSE4.2和旧处理器的代码内置到同一个二进制文件中。您的代码将确定是否支持SSE4.2,然后调用正确的函数。
另一种选择是构建两个库,一个使用SSE4.2,一个不使用,并在应用程序包中发送它们,但不链接到它们。首次加载时,您的代码将确定是否支持SSE4.2,然后加载正确的库。
使用第一种方法,您不必担心加载库并连接所有函数,但是您将始终加载未执行的额外代码,并且您必须在每个函数之前检查变量。那些函数调用。使用第二种方法,您可以简单地调用函数而不必每次都检查任何内容,但是加载库并连接所有函数比简单地每次比较变量都要多。