ヴェクタ

「HLSL(High Level Shader Language)は使ったことある?」
「あんまり無いです。授業でLLSL(Low Level Shader Language)はやりましたが」
「今時LLSLでもないんだよなー。そもそも組み込み業界ではすっかり標準になったOpenGL ESでは使えないし」
OpenGLえす?」
「ES(Embedded System)。パソコンやワークステーションじゃなくて組み込み機器向けのOpenGLね」
「シェーダー使えるんですか?」
「GLSLってのが使える。見た感じDirectXのHLSLと互換性は高いね。ところで、SLの特徴ってどんなものが思いつく?」
「んー、大域変数が使えない」
「おお、いいね。メモリの局在性を使って最適化するからね。他には?」
「並列で動くとか」
「ああ、並列で動くのもあるね。Unified Shaderユニットがいくつも載ってるグラフィックチップは同時にいくつもの処理が動くね。他には?」
「他……?」
「SL最大の特徴は『ヴェクタ型計算機』であるということ」
「あ、ベクトル。使います使います。あと行列と」
「Unified Shaderはグラフィックに特化した計算機なので、グラフィックに使う計算は最適化されるようになってる。例えば君のあげた行列もそうだね。中身の実装はあまり気にする必要はないけど、実際のUnified Shaderはヴェクタ型の計算機になってる」
「普通の計算機とどう違うんですか?」
x86のCPUなんかは1回の命令で1つの計算しかできない。CPUによってはSSEという拡張がついてて1回の命令で4つのかけ算と4つの足し算を同時に出来たりもするけど、所詮ただの拡張。それに対してヴェクタ型の計算機はそもそも複数の計算を同時に行うこと前提になってる」
「ヴェクタって、ベクトルですよね」
「そ。行列を『マトリックス』と呼んでるのでそれに併せて英語にしてるだけ。ドイツ語『マトリフ』になるんじゃないかな。ところで、他のところでヴェクタって聞いたことない?」
「長さと方向を持つ量……」
「あー、まあそれでも表現できるね。他には?」
「??」
「じゃ、STLとか……」
「あ、std::vector!」
「そ。数学の世界では『複数のスカラー量を一つの代数として計算に利用する』時にヴェクタという表現をするの」
「大数」
「あー、そじゃなくて「代表」の代。プログラミング用語的にいうと変数。それもクラスや配列みたいなやつ。で、このヴェクタを計算の中心に置いたコンピュータを『ヴェクタ型コンピュータ』と呼んで、普通の『スカラ型コンピュータ』とは用途を変えてるの」
「どんなことに使えるんですか?」
「んー、例えばCGとか、物理シミュレーションとか」
「判りました。だからSLはGPUに載ってるんですね」
「そだね。メジャーどころではこの間までスーパーコンピュータの世界ランキングにトップで載ってた『地球シミュレータ』なんかもヴェクタ型。ヴェクタ型のコンピュータを使うには、ヴェクタ型の頭で接しないとダメなんだわ」
「例えば?」
「変数は分解しない。ヴェクタやマトリックスを生のまま演算子に食わせる。他にも、演算結果が次の計算に影響しない部分は並列化するとか」
「出来るかなぁ?」
「あんまり難しくないよ。だいたい自動でやってくれるし、ハードウェアの実装気にする必要ないし」


ああ、いい時代になったなぁ。あとはハイパーキューブ型並列計算機が一般化すると私の大学時代の趣味(研究じゃないらしい)に追いつくんだけど、その時代はまだ先かなぁ。グリッドは一時期流行ったけどなんか下火だし。