スキップしてメイン コンテンツに移動

投稿

ラベル(SIMD)が付いた投稿を表示しています

GCCでSSEを使ったプログラミング

先日、GCCでIntelのSSEを使う話が出たのでメモ。 MMX: mmintric.h SSE: xmmintric.h SSE2: emmintric.h SSE3: pmmintric.h SSSE3: tmmintric.h ついでにモトローラのAltiVecでは以下の通り。 AltiVec: altivec.h 上記をインクルードすればそれぞれで固有の命令が使える。何れにしろ、SIMDのプログラミングは面倒。因みに、PS3ではaltivec.hを利用してプログラミングしていくことになる。

gccからppu-gccに変更したらAltiVecを利用したSIMD演算でエラー

フィックススターズ の Cellプログラミングチュートリアル は初めてPS3でCellのプログラムを作るのには丁度良い内容と分量になっている。それほど難しいことは無く、基本を習得できるのだ。しかし、この記事を書いている時点では、最終更新日が2007年2月2日と、内容が若干古い。 PPE用のプログラムもすべてgccでコンパイルするようになっている。PPE用のプログラムはppu-gccを利用したほうがCell用に最適化してくれるので実行効率が良い。なので、gccでコンパイルされているところはすべてppu-gccにすればよいのだが、実はこのチュートリアルではそれではエラーが出てしまうのである。 たとえば、SIMDを使った 条件分岐の削除 にあるプログラムだが、これをppu-gccでコンパイルすると、 error: incompatible types in assignment と、エラーが出る。これは vpat = vec_cmpgt(va[i], vb[i]); に示すコードの返り値の型が一致していないことが原因である。なので、 vector unsigned int vpat; の部分を、 vector bool int vpat; のように変更する必要がある。 別のソースコードも似たようなエラーが起こるが、ほとんどが型の不一致が原因なので、宣言の型を変更したり、目的の型にキャストすればエラーは解消される。