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

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

Windows 環境移行メモ

PC を移行したり OS を入れ直したり HDD を交換したりと、何かと環境の再構築が
連続したので個人的なメモです。(Windows Vista)

●Chrome
 ブックマークマネージャーからエクスポートしてバックアップ

●Firefox
 ブックマークの管理からバックアップ&htmlとしてエクスポート

●iTunes
 移行前にコンピュータの認証解除
 データ自体は C:\Users\<USER>\Music\iTunes や設定詳細で指定したフォルダ移行

●Office Outlook (2007)
  C:\Users\<USER>\AppData\Local\Microsoft\Outlook
 の中身を保存しておく。
 Outlook を install し、起動して初期化した後に上のデータを上書き。

●Thunderbird
  C:\Users\<USER>\AppData\Roaming\Thunderbird
 の中にある profiles.ini と Profiles フォルダを保存する。

●3ds Max
 ライセンスを別マシンに export

●個人フォルダ
  C:\Users\<USER>\Downloads
  C:\Users\<USER>\Desktop
  C:\Users\<USER>\Documents
  C:\Users\<USER>\Pictures
  C:\Users\<USER>\Music
  C:\Users\<USER>\Favorites
 移行時はフォルダの移動ではなく、コピーして元を削除する。

●VirtualStore の確認
  C:\Users\<USER>\AppData\Local\VirtualStore\Program Files (x86)
  C:\Users\<USER>\AppData\Local\VirtualStore\Program Files
 Program Files にデータを書き込もうとするアプリケーションのデータは
 こちらに落ちているので一応みておく。

●その他

普段からフォルダごとに分類

・インストール不要なアプリケーションの実行ファイルフォルダ
   Program Files とは別フォルダに分けておくとコピーしてパスを通すだけ

・バックアップが必要なデータ用フォルダ
   別サーバーにミラーしているので無くてもいいけどコピーした方が再構築が楽

・バックアップ不要だけど移行した方が後で便利なデータフォルダ
   ダウンロードしたアプリのインストーラや周辺機器付属のドライバのコピーなど。
   なくても何とかなるので優先度低い。

数百GB~TB クラスになると USB2.0 でもコピーに時間がかかるので SATA でないと厳しい。
仮に 480Mbps 上限いっぱい使えると仮定しても 60MB/s、1TB=4時間半。(実際は数倍かかる)

ATOK2008 はキーカスタマイズをファイルに書き出してあるので install 後読み込むだけ。
テキストエディタなど設定ファイルもまとめて svn に入れて複数 PC 間で共有。

サーバーなどは仮想PCにしてるので、そのうち開発環境も仮想 PC で済むようになるかも。

●移行後

・移行直後なんか Vista が重い
  デフォルトで個人フォルダがインデックス付けの対象となっているため。
  個人フォルダに大量にファイルがあると一通りインデックス化が終わるまで重くなる。
  「コントロールパネル→インデックスのオプション」で対象から外せる

・環境変数の設定画面を簡単に呼び出す
  スタートメニューのアイコン画像を左クリック
   →左側のタスクから環境変数の設定

Qualcomm と 3D

ARM 一色といって良いほど ARM が幅をきかせているように、
3D プロセッサも PowerVR 一色になりそうな勢いでした。
そんな中 Qualcomm は ATI (AMD) を貫き通すようです。

Qualcomm、AMDからハンドヘルド向け事業を買収
AMD、ハンドヘルド・チップ事業をクアルコムに売却

ちょうど最近なにかと苦労してたのがこの GPU。
Direct3DMobile ではなく OpenGLES だったりとか、他のドライバや API でもっと
きちんと使えば、もっとパワーのある描画性能を見せてくれるのかもしれません。

PowerVR 系も SGX が増えてくるので、そろそろ Shader を搭載した次の世代の
GPU も期待したいところ。

関連エントリ
HTC Touch Diamond で Direct3DMobile その(11) 問題まとめその他
HTC Touch Diamond で Direct3DMobile その(10) d3dmclock v1.10 3Dクロック 更新
HTC Touch Diamond で Direct3DMobile その(9) d3dmclock v1.00 3D クロック
HTC Touch Diamond で Direct3DMobile その(8) ノーマルマップの解説
HTC Touch Diamond で Direct3DMobile その(7) ノーマルマップを表示する
HTC Touch Diamond で Direct3DMobile その(6) 頂点性能続き
HTC Touch Diamond で Direct3DMobile その(5)
HTC Touch Diamond で Direct3DMobile その(4) 高速化
HTC Touch Diamond で Direct3DMobile その(3) 実際の頂点性能
HTC Touch Diamond で Direct3DMobile を使う。その (2)
HTC Touch Diamond で Direct3DMobile を使う。ハードウエアアクセラレータ

Windows7 リモートデスクトップと Direct3D

Windows7 beta の PC でリモートデスクトップを使ってみました。

接続時に、リモートデスクトップの オプション → エクスペリエンス から
パフォーマンスのオプション画面でとりあえず全部チェックを入れておきます。
これで普通に Aero Glass が出ています。

remote desktop
↑LOOX U50 (Win7βクライアント) から EeePC901(Win7β) に接続

リモートデスクトップを使うためには、あらかじめホスト側の設定が必要です。
 コントロールパネル → システム → リモートの設定 →
  リモートデスクトップを実行しているコンピュータからの接続を許可するを選ぶ

Vista が相手だと Aero Glass になりません。

Aero Glass
○ Win7β Client → Win7β Server
× Win7β Client → VistaSP1 Server
× VistaSP1 Client → Win7β Server

どの PC もローカルで Aero Glass が動くだけのスペックがあります。
(LooxU50 は Atom ではなく A110 の古いタイプです)

Aero Glass が出るなら Direct3D はどうだろう、ということで試しました。
あっさり動きました。

remote desktop
remote desktop
↑LOOX U50 (Win7βクライアント) から EeePC901(Win7β) に接続

ところが Vista でも動きました。

remote desktop
remote desktop
↑LOOX U50 (Win7βクライアント) から Desktop PC (VistaSP1) に接続

Aero は出ていませんが D3D アプリは動いています。
自分が知らなかっただけで Vista ですでに対応していたのかもしれません。

動作するアプリケーションはサーバー(ホスト)側の GPU に依存しています。
下記の通り認識されているデバイスが異なります。

HAL(sw vp): RDPDD Chained DD (チップセット内蔵 GMA950 EeePC901 Win7)
HARDWARE: RDPDD Chained DD  (GeForce GTX260 Desktop Vista)

サーバーが EeePC の場合 GeometryShader を使った D3D10 アプリは動きませんが、
GTX260 の Vista では動きます。よってサーバー側の GPU でレンダリングした結果の
画像を RDP で転送しているのだと考えられます。
もともと Vista 同士でも D3D アプリが動作していたのかもしれません。

Windows7 ではさらに、Direct3D のコマンドレベルのリモート描画に対応しているようです。
以前 masafumi さんのところで紹介されていた DXGI 1.1 beta のドキュメントによると、
Windows7 の DXGI1.1 だと RDP7 によって Remote PC の Adapter を取得できるとのこと。

DXGI 1.1のドキュメント

詳しいドキュメント(White Paper)がこちらにありました。

Microsoft Developer White Papers: PDC08
 より一番下の 「Direct3D 10.1 Command Remoting 」

Command Remoting の違いは下記の通り

・Vista
 サーバーの GPU でレンダリングした結果を bitmap でクライアントに転送。

・Windows7 DXGI1.1 対応アプリ
 描画コマンドを送ってアプリではクライアント側でレンダリングできる
 ただし既存の(未対応) Direct3D10.1 アプリはビットマップ転送

よって最初に紹介したキャプチャなど、現在描画されている Direct3D の画面はただの Vista の機能でした。

Command Remoting を使うには対応したアプリケーションを作成し、Windows7 上で
走らせる必要があります。
Full Screen Mode が使えないなど若干制限があり、また実際は通信帯域を考慮した
描画コマンドの最適化が必要となるようです。

コマンドレベルの転送+クライアントレンダリングによって帯域を減らせるので、
リモートで走らせているアプリケーションでも描画レスポンスが向上すると思われます。
また未対応だったり不要なものは従来通り bitmap 転送なので、サーバーとクライアントで
レンダリング処理を分散させるなど応用できるかもしれません。

残念ながら 10.1 なので D3D11 アプリは当分未対応だと思われます。
WARP といい、とりあえず Windows の描画に必要な 10.1 が 1つの目標になっているようです。

HTC Touch Diamond で Direct3DMobile その(11) 問題まとめその他

HTC Touch Diamond の Direct3D Mobile を使い Texture に直接レンダリングしようと
思ったらエラー。cpas を見たら対応していないことに気がつきました。
テクスチャに対して BackBuffer からのコピーは出来たので、必要ならフレーム
バッファをコピーしながら使うことになります。
ちょっと昔の GPU といった感じです。

IDirect3DMobileTexture* iTexture0;
CreateTexture( 512, 512, ..., &iTexture0 )
IDirect3DMobileSurface* iSurface0;
iTexture0->GetSurfaceLevel( 0, &iSurface0 );
~
RECT rect;
rect.left= 0;
rect.top= 0;
rect.right= 480;
rect.bottom= 480;
CopyRects( iBackBuffer, &rect, 1, iSurface0, NULL );

●現在までにわかっている問題点

HTC TouchDiamond (Qualcomm MSM7201A 内蔵 ati core 用 d3dm_ati.dll) で
Direct3DMobile を使用した場合に遭遇した各種症状です。
Emulator の Reference Driver では問題がないので、何らかのバグの可能性が高いと
思われます。

・640×480 window mode/full screen でレンダリングできない
 639×480 や 640×479 以下なら大丈夫

・HW T&L の光源が World space ではなく Local space で適用されてしまう

・XYZ_RHW 形式の頂点でレンダリングすると RHW の値が座標値にも影響を与えてしまう
 rhw = 1 以外で screen 座標を正しく与えることが出来ない。

・XYZ_RHW 形式(Transform済み頂点)と、そうでない頂点の混在が出来ない。
 RHW 無し頂点が出なくなる。

・D3DMTSS_TEXCOORDINDEX が無視される。常に Stage に一致した頂点 uv を参照する。
 仕様かもしれません。

・D3DMFVF_TEXCOORDFIXED が指定できない。常に頂点 uv は FLOAT とみなされる。

・Texture の mipmap ありなしと D3DMTSS_MIPFILTER の設定を厳密に合わせないと
 テクスチャが真っ白になる。
 存在しない miplevel へのアクセスが all 255 になるのかと思ったけど違うようです。

・ZWRITEENABLE を FALSE にできない。症状未確認。

・TextureStage でテクスチャを使用していない描画とテクスチャを使用している描画が
 混在しているときに Texture が表示されないことがある。

 厳密な発生条件は未検証です。他にも複数の描画で、上書きしているはずの
 TextureStage の設定が相互に影響し合っていることがあります。
 d3dmclock でも、オプションによって Texture が不要なケースなのにテクスチャを
 読み込んで演算で無視するなどやってます。

その他危なそうなものは避けて使っているので他にもあるかもしれません。

関連エントリ
HTC Touch Diamond で Direct3DMobile その(10) d3dmclock v1.10 3Dクロック 更新
HTC Touch Diamond で Direct3DMobile その(9) d3dmclock v1.00 3D クロック
HTC Touch Diamond で Direct3DMobile その(8) ノーマルマップの解説
HTC Touch Diamond で Direct3DMobile その(7) ノーマルマップを表示する
HTC Touch Diamond で Direct3DMobile その(6) 頂点性能続き
HTC Touch Diamond で Direct3DMobile その(5)
HTC Touch Diamond で Direct3DMobile その(4) 高速化
HTC Touch Diamond で Direct3DMobile その(3) 実際の頂点性能
HTC Touch Diamond で Direct3DMobile を使う。その (2)
HTC Touch Diamond で Direct3DMobile を使う。ハードウエアアクセラレータ