仮想化道場
APUとHSAでコンピューティングを変えるAMD
(2013/12/27 06:00)
米国サンノゼ(カリフォルニア州)で開催されたイベント「APU13」において、CPUとGPUが融合したAPUの、エンタープライズ分野への応用が解説された。今回は、その詳細を説明していく。
CPUとGPUを統合的に利用するHSA
APU13は、昨年まではAMDのプライベート カンファレンスだったイベントを、HSA(Heterogeneous System Architecture)を採用するARM陣営を含めたカンファレンスへと拡大したモノだ。
そのHSAとは、ハードウェア的にCPUとGPUを1つのチップにまとめ上げたAPUを利用し、一般の開発者が、ヘテロジニアスなソフトウェアを容易に開発できるようにするフレームワークである。
ハイパフォーマンス・コンピューティング(HPC)分野などでは、演算ユニットとしてGPUを利用するアプローチ(GPGPU=General purpose computing on graphics processing units)が多く見られるようになった。これは、GPUが持つ大量の演算ユニットを計算に利用することにより、CPUだけでは実現できない演算能力を得られるためだ。
GPUは当初、グラフィックを表示する機能が中心だった。このため、OSやソフトウェアフレームワークとしては、グラフィック表示に対応した機能が中心で、GPUを演算に使うにはいくつかの問題があった。
GPUを演算で利用できるようにAPIとしてOpenCLやDirectCLなどが作られた。さらに、GPU側のプログラミング言語としてGPUベンダーごとに独自のプログラミング言語が開発された。
この分野で先行しているNVIDIAでは、CUDAという並列プログラミング言語を提供している。AMDも独自仕様のプログラミング言語などを一時リリースしていたが、現在ではHAS仕様を標準として各種ツールの開発を行っている。
これは、HSAが、1つのプログラムをコンパイラーが自動的にCPUとGPUに命令を振り分けて、効率よく実行できるようにするアーキテクチャとなっていることと、ARM陣営を含めたデファクトスタンダードにしようという思惑があるためだ。
今までGPU向けのプログラムは、GPUのアーキテクチャを開発者が把握した上で、CPUとGPUに手動で処理を振り分けるようにプログラミングする必要があった。しかし、HSAを採用したプロセッサとソフトウェアを利用すれば、CPUとGPUのメモリ空間を同一に扱えるようになるため、ソフトウェア開発者がGPUを意識せずにプログラミングしても、前述のように、ソフトウェアフレームワークが自動的にCPUとGPUに命令を振り分けてくれるようになる。
またHSAの特徴として、CPUとGPUを抽象化した仮想的な命令セットアーキテクチャのHSAILをデザインすることで、さまざまなデザインのCPUやGPU(DSPなどもカバーする)をサポートすることが挙げられる。
AMDでは、2014年初めにリリースするKaveri(Aシリーズとして販売されているRichlandの後継APU)において、ハードウェア部分でもHSAを採用している。
Kaveriは、AMDのx86 CPUコアのアーキテクチャを一新する。現在のPiledriverコアからSteamrollerコアへと進化させる。Steamrollerコアは、Piledriverコアに比べると20%ほどの性能向上が見込まれているほか、GPUには、AMDのGCN(Graphics Core Next)アーキテクチャを採用する点が特徴といえるだろう。
なお、HSAはAMDだけのアーキテクチャではない。HSAを推進するHSA Foundationには、ARM、Imagination Technologies、MediaTek、TI、Qualcomm、Samsungなどが、ファウンダーとして参加している。
ARM自身も、GPUのMaliシリーズでHSAをサポートし、ARMプロセッサとMali GPUの組み合わせによってHSAベースのAPUを提供しようと計画しているし、上記のファウンダー企業のほとんどがARMベースのプロセッサを提供しているため、将来的なARMプロセッサではHSAが標準となるかもしれない。