2012-04-20 9 views
0


Accelerateフレームワークを使用して/ mul/sub 2つの__m128(float)変数を追加する必要があります。しかし、私はそれを行う機能を見つけることができません。すべてのAccelerateフレームワーク関数は、float__vector__タイプの代わりにタイプを使用します。私は'vdivf'を分割する機能を見つけましたが、/ mul/subも追加する必要があります。

Accelerateフレームワークを使用して/ mul/sub 2つの__m128(float)変数を追加する方法を教えてもらえますか?このようなもの:_mm_add_ps_mm_sub_ps_mm_mul_psを使用しますが、AccelerateフレームワークAPIを使用します。Accelerateフレームワークを使用して2つの__m128タイプを追加する

+0

あなたはなぜこのためにAccelerate Frameworkを使用する必要があると思いますか?組み込み関数を直接使用するのはなぜですか? –

+0

私は、AppleがMMX、SSEなどを使用するためのAPIを提供する場合、このAPIを使用する方が良いと思います。私はPPCとIntelのプロセッサフ​​ァミリをサポートする必要があります、AccelerateフレームワークはCPUコマンドのサポートを自動的に処理されます。また、将来的に何かが変更される場合は、Accelerateフレームワークを使用して変更を少なくする必要があります。 – Lexandr

+0

OKですが、単一ベクトルに対してのみAccelerate関数を呼び出すことは望ましくありません。これは、無駄に非効率で無意味になります。そうでなければ、関数呼び出しのオーバーヘッドによってSIMDの使用がなくなります。 –

答えて

-1

あなたは基本的な算術演算のためのAPIを必要としません:

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

APIは、これらの操作には全く不要であるので、いずれかを持っていません加速するでしょう。

SSE組み込み関数(_mm_add_psなど)を使用する既存のコードを使用していて、実際に「最小コード変更」を試みているとしたら、何も変更していないのですか? SSEの組み込み関数は、OS Xでもうまく動作します。

+0

"基本的な算術演算にAPIは必要ありません"とはどういう意味ですか?この操作は自動的にSSE命令を使用するでしょうか? – Lexandr

+0

@ Lexandr:はい、そうです。しかし、私が指摘したように、すでに組み込み関数を使用している作業コードを持っていれば、*変更しないでください。 –

1

問題は、AccelerateがSSE2組み込み関数を使用するよりも上位レベルのAPIであることです。 SSE組み込み関数は、一度に1つのベクトルで動作する命令の命令にマップされます。 Accelerateは、通常は妥当なサイズの配列を使用して、はるかに大きな粒度で動作する関数のより高いレベルのAPIを提供します。既存のコードを移植するには、SSE組み込み関数を使用するだけです.PowerPCサポートが本当に必要な場合は、SSEコードを#idefし、ppcビルド用の同等のAltiVec実装を記述する必要があります。私はこれが努力の価値があるとは思っていませんが、Appleは7年ほど前にPowerPC Macを販売しなくなったので、PowerPCアプリケーションの市場は今のところ非常に小さくなければなりません。

関連する問題