94.24バージョンのドライバのほうがGDIの値が高いですね。GPUによるアクセラレーションがきいているんだと思います。ほうが若干高いのは、まぁ誤差レベルかもしれませんが、新しいパッチだけに3Dに関するチューニングがなされたのかもしれません。用ドライバ(XPDM)を入れたら2D描画が高速化するのでは!?」ということを確かめるためにテストしてみました。XP用ドライバはいったん、現在のドライバを削除してドライバインストーラの互換性でXPという風にごまかしたら入れれました。ドライバでテストしています。結果は予想していたものと大きく変わりました。GDIは3つとも数百レベルの違いなので、誤差範囲です。よって、Windows7ではXP用ドライバ入れてもGDIはソフトレンダリングされてると考えるのが妥当のようです。XP用94.24→XP用163.71→7用191.07という順のスコアです。時代にDirect3Dに統合されたとかいう話を聞いたことがあるような。使ってねというのがMSの方針なんでしょうね。よる3D描画ですが、XP用94.24では全く動作しませんでした。XP用163.71でもかろうじて動いていた程度です。3D描画性能はドライバが新しいほど真に能力を発揮するということかもしれません。XP用ドライバ使ってると3Dアプリを使おうとするだけでブルースクリーンになります。出るんでスワップがらみのエラーですかね。)やはり、Windows7でXP用ドライバ使ってもメリットはほぼなく、逆に不安定になるだけということがわかりました。診断ツールの画面をキャプしてみました。ドライバモデルが「不明」となっています。Windows7でも問題なく動くXPDMドライバがあればいろいろ実験してみたかったんですが。Aeroの有無、DWMの有無で描画性能が変わるのかもテストしてみました。ドライバは7用191.07(WDDM1.0)です。Manager」というサービスとして動いてるらしいので、これでDWMのOn,Offが調整できます。Aeroが若干スコアを伸ばし、OpenGLではAeroが若干スコアが伸び悩むという結果になりました。7用ドライバ使う限り、AeroやDWMのオンオフにはあんまり左右されないようです。WDDM1.1が存在しないので、残念。ベーシック(DWMサービスは有効で)で、DWMのメモリ(ワーキングセット)、CPU使用率を調査してみました。XGAサイズで50個開き、その後そのウィンドウを閉じたときの状態をパフォーマンスモニタで計測したものです。バッチ起動から50個開くまでのメモリ使用量がやはり半端ないです。400MBも使うってのは解せません。本来メモリ食う筈なのは150MBくらいのはずです。確かに50個開き終わった後は200MB強を保っているのでこれは納得です。詳しくはわかりませんが、オーバーヘッドかバッチで一気に開いたためさらにバッファを確保したのかそんなところではないだろうかと思います。ウィンドウ数とサイズによって激しくメモリ消費することは実証できました。次はベーシックスタイルでの計測結果です。使うメモリはほとんど増えていません。(実際は数百K増えてましたが。起動完了時にCPUを4割弱ほど使っているの気になります。描画に関して、全くDWM非依存というわけではなさそうですが、メモリに関してはメインメモリにバッファすることはやめてるようです。■ウィンドウドラッグ時の残像ちなみに、このベーシックスタイルでウィンドウをドラッグしてみるとこんな感じになりました。残像がすごいことになっています。非アクティブなウィンドウは自前でレンダリングしてるんでしょうかね。ソフトウェアレンダリングの遅さも影響してるのかも。有効時に試してみるとこんな感じです。2D描画がベンチマーク上遅くなったと言え、こういう点ではWDDM1.0ドライバ使用時のDWMでもいい点ありますね。Part3(グラフィック描画メモ)前回のCrystalMarkでのWindows7ベンチマークでグラフィック関連、特に2Dがらみが異常にスコア低かった件の調査です。調査してるうちに、2Dでの描画ってのはレスポンスに直結するのでかなり大事な部分ってことを今更ながら思い出しましたよ。■XP時代のグラフィックアーキテクチャ(XPDM)さて、Windows7の前にXP以前がどのように2D描画してたかです。2DがGDI/GDI+、3DがDirect3Dで構成されてます。XDDM)と呼ばれるもので、こちらもGDI用とDirectX用に分かれてるようですね。制限多いかつ複雑仕様のGDIですが、APIから直にドライバへ、そしてGPUの2D用アクセラレータへ描画命令が流れるので高速で描画できます。APIの構成としては下記の図のような感じです。■Vsita時代のグラフィックアーキテクチャ(WDDM1.0)Vistaではグラフィックアーキテクチャが一気に変わりました。API構成は下記の図のように変化します。介して描画される仕組みになってます。対応したものとなります。統合が弊害を生むことになります。それは2D描画が異常に遅くなったということです。描画データの送り方にもひと癖あります。この方法だと、ソフトウェアレンダリングとシステムメモリからビデメモリ(VRAM)へのイメージ転送にコストがかかるのと、ソフトレンダリングの結果をシステムメモリ、VRAMの両方に同一の画像のコピーを持つので、共に膨大なメモリが必要になります。XPDMではグラフィックドライバがカーネルモードだけでしたが、WDDMでは安定性を確保するためにドライバ内でユーザーモードとカーネルモードに分かれています。分かれたぶん、オーバーヘッドが発生しますよね。この描画シーケンスを図にしたものが下記です。(と各exe)のメモリが増えていきます。NyaRuRuの日記で検証されてます。メッセージを処理してウィンドウ再表示する回数が減るのでCPU負荷の軽減やちらつき防止には役立つかもしれません。GDIがソフトウェアレンダリングになるということは、GPUではなくCPUの性能が求められますよね。CPUが遅い低スペックマシンだと逆効果になって描画にもっさり感が出たんだと思います。(ただし、VistaにおいてWDDM1.0に対応したドライバだけ上記のような描画シーケンスになるようです。WDDMに対応してないドライバでは従来通りのXPDMドライバとなるので、ハードウェアによるGDIアクセラレータが働きます。グラフィック描画アーキテクチャです。ここまでの話は下記サイトで詳しく説明されています。今回の記事はほぼこちらのブログを参考にさせてもらってます。・@IT:改良されたVistaの描画アーキテクチャVistaアーキテクチャの基本動作と利点。NyaRuRuの日記WDDM1.0とDWMのメリット、デメリット。あるプログラマの手記MS批判が過激ですが、中ほどくらいからVistaでのGDIについて書いてます。Vistaで不評だったGDIの描画が改善されているようです。Vistaの時(WDDM1.0)のGDI描画は同一の画面のコピーをメインメモリとビデメモリ(VRAM)の両方に持っていました。これが膨大なメモリを食いつぶしてましたが、Windows7(WDDM1.1)ではGDIアプリケーションはドライバ(GDIハードウェアアクセラレーションを使って)を経由して直にVRAMに描画できるようになりました。これにより、GDIアプリケーションのウィンドウイメージをメインメモリに持たなくてすむので、メモリ使用量の軽減となります。ドライバ(とGPU)がGDIアクセラレーションを新たな形で実装したので、ソフトウェアレンダリングしてたWDDM1.0に比べ高速で描画できるようです。(といっても、XPDM時代に比べると、ドライバ内のGDIドライバファンクションの数は少ないためXP時代ほどまでに速くなるかどうか微妙らしいです。NyaRuRuの日記に詳しく説明。)いずれにせよ、WDDM1.1のドライバであれば、Vista時代のWDDM1.0に比べメモリ使用量の軽減と、GDI描画速度の回復というメリットがあるわけですね。WDDM1.1ドラバでの描画シーケンスは下記のように感じだそうです。Window7ではDirectX10.1を採用してます。10.1のAPIを使ってるわけですね。9時代のGPUを積んでる場合は、GPUに足りない機能をソフトウェアエミュレーションで実現してるようです。機能をすべてソフトウェアエミュレーションで処理することができるようです。古いグラフィックカードだと余計にCPU負荷を食ってしまうようですね。いう新APIがサポートされたようです。既存のアプリケーションがこれを利用するになるまでは結構時間がかかるかもしれません。(現状.Netで簡単にDirect2D,DirectWriteを呼び出す方法もなさそうですしね。)Windows7でグラフィック周りがどう変わったかは下記のサイトを参考にさせてもらいました。NyaRuRuの日記XP,Vista時代のアーキテクチャ復習と、Windows7でどう変わったかを詳しく解説。アーキテクチャ図は参考になります。デバイスロスト&ドライバ前半部分で解説。マイコミジャーナルどうやらGDIグラフィック描画時のロックも変更した模様。これによりマルチコアCPU環境でGDIのパフォーマンスが上がるようです。7のグラフィックスエンジンはVistaよりも優れたものになろうとしている改善点が簡潔にまとめられてます。|あなたの知らないWindowsDirectX10.1がなぜDirectX9のグラボで動くのか説明。・ASCII.jp:Windows7で大幅に変わったグラフィックドライバー|あなたの知らないWindowsWDDM1.1の説明やGDIのロックに関する改善、WDDM1.0ではVistaと同じってことがまとめられてます。1.1)WDDM1.1の説明で、2Dの描画処理もドライバ+GPUで高速化してることが書かれています。JapanWDDM1.0とWDDM1.1でのベンチマーク結果が載せられてます。WDDM1.1速いです。マイコミジャーナルWDDM1.1でGDIアクセラレーションのサポートが書いてます。3流PGPCの2Dが遅かった原因は?さて、ここまでXP以前からVista,Windows7までのグラフィック描画に関することを書いてきました。この知識を踏まえて、なぜ前回のCrystalMarkでのベンチマークで描画機能が低かったか、そしてXPより重く感じるのかの検証をしたいと思います。Vista時代のWDDM1.0を使ったアーキテクチャでGDI描画は遅くなりました。Windows7でWDDMが1.1になりだいぶ改善されました。ところが、これにはグラフィックドライバがWDDM1.1でないといけません。ドライバWDDM1.1ではない場合、例えばWDDM1.0だとどうなるんでしょうか?その場合は、WDDM1.0、つまりVista時と同じ描画アーキテクチャになるようです。WDDM1.0でない場合は、XPDMドライバでも動くようWindows7はサポートされているようです。ドライバは最新のものを先日入れました。診断ツール」を使えばわかります。(XPはシステム情報から見れたんだけどWindows7はファイル名を指定して実行で「dxdiag.exe」と入れないとだめなよう)上のSS見てわかるようにこのドライバはWDDM1.0を使ってるようです。これゆえに3流PGのPCはGDI描画のレスポンスが遅いようです。10.1の足りない機能をソフトウェアエミュレートしてこともさらに遅くしてる要因になっているのかもしれません。いずれにせよ、WDDM1.0を使ってることが原因だということがわかったので、NVIDIAがGeForce7x00用のWDDM1.1ドライバを出してくれるのを待つか、DirectX10.1対応ビデオカードを買うかしか解決策はなさそうです。(ドライバ出してくれるのかどうか分かりませんが。8以降じゃないとWDDM1.1じゃないみたいなこと書かれてますし。)と思っていると、Direct2DとGDIとDX10。庵で面白い記述を見つけました。7までは2Dアクセラレーション回路がGPUにあったようで、ドライバ(XP)も2桁の頃は2Dアクセラレータに対応してたようです。今のWindows7にXP用2桁のドライバを入れてみればいいわけです。XP用なので、おそらくXPDMドライバモデルでしょう。その場合、GDIがGPUの2Dアクセラレータを使うことができるので、GDI描画がXP相当になるじゃないかという考えです。(当然Aeroは使えなくなりますが。Part4(グラフィック描画メモ補足)で書いてみました。使ってきた3流プログラマですが、自宅メインPC上だとどうもXPと比べると重い気がしてなりません。いうことで、XPと7でベンチマークを比較してみました。Windows7を運用してるPCスペックは下記のとおりです。(ClearType)基本構成は2005年当時のやつですね。2004R3でベンチマーク結果を比較してみました。15%遅いですが、特に気になるのはグラフィック関連です。どれもXPの半分かそれ以下となっています。思って、Aero無効でもベンチマークしてみましたが、特に結果は変わりませんでした。3Dグラフィック性能は数%の低下ですが、CPUのスコアがちょっと低いです。追記PCMark05でもXPとWindows7比較してみました。性能比をグラフにするとこんな感じです。2DとWEBのレンダリングがかなりスコアを落としているのがわかります。-------------------------------------------たしかに、実際いろいろなアプリケーション動かしてると、XPより遅く感じることが多いんですよね。ブラウザでタブを大量に開いたときは描画がものすごく遅くなります。動画再生も解像度によっては結構辛かったりしますね。エクスペリエンスインデックスのスコアは下記のような感じです。CPU,メモリ共に4.2ということですが、やっぱ快適に動かすには6以上は欲しいところですね。上でWindowsXPとWindows7を比較してました。(ついでに、ホストOS上でもベンチマークしてみました。