日別アーカイブ: 2009年1月25日

Intel GMA500 のスペックについて考える。続き (2)

PowerVR SGX を採用した Intel US15W の GMA500 は、こちらで調べたように
正直あまり速くないという印象です。
その考えられる要因は次の通り

・シェーダーユニット (USSE) の数が少ない (2個)
・1 ALU あたり 32bit float x1 演算
・公称のピーク性能を達成できるのは 1 ALU で 8bit x 4(ARGB) のレガシーなカラーを扱った場合のみ
・フィルレートは 3D 時の内部 Z オクルージョンカリングを含めたもので実際のバスは細い

シェーダーユニット USSE あたり 1ALU との明確な記述はありませんが、その参考に
なりそうなのが頂点性能です。Transform Only でも頂点あたりに必要な clock 数が
かなり多いことから、1clock あたりの演算能力がかなり低いことがわかります。
(詳細は 前回)

転送能力は 2pix x 200MHz = 400Mpix/sec
Z/stencil 不要なので 64bit x 200MHz = 1.6GB/sec

ちなみに USSE は汎用的な Unified Shader なので、Video/Image 処理にも使われる
(または利用できる) と書かれています。
他に Video Decode Unit が搭載されているので本当に使われているのかどうかは
わかりません。GMA950 系よりは汎用的なのは確かなので、描画以外でも恩恵を
受けられるメリットはあるかもしれません。
もしくは PowerVR がライセンスしている Video Decode 機能自体も USSE の
Video/Image processing に依存している可能性があります。

追記: シェーダーユニットが 2個というのは UnifiedShader 世代のスカラー換算なので、
 ShaderModel 3.0 世代でいえば 0.5 個分ということです。3.0 世代 GPU は複数の
 ALU を搭載していたものが多かったのでそれを考慮すればもっと少ない。

●Windows Aero / Aero Glass と相性が悪い

Windows の Aero / Aero Glass においては ShaderModel 2.0 (PiselShader 2.0) を
利用して Window 描画を行います。そのため、特に PixelShader2.0 以上を使うと
pixel 性能が極端に下がることが致命的だと考えられます。

GMA500 が Windows Aero / Aero Glass と相性が悪い原因

 (1) PixelShader 2.0 以降では Pixel 処理能力が 1/4 以下となる
   8bit x4 SIMD mode が使えない、1ALU で済んでいたカラー演算が 32bit float
   演算となるため 4ALU 必要となる。

 (2) 半透明の重ね合わせは PowerVR 独自の On Chip Z Occlusion をスポイルする。
   おそらく Aero / Aero Glass など Window GUI に必要なのは、
   賢く速度を稼ぐ描画ではなく力業の転送能力なのだと考えられます。

根本的な原因はおそらく (1) の方で、(1) の方が処理負担に対する割合が高いと
考えられます。(2) の方が大きな原因であれば、Aero Glass → Aero 不透明に
切り替えることで改善できるはずです。

●PowerVR SGX の性能がわかりそうな資料(1)

前回調べておきながら、取り上げるのを忘れていた資料に OMAP があります。
OMAP は SGX を搭載しています。

TEXAS INSTRUMENTS OMAP3530

PowerVR SGX といっても様々なグレードがあるため一概に比較はできませんが、
資料を読むといろいろと興味深いデータが含まれています。

OMAP3530
> 10MPoly/sec

GMA500 は 13.3MPoly/sec なので若干遅い程度。

さらに上記ページから落とせる下記の資料が参考になります。
 ・OMAP35x 2D/3D Graphics Accelerator Reference Guide-TRM Ch 13 (Rev. B) (spruff6b.pdf, 199 KB)

> 8 parallel depth/stencil test per clock

チップ内部の pixel 処理能力が 8pixel/clock であることを意味しています。
tile 単位のラスタライズ(以下 SGX の処理内容の予想)

(1) depth/stencil 8pixel/clock (OMAP3530の場合)
   すべての Primitive をラスタライズして depth/stencil だけ先に test
   Pixel Shader はせず Texture も読まない

(2) deferred pixel shading、(1) を通過した pxiel のみ描画する。
   Z が最前面の pixel だけ PixelShader の実行、Texture のフェッチを行う

(3) (2) の出力を最大 2pixel/clock (GMA500の場合) で出力する

(1) は PC の GPU でもよく使用する depth のみの前レンダリング似ています。
GPU の多くはカラー無しの depth/stencil のみの出力では 2倍ほどの pixel レートで
描画できるようになっています。

●PowerVR SGX の性能がわかりそうな資料(2)

ルネサスの SH-Navi3 のニュースリリース

SH7776 CPU 533MHz, 4.27GB/sec, PVR SGX ?MHz
 ・RENESAS 業界初、車載情報端末向けに画像認識処理機能内蔵のデュアルコアSoC「SH7776」(SH-Navi3)を製品
 MBX から SGX でポリゴン性能が 2倍

SH7770 CPU 400MHz, PVR MBX 100MHz
 ・カーナビに最適な2D/3Dグラフィックスエンジンを業界で初めて内蔵し、さらに、次世代カーナビに必要な機能を1チップにした「SH7770」を製品化

SH7774 CPU 600MHz, PVR MBX MBX 300MHz
 ・カーナビ向けSoCで、世界で初めて画像認識処理機能を搭載した「SH7774」を製品化
 SH7770 の3倍

● Intel GMA500 と ShaderModel

実際に Atom Z500 + US15W の Intel GMA500 を搭載した PC を手に入れたので
軽く試しました。

 ・ShaderModel3.0 まで

対応している ShaderModel は 3.0 まで。
アーキテクチャ的には Unified Shader で 4.1 (D3D10.1) まで出来そうに見えますが
(wikipedia Intel GMA にも 4.1 と書かれていますが)
ドライバが対応しているのは 3.0 まででした。
VertexShader も PixelShader もハードウエアです。

D3D10CreateDevice1() がエラーになるのは当然としても、少々問題なのは
D3D11CreateDevice() までエラーを返してくること。
本来なら D3D_FUEATURE_LEVEL_9_3 あたりを返してきて欲しいところです。

これが原因で GMA950 なら D3D11 API に移行できるのに、GMA500 では
ShaderModel3.0 でも D3D11 API に移行することが出来ません。
もちろん WARP なら可能です。

● Intel GMA500 と Aero Glass

WindowsVista では Aero / Aero Glass に切り替えられました。
やはり重いです。Aero Glass を切って Aero にすると多少軽くなります。
以下手順。

 ◎ Aero Glass に切り替える —- (A)
  デスクトップのカスタマイズ→個人設定→ウィンドウの色とデザイン→
    配色「Windows Aero」を選ぶ

 かなり処理落ちしているようで、ウィンドウ操作などがマウスカーソルについて
 こなかったりします。
 下記の設定で半透明を無効にすると、同じ Aero でも若干速くなります。

 ◎ Aero の半透明を無効にする —- (B)
  デスクトップのカスタマイズ→個人設定→ウィンドウの色とデザイン→
    ウィンドウの色とデザイン→透明感を有効にするのチェックを外す

 半透明を切るだけで結構軽くなりました。半透明というよりも、ぼかしフィルタ
 などのシェーダーコードの実行がボトルネックになっているのかもしれません。

先にパフォーマンスのチェックを全部外しておいてから Aero にすると、もう少しだけ
軽い設定の Aero になります。

 ◎ 出来るだけ軽い Aero にする方法

 (1)スタートメニュー→コンピュータの右ボタンメニューでプロパティ
    →システムの詳細設定→パフォーマンス→設定→チェックボックスを全部外す

 (2) ここで強制的に BASIC に戻される

 (3) (A) の設定で再び Aero Glass に切り替えてから、(B) の設定で半透明を無効にする。

見た目は Vista Basic と変わりませんが、上のウィンドウを動かしても重なった下の
ウィンドウに再描画が発生せず、ハードウエアによるアクセラレートが効いている
ことがわかります。

Windows の描画モード

XP
  Luna                    ハードウエア
  Classic                 ハードウエア

Vista
  Aero Glass (透明感 ON)  WDDM ハードウエア 3D描画
  Aero 不透明/Standard    WDDM ハードウエア 3D描画
  Vista Basic             CPU 描画
  Windows Classic         CPU 描画

Windows7
  Aero Glass (透明感 ON)  WDDM ハードウエア 3D描画
  Aero 不透明/Standard    WDDM ハードウエア 3D描画
  Basic                   ドライバが対応していればハードウエア

Windows7 では Aero を有効にすることが出来ませんでした。
ドライバにまだ問題があるのかもしれません。

参考資料
IntelR Atom Processor for Mobile Internet Devices Technical Documents
  ・IntelR System Controller Hub (IntelR SCH) datasheet (PDF)
  ・IntelR System Controller Hub (IntelR SCH) specification update (PDF)

Imagination Intel
  ・IntelR CE 3100 (PDF)

関連エントリ
Intel GMA500 の機能と性能と Aero