Nanashi-soft○プログラマ専用○Windows gcc SDL○
データを一度にまとめて CPUに処理させる方法の事です
例えば、int型の変数4コに +1する場合
・1つずつ変数を +1する
・4ついっぺんに変数を +1する
の違いです
当然ロジックそのものを変更する必要があり、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 〜以降は今まで通り