0


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

谁能告诉我,如何__m128使用 Accelerate 框架添加/mul/sub 两个(浮点)变量?像这样的东西:_mm_add_ps, _mm_sub_ps_mm_mul_ps但使用 Accelerate 框架 API。

4

2 回答 2

1

问题是 Accelerate 是比使用 SSE2 内在函数更高级别的 API。SSE 内在函数映射到一次对一个向量进行操作的单个指令。Accelerate 提供了更高级别的函数 API,这些函数以更大的粒度运行,通常具有合理大小的数组。要移植现有代码,您应该坚持使用 SSE 内在函数,如果您确实需要 PowerPC 支持,那么您需要 #idef SSE 代码并为 ppc 构建编写等效的 AltiVec 实现。不过,我怀疑这是否值得付出努力——Apple 大约在 7 年前停止销售 PowerPC Mac,所以现在 PowerPC 应用程序的市场一定非常小。

于 2012-04-21T07:49:35.987 回答
-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 上也能正常工作。

于 2012-04-22T04:13:49.683 回答