__m128
Accelerateフレームワークを使用して2つの(float)変数を
add / mul/subする必要があります。しかし、それを行うための機能が見つかりません。すべてのAccelerateフレームワーク関数は、型ではint__vector__
なくfloat__vector__
型を取ります。除算する関数を見つけまし'vdivf'
たが、add / mul/subも必要です。Accelerateフレームワークを使用して
2つの(フロート)変数を追加/マルチ/サブする方法を教えてもらえますか?__m128
このようなもの:、、_mm_add_ps
ただし_mm_sub_ps
、_mm_mul_ps
AccelerateフレームワークAPIを使用します。
2 に答える
1
問題は、Accelerate が SSE2 組み込み関数を使用するよりも高レベルの API であることです。SSE 組み込み関数は、一度に 1 つのベクトルを操作する単一の命令にマップされます。Accelerate は、通常は妥当なサイズの配列を使用して、はるかに大きな粒度で動作する関数の高レベル API を提供します。既存のコードを移植するには、SSE 組み込み関数に固執する必要があります。PowerPC サポートが本当に必要な場合は、SSE コードを #idef し、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にはAPIがありません。
とはいえ、SSE組み込み関数(_mm_add_ps
など)を使用する既存のコードがあり、実際に「最小限のコード変更」を行おうとしている場合、なぜ何かを変更するのでしょうか。SSE組み込み関数は、OSXでも問題なく動作します。
于 2012-04-22T04:13:49.683 に答える