通过Accelerate框架添加两个__m128类型

时间:2012-04-20 16:44:02

标签: sse2 accelerate-framework


我需要使用Accelerate框架添加/ mul / sub两个__m128(浮点)变量。但是,我找不到这样做的功能。所有Accelerate框架函数都采用int__vector__类型而不是float__vector__类型。我找到了分割'vdivf'的功能,但我也需要添加/ mul / sub。

谁能告诉我,如何使用Accelerate框架添加/ mul / sub两个__m128(浮点)变量?这样的事情:_mm_add_ps_mm_sub_ps_mm_mul_ps,但使用的是Accelerate框架API。

2 个答案:

答案 0 :(得分:1)

问题在于Accelerate是一种比使用SSE2内在函数更高级别的API。 SSE内在函数映射到单个指令,它一次在一个向量上运行。 Accelerate提供更高级别的API函数,这些函数以更大的粒度运行,通常使用合理大小的数组。要移植现有代码,您应该坚持使用SSE内在函数,如果您确实需要PowerPC支持,那么您需要#idef SSE代码并为ppc构建编写等效的AltiVec实现。我怀疑这是否值得努力 - 苹果公司7年前就停止销售PowerPC Macs,因此PowerPC应用程序的市场目前必须非常小。

答案 1 :(得分:-1)

您不需要基本算术的API:

__m128 x, y;
__m128 z = x + y;
__m128 w = x - y;
__m128 t = x * y;

这些操作完全没有API,因此Accelerate没有。

也就是说,如果你有现有代码使用SSE内在函数(_mm_add_ps等),并且你真的想做“最小代码更改”,你为什么要改变任何东西? SSE内在函数在OS X上也可以正常工作。