2007年6月15日金曜日

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;

のように変更する必要がある。

別のソースコードも似たようなエラーが起こるが、ほとんどが型の不一致が原因なので、宣言の型を変更したり、目的の型にキャストすればエラーは解消される。

0 コメント: