2010-12-29 4 views
0

_mm_store_ps,_mm_add_psなどの__関数を克服する簡単な同等のCコードは何ですか?等価なCコードを使用して関数を指定してください。_mm_タイプ関数の等価Cコード

なぜこれらの機能が使用されていますか?

+2

あなたは目的を知らない同等の機能のCコードが必要ですか? – Simone

+0

私はこれらが16バイトのメモリアライメントに使用されていると思います。bt hwはこれらが私が知らないallignedです。 – kamakshi

+0

MSDNによると: '_mm_add_ps':* 4つの単精度浮動小数点値*と' _mm_store_ps'を追加します:* 4つの単精度浮動小数点値*を格納します。あなたの推測は正しくありません。 – Simone

答えて

0

MSDNは、

void _mm_store_ps(float *p, __m128 a); 

戻り最初の関数のための擬似コードを示しています。あなたが解決しようとしているように聞こえる以前同様の質問に基づいて

p[0] := a0 
p[1] := a1 
p[2] := a2 
p[3] := a3 

http://msdn.microsoft.com/en-us/library/s3h4ay6y(v=vs.80).aspx

+0

私は、プロセッサレジスタで動作するので、 "単純なCコード"でその関数を変換する方法がないことを指摘しなければならないと思います。 – Simone

+0

は、Linuxにも対応したこれらの関数ですか? – kamakshi

+0

@kamakshiコンパイラ組み込み関数は、使用しているLinuxコンパイラがあれば、同等のものを探す必要があります。 –

5

を間違った問題。誤って整列されたデータを16バイトの整列されたデータを必要とするSSEルーチンに渡しているため、クラッシュする顔検出用の既存のSSEコードがあります。以前の質問では、人々はこの不整合を解決する方法を教えてくれました(Windowsでは_mm_malloc、Linuxではmemalign/posix_memalignを使用します)。しかし、あなたはこのアドバイスを無視しているようですが、代わりにあなたが誤ってすべてのSSEコード。 SSEが何であるか、SSEコードがどのように機能するのか、なぜ16バイトのアライメントが必要なのか、そしてこれを達成する方法を理解するために、時間をかけてください。既存のSSEコードは、データの不整列問題を修正する限り、WindowsまたはLinuxのいずれかで正常に動作するはずです。これは、実行していることを理解すれば比較的簡単な作業です。

+0

私はposix_memalignを使いましたが、どうすればその16バイトが割り振られていることを確認できますか? – kamakshi

+0

'posix_memalign'のmanページを読んでください:http://linux.die.net/man/3/posix_memalign - 16バイトのアライメントされたメモリを得るためには、2番目のパラメータ(整列)として16を渡すだけです。 –

関連する問題