バルセロナで開催中のMobile World Congress 2013の会場で、Qualcomm社のKraitプロセッサコアの担当者に話を聞く機会を得た。Kraitに関しては、あまり資料が出ておらず、前世代のコアであるScopionに比べると、情報が少ない。今回は、プロセッサのアーキテクチャに関しての質問を行ったので、筆者の推定も交え、Kraitコアの詳細を探ることにしよう。なお、記事中に図があるが、これは筆者の予測のもとに書き起こしたものであり、Cortex-A15のものを除いて、なんらかの裏付け資料があるわけではないことをお断りしておく。

Krait 200/300は改良されている

今年1月のCESのタイミングで、Qualcomm社は、新しいSnapdragonプロセッサを発表した。Snapdragon 200/400/600/800の4タイプあり、このうちSanpdragon 200のみプロセッサコアにCortex-A5を搭載していて、残りはKrait系のコアを使う。Sanpdragon 600と800には、それぞれKrait 300とKrait 400というコアが使われており、従来のKraitとの区別がある。

この2つのコアだが、Qualcommによると、単純にクロック速度を上げたものではなく、前のKraitに対して、内部的な改良が行われているという。ただし、ソフトウェア側からみたアーキテクチャは同一になる。

主な点としては、まず、分岐予測(ブランチプレディクション)を強化し、精度を高めたという点があるという。また、TLB(Translation Look ahead Buffer。仮想メモリ機構で物理アドレスと仮想アドレスの変換をキャッシュして、メモリアクセスを高速化する)を増量したという。この2つは、同クロックのKraitとKrait 300/400を比較したとすると、処理速度に差が出る可能性がある部分だ。

そのほかに細かい点としては、内部の演算アルゴリズム関連の改良や命令デコード部分の強化などがあるという。そういうわけで、Kraitも300/400に関しては、マイクろアーキテクチャ上の変更はないものの、実装としては、改良されたものといえそうだ。

Kraitの実行ユニット

Kraitのパイプラインについては、いくつかの情報が出ているものの、Qualcomm自身が情報を公開しておらず、まずは、そのあたりの確認から行う必要があった。昨年の取材では、整数演算に関しては3命令同時デコードで、4命令同時発行(Kraitはアウトオブオーダー実行を行う)という点は確認できた。また、実行ポート(実行ユニット)は7つ、そしてパイプラインステージは、11という情報もある。

まず、実行ユニットの件だが、7という数字は、整数演算側についてのもの。浮動小数点演算やVFP/NEON(SIMD命令)の実行ユニットは、この7つには含まれないということだ。だとすると、その7つの実行ユニットとは何なのだろうか。これについて確認したところ、以下の6種類だという。

  • Simple INT
  • Complex INT
  • Mult/Div
  • Branch
  • Load
  • Store

Simple INTとComplex INTは、それぞれ整数演算を行うユニットで、KraitはSimple INT実行ユニットを2つ持ち、残りのユニットは各1つ、これで合計7つになるという(図01)。

図01。Krait内部の整数関連の実行ユニットの数は7つ。うち、単純命令を処理するSimple INT実行ユニットが2つある。図は筆者推定のもの

SimpleとComplex INTの違いについては、明確な回答はないが、単純な命令とそうでない命令で実行ユニットをわけているとのことだ。ARMv7の命令セットは、RISC系ではあるが、少し複雑なところがあり、たとえば、命令ビットパターン内に条件判断部分があって、後続する命令をスキップするしないを演算結果と指定した条件で切り替える。また、数値のロード命令などには、レジスタに格納する前にシフト処理を行うこともできる。こうしたARMv7命令に関して、3つ(2*Simpleと1*Complex)を使い分けているのだと考えられる。