我需要使用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。
答案 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上也可以正常工作。