SSE5について

Q: SSE5についてお伺いします。AMDはSSE5のSpecificationを公開しましたが、例えばFP16、つまり16bitのFloating Pointは一般にPCでは使われていません。これは現在GPUでのみ使われるフォーマットです。こうした事を考えると、SSE5はFusionのサポートをメインターゲットにしているようにも思えるのですが、いかがでしょう?

A: 私自身は、SSEはCPUサイドでの処理からCPU+GPUでの処理にスムーズに移行するための命令セットの変更と考えている。将来は、x86命令はCPUサイドで、SSE命令はGPUサイドで処理されてゆくのではないかと思う。SSE5は、そうした流れの中の第一歩であり、より並列度を(従来に比べて)増したものだ。今後GPGPUが普及してゆく中で、ベクタ命令を切り出して(GPGPUで)処理するというパーティショニングを可能にするためのものだ。勿論プログラマから見れば同じOpCodeになるから、それがどちらで処理されるかを意識する必要はないが。ただしハードウェアで見れば異なるユニットが動くことになるだろう。

Q: SSE5ではY=±(A×B)±Cのフォーマットの順列組み合わせといった命令が非常に多いのですが、どんな用途でこれは使われるのでしょう?

A: 一般に科学技術計算ではこれらは非常に多く用いられる。衝突計算とか流体計算など幅広い分野で、このMultiply-Accumulateが利用されることになる。

Q: もう一つ。x86では一般に、オペランドでSRCとDSTが一致しています。これはx86のみならず、SSE/SSE2/SSE3などでも言えることです。ところがSSE5では、かなりの命令でSRCとDSTが別々に指定できます。これはGPGPUを考慮しての事でしょうか?

A: 一般にレジスタを節約するためにはSRCとDSTに同じものを指定すれば良いが、この場合元(SRC)の値は当然破棄されることになる。ただ、一般的にレジスタの内容を可能な限り保持したい場合は、SRCとDSTを分離する事になる。制約となるのはOpcodeの制約とDecoder(の複雑化)であり、x86ではこれが問題だった(のでSRCとDSTを同一とした)が、この制約が常に掛かる訳ではない。SSE5は(プログラム)再利用の観点から、x86のみならず(GPGPUなどの)Data Flow Machineなどの上でEncodeやDecodeを行う事を考慮している(ために、SRCとDSTを分離した)。

Q: 64bitモードではXMMレジスタも16個ありますから十分だと思いますが、32bitモードではXMMレジスタが8個に減ってしまいます。これでも十分なのでしょうか?

A: x86上でのプログラミングや、OpCodeの数という観点で言えば十分だ。勿論厳密に言えば、SSEのプログラミングをx86上でやることがどこまで現実的かという話はあるのだろうが。