Nanashi-softプログラマ専用Windows gcc SDL


◇PS3 Linux SDLでプログラミング -SIMDを使う-

○SIMD(シムド)とは?

データを一度にまとめて CPUに処理させる方法の事です

例えば、int型の変数4コに +1する場合
・1つずつ変数を +1する
・4ついっぺんに変数を +1する
の違いです

当然ロジックそのものを変更する必要があり、SIMDを使えば高速化するのはわかっていてもなかなか使えないものです

○CellプロセッサのSIMD

SIMDの実装は CPUによって異なります

Cellプロセッサには、2種類の SIMDが実装されています
PPEに VMX
SPEに SPU SIMD

複雑な上に2種類あるので、かなりプログラミングが難しい部類の CPUです
ただ、マクロ命令の頭が VMXは vec_,SPEは spu_の違いだけでほぼ同じ命令が使えるように、コンパイラ努力はされています

○四則演算

様々な命令があるのですが、難しくて理解できませんでした(汗
要するに四則演算さえ行えれば、後はどうとでもなるだろうと言う結論に達しました

・足し算
d = a + b → d = vec_add(a, b)

・引き算
d = a - b → d = vec_sub(a, b)

・掛け算
d = a * b → d = vec_mule(a, b)

・割り算
見当たりません……
高速化の為に、まずは CPU演算コストのかかる割り算を無くす所からはじめろ……と言う事なのでしょう

・右シフト
d = a >> b

VMX:d = vec_sra(a, b)
SPU SIMD:d = spu_rlmaska(a, -b)
※両者で引数の正負が異なる点に注意

左シフトは全く方法が異なりますが、掛け算で代用ができるので問題ないでしょう

○コンパイル方法

VMXを使用した時は、
#include "altivec.h"
ヘッダが必要なのと、ビルド時にオプションが必要です
ppu-gcc -m32 -maltivec -mabi=altivec 〜以降は今まで通り


TOPプログラマ専用PS3 Linux SDL