PE命令
PE命令は1 命令でL2B以下全体を 4サイクル制御する*^2 。この 4 サイクルの単位をステップと呼ぶ。
PE命令はVLIW形式であり、 1 命令で複数のメモリユニット・演算ユニットを同時に制御できる。ソフトウェアパイプライニングにより 1 命令になるべく多くの動作を詰め込み、ユニットが停止している時間を最小化することが性能向上の鍵となる。
命令実行はパイプライン化されており、命令発行直後に結果を利用することはできない。
命令発行後、いずれかのメモリに書き込んだ値を読み出せるようになるまでのサイクルを空けるのはプログラマの責任である。
PE内にはGRF0(General Register File)、GRF1、Tレジスタ(Temporary Register)、LM0(Local Memory)、LM1の 5 つのメモリ要素が存在する。
これらをまとめてPEメモリと呼ぶことにする。
PEメモリにはALU、MAU、L1BMの 3 つの演算器が接続されている*^3 。
図1.1にPE命令の構造を示す。
演算器とPEメモリの間のデータパスは常に 2長語/サイクルである。
2 長語より短い結果については常に2 長語のMSB側に置くようになっている。
ここでMSBとは最上位ビット(Most Significant Bit)を指す。
LSB=最下位ビット(Least Significant Bit)と合わせて以降説明無しで用いる。
格納形式はビッグエンディアンである。
すなわちアドレッシング可能ならMSB側が小さいアドレスに対応する。
命令ストリームはAuto strideモードとFlatモードの 2 つのモードを持つ。
Auto strideモードかFlatモードのいずれかに統一された命令列をパックされている(packed)と呼ぶ。
実機に流す命令はパックされていなければならない。
エミュレータはパックされていない、つまりPE命令とMV命令が任意の順序で現れる命令列も実行できる。
詳細は2.3 エミュレータで述べる。
アセンブル時にはAuto strideモードとFlatモードどちらを用いるかを指定しなければならない。
Auto strideモードで表現可能なPE命令はFlatモードでも表現可能なので、Flatモードであれば両モードのPE命令式が混在したアセンブリを処理できる。
逆に、FlatモードのPE命令式が含まれるアセンブリをAuto strideモードでアセンブルしようとすると、たとえ命令式をAuto strideモードに等価に書き換えることが可能だったとしてもエラーになる。
*^1 PE命令はハードウェア要素としての「PE」より上位の要素の制御も行うが、慣例的にこう呼ばれる。
*^2 これは1命令1サイクルだとホスト-ボード間のPCIe帯域が不足するためである。