「 2012年03月 」一覧

タイマーカウンタ その2


前回、「続く」とした件の続きです。
TSCはCPUクロックに依存して、1クロック1インクリメントで増えていくタイマカウンタです。
しかし、近年CPUは可変クロックで動作するし、使っていないコアはディープスリープ状態に陥るし、とTSCのインクリメントは信用できるのか?という話が割と上がってきます。

これについて調べてみると、対処がそれなりにあるようです。

1つは、Constant-TSC というもの、もう1つは Invariant-TSC というものです。これらはTSCの性質を表しています。前者は可変クロックに対応するもので、後者はディープスリープ状態に対応するためのものです。

Constant TSCはPentium4 以降で搭載されているようです。
Invariant TSCはIntel Core i7 (Nehalem)世代で搭載されているようです。

Constant TSCは可変クロックの状態によらず、一定にカウンタ増加だそうです。
Invariant TSCはコアのクロックが停止しても、普遍にカウンタ増加だそうです。

これらの性質を有して、Windows XP SP2以降であれば、TSCを使用してもずれて動作に支障をきたす、ということはないのかもしれません。


タイマーカウンタ


タイマーカウンタの TSC についていろいろと調べてみました。
rdtsc 命令って今はもう使うなってのが定番で、代わりにQueryPerformanceCounterを使うようにとのことだけど、それの意味とか。

TSCはそもそもCPU内にあるタイムスタンプカウンタで、近年複数コアになってこのTSCもコアごとに持つようになってきている。
都合の悪いことに、 このTSCだけどコア間で同期がとれておらず、OSのスケジューラによっては先ほどまで動いていたコアから別コアへ実行が割り当てられて動作してしまうということがある。このときにTSC値のずれが問題になる。

もっとも、このTSCのズレはWindows HALやBIOSなどがうまく同期してくれて現在は問題になりにくいようになっているらしい。Microsoftから出ているパッチをきちんと当てていれば、コア間でのズレはないっぽい。

その情報ソースはここ。 http://support.microsoft.com/kb/896256/ja

Windows XP SP2以降では無い場合(&パッチ未適用とか)では、TSCズレの件とは付き合わないといけなさそうだ。

こういった問題があるから時刻取得系のものはアフィニティマスクを使用して、1つのコアで動くようにプログラム上で制御してあげるケアが必要みたいです。

で、このTSCってクロックに依存して増加する値だけど、それは信用していいの?という話に続きます・・・。


デュアルディスプレイでOpenGL


デュアルディスプレイの環境下でOpenGL使うには問題ないのかを調べてみました。
そもそもOpenGLにはDirectXと違ってどのデバイスで描画を行うかの指定ができません。
必要になるのは ウィンドウハンドル だけだったりします。

デュアルディスプレイの環境も2種類のケースがあります。
1.1つのグラフィックボードから2つのディスプレイに接続している場合
2.2つのグラフィックボードからそれぞれディスプレイに接続している場合

これらのケースでOpenGLはうまく使えるのかというのが今回の内容です。

実験

RADEON HD 5450とIntel HD Graphicsを両方を有効化したものと、RADEON HD 6850から2枚のディスプレイというものを用意してテストしました。

結果は、1つのディスプレイから2枚のディスプレイに接続しているケースでは問題なくOpenGLは使えるようです。一方、別々のGPUからモニタにつながっているケースでは問題となるケースがありました。

どちらのデバイスがプライマリモニタにつながっているかという条件で動作が変わりました。
Intel HD Graphics  がプライマリの時には、すべての状況で Intel がOpenGLの動作を握るようです。
逆にRADEONがプライマリの時には、RADEON側で動かす場合に限りOpenGLは機能し、他方モニタで写す状態では GDI Generic となるようで使い物になりません。

これらの点から、このような構成の時にはIntel HD Graphicsをプライマリに設定して老いた方が、アプリケーションの動作に問題は起こらなさそうです。(ただし、IntelのドライバがOpenGLをうまく動作させられるか疑問は残りますが)

結論

OpenGLではデバイス混在して使用することは想定されていないので、無理そうです。
同一メーカーの複数のボードで構成されるならば、 WGL AMD gpu association や WGL_NV_gpu_affinity といった拡張機能を用いて対象を制限することもできるような気がします。

グラフィックボードが複数枚、しかも別メーカー混在という状況は使い物にならない時代なのかもしれません。


VisualStudio11Beta試してみた


Windows8 ConsumerPreviewに続いてVisualStudio11 Betaもちょっと試してみました。
VMware上の仮想マシン と実機とで今回は試してみました。

環境

その1.
VMware Workstation8 の仮想マシン、設定はWindows7(x64)のもので構成.

その2.
実機。Intel Core i3 530 を載せているだけのシンプルな環境.
グラフィックスもCPU内臓のIntel HD Graphicsを使用.

試してみる

VisualStudio 2010のころとまた違った印象を受けるIDEとなっています。 カラーが、ライトグレーで統一されている感じです。
これはVisual C++の新規作成で Windows Metro Style の Direct3Dアプリケーション構成を選んでみたスクリーンショットです。 WindowsLiveなどのアカウント登録をせずにローカルのみのアカウントだったために上記のライセンス取得まではやってみませんでした。

このブログでは、DirectXまわりに関心があるのでそのあたりを見ていこうと思います。

DirectXアプリケーションデバッグ周りの強化

VisualStudioでDirectX10/11アプリケーションを作っている際のデバッグがやりやすくなりました。

  • GRAPHICS EVENT LIST
  • GRAPHICS EVENT CALL STACK
  • GRAPHICS PIPELINE STAGES
  • GRAPHICS PIXEL HISTORY

ざっとみても上記のデバッグ用ウィンドウが増えています。

DirectX APIのコール順序履歴や、そのAPI呼び出し時のコールスタック情報、 各レンダリングステージでどのように描画データが加工されているか、あるピクセルがどのように塗りつぶされたか、という情報をVisualStudio上で確認することができます。

また、PIXEL HISTORYやPIPELINE STAGESのウィンドウからVertexShader, PixleShaderなどのデバッグを開始することができました。デバッグを開始すると各シェーダー内でブレークポイントを設定することができ、入力データや計算結果を変数ウォッチで確認していくことが可能でした!


PIXの機能が単に統合されただけともいえますが、この統合によりデバッグがやりやすくなったことは事実だと思います。
ただ、実機ではPixelShaderの出力の部分でうまく結果が得られていないような感じでしたが、これも製品版では改善されることでしょう。

グラフィックスリソース作成の追加

FBXファイルやシェーダーファイルの作成が新規作成のメニューから行えるようになりました。


FBXの新規作成でteapotを作成してみた図です。簡単なマテリアルの設定も行えるようです。 画面内のphongのEffectプロパティでは描画に使うエフェクトファイル(dgslファイル)を設定できるようで、シェーダーを作成するのがやりやすくなっています。

このdgslファイルもメニューから新規作成で作ることができます。
これはノードベースでシェーダーを作成する機能になります。

このような感じで画面横のノードを追加して、それぞれ連結してシェーダーを作成することができます。こうやってできたシェーダーは更にエクスポートすることができます。
エクスポートした後は プロジェクトにファイルを追加して、アプリケーションのビルド時にシェーダーコンパイルすることもできるようになります。

今まではビルドイベント等を設定しながらやっていたことが、標準でここまでできるようになりました。

DirectX 9.0cのデバッグランタイムが使えなくなりました。

DirectXコントロールパネルで設定しようとしても グレーアウトしていて選択不可能。
もしかしたら、製品では変わるのかもしれませんが今のところダメそうです。
・・・Windows8という新しい環境で DirectX9なんていう古いものを使ってほしくないのかもしれませんね。

まとめ

DirectXアプリケーションを今まで作ってきた人には有難い進化をしていると言えます。
上記で紹介した機能が使えるだけで、VisualStudio 11にもう移行したい気がします。
また、C++/CLIのインテリセンスも有効になっている点はPreviewのときと変わっていなかったので、VisualStudio2010より魅力的になっている面もあります。

気になる点としてはこれらがProfessionalエディションでも提供してくれるかというところでしょうか。それとVS11のExpressはこれらの機能を備えて出てくるか、もしExpressでは無い機能だとしたらPro版の魅力につながりますね。


Windows8 Consumer Preview


つい先日に公開されたWindows8 Consumer Previewを試してみました。
実マシンではなく仮想マシンで動作を見てみました。

Windows8が動く仮想マシン環境は、VMware Workstation8やVMPlayer 4以降となります。
これ以前だと、Windows8でのBSoDがでてインストールができないようです。

戸惑った点

スタートメニューがなくて、Windowsキーを押すとMetroの画面に戻る点。
ちょっと驚きです。Flip 3Dもなくなってしまった模様。

よかった点

エクスプローラーがリボン対応に!そしてファイルコピー操作を複数やっても進行状況を示すウィンドウは1つに集約されました。
あと、タスクマネージャーがわかりやすくなりました。今までのものに比べて優しい印象になったと思います。

 

これからVisualStudio 11のほうを試してみたいと思います。