ARMのGPUコアで最上位の「Mali-T880」は、2015年の2月に発表されており、新規の製品と言うわけではないが、学会での発表であるので、ブロックダイヤや処理フローなどのこれまで公表されていない情報が含まれた発表であった。
Mali-T880は、スマホ、タブレット、セットトップボックスなどをターゲットとするGPUであり、ARMのMali GPUのMidgard(北欧神話に由来)アーキテクチャのGPUである。そして、処理の中心となるシェーダコアは、最大16コアまで拡張することができる。この点はT860と同じであるが、T860は各コアのALU演算が2パイプであるのに対して、T880ではこれが3パイプに拡張され、ピーク演算性能が1.5倍に引き上げられている。
当然であるが、T880はOpenGL ES3.1、OpenCL1.2、MicrosoftのDirect X11などをサポートしている。
Mali-T880 GPUの概要
3D描画では、それぞれのローカルな座標系で表現された物体(三角形のパネルの集合で表現される)を、グローバルな座標系に変換して統合するジオメトリ処理と、それぞれの3角形パネルの画面上での色を求めるフラグメント処理が必要である。
Mali GPUはタイリング方式で描画
PC用のGPUは、全画面サイズのフレームバッファやZバッファを確保して処理を行う直接方式の描画を行うが、モバイル用のGPUでは画面をタイルに分割して、タイルごとに処理を行っていく方式が一般的であり、Mali GPUもタイリング方式を採用している。タイル方式は、タイルサイズ(Mali GPUでは16×16ピクセル)の小さなバッファをチップ上に持ち、タイル1個分の処理はチップ内で行い、最終結果だけをメモリに書き出すので、メモリバンド幅を多く必要とせず、電力、コストなどの制約が大きいモバイル用GPUに向いている。
しかし、前の図の赤い三角パネルはタイル2、3、4にまたがっているように、大きな三角パネルは複数のタイルにまたがるので、引っかかっているタイルごとに同じパネルの計算をして描画リストに加える行う必要があり、タイリングは計算処理量が増えるというという問題がある。このため、Mali-T880 GPUでは基本タイルの2×2、4×4のような大きなタイルを階層的に定義している。
このように大きなタイルを定義すると、タイルごとの描画対象の数を減らす事ができ、計算処理や描画対象のリストを格納するのに必要なメモリ量などを減らす事ができる。
処理の流れをまとめると、頂点シェーダは、メモリからオブジェクトの位置や頂点の属性を入力として読み、座標変換を行って、変換された新しい座標値や頂点の属性をメモリに出力する。そして、変換された座標とインデックスを入力として、オブジェクトをタイルごとに分けるタイリング処理を行う。タイリングの結果は、各タイルで処理すべきポリゴン(用語としては多角形であるが、実際は三角パネル)のリストとしてメモリに書き出される。
最後にフラグメントシェーダが変換された座標や、ポリゴンリストに基づいてタイルごとの描画を行う。
頂点シェーダは頂点の座標や属性を読み込んで、座標変換を行って、結果をメモリに書き出す。タイラーは、その結果をタイルごとのリストにまとめ直してメモリに書き出す。そして、フラグメントシェーダは、タイルごとの描画対象リストを読んで、描画を行っていく |
次の図のように、まず、CPUがフレームF0の処理の準備を始め、そのデータをVS+T(Vertex ShaderとTiling)処理を行い、その結果を使ってFS(Fragment Shader)が描画するという処理フローであるが、CPUはF0のVS+T処理が終わると次のフレームF1の処理を開始するというパイプライン処理を行うことができる。
しかし、VS+Tの処理はシェーダコアの演算器を使うし、FSの処理もシェーダコアの演算器を使う。従って、これらの処理が重なっている部分では、シェーダコアを分割して使う必要があり、全コアを1つの処理に割り当てた場合と比べて処理時間は長くなると思われる。
(次回は9月29日に掲載します)