トップ回答者
OpenGLプログラムの64bitOS上での速度について

質問
-
よろしくお願いいたします。
過去に
Microsoft Visual Studio 2003 を使用してMFC+OpenGLの32bit版プログラムを作成し、
windowsXP 32bit 上で使用しておりました。現在、
そのソフトウェアをそのままの状態で Windows7 64bit上で動作させていたます。
ポリゴン数が少ない時は特に問題ないのですが、増加してくると描画速度が格段に落ち、
32bit OS上での動作との速度差が非常に大きい(32bitOSではスムーズに回転しますが、64bitOSだと
同じ描画規模でも1回の再描画に30秒近くかかる場合がある)と言う状態にあり頭を抱えております。
プログラムが悪いと考え、これからプロファイルをとるつもりですが、その前に何かアドバイスを頂ければと
質問させて頂きました。気になる点として、そもそもOpenGL(32bit)をWindows 64bit OS上で WOW64を経由しているので、
速度は大幅に遅くなって当たり前なのでしょうか?それとも、コンパイル時のオプションで解決するなどなにか対策があるのでしょうか?
なにか糸口でも頂ければ助かります。
よろしくお願いいたします。
回答
-
明確な答えを持っているわけではないのですが思うところを書きます。
Windows Vista以降のOSではデスクトップ描画がDWMに変更され、その影響でOpenGLの描画はDirectXでエミュレートされているという話がありました。それによるパフォーマンスロスも考えられますが…質問にあるような極端なものではないと思います。
OSインストール直後のドライバーではOpenGLのパフォーマンスが出ないという話もあります。正確にはInBoxドライバーとのことなので、関係ないかもしれません。(7 x64がテストできて7 x86がテストできないということはたぶんプリインストールOSで試していて、であればInBoxドライバーは使われていないはず。)
64bit版xpはどのような環境なのでしょうか? 内部的にはWindows Server 2003だったりするそれなりにレアなOSなので。これのパフォーマンスが出ないのはWindows 7と別要因かもしれません。
ともあれ、OpenGLやDirectXであればアプリケーションが32bitであろうと64bitであろうと、内部処理は64bitのデバイスドライバーに送信されるので本来速度差はないと思います。
この辺りはプロファイラーでどの処理に時間を要しているのか確認すれば、問題ははっきりすると思います。
すべての返信
-
ご返信ありがとうございます。
Windows7 での32bit x 64bit 比較は行っておりません。
情報が正確ではありませんでした。
WindowsXPの32bitと64bitの比較を行った時に問題が発生しました。
その後、Windows7 64bitでテストしたところXP 64bitと同じように遅かったと言うのが
正しいです。
Windows XP 32bit : OK
Windows XP 64bit : NG
Windows 7 32bit: テスト未実施
Windows 7 64bit: NG
上記結果から64bit OSでNGと判断してます。
Windows7 32bitでもテストと思ったのですが、なかなかWindows7の32bitマシンは
無く、未実施な状態です。
引き続きよろしくお願いいたします。
-
明確な答えを持っているわけではないのですが思うところを書きます。
Windows Vista以降のOSではデスクトップ描画がDWMに変更され、その影響でOpenGLの描画はDirectXでエミュレートされているという話がありました。それによるパフォーマンスロスも考えられますが…質問にあるような極端なものではないと思います。
OSインストール直後のドライバーではOpenGLのパフォーマンスが出ないという話もあります。正確にはInBoxドライバーとのことなので、関係ないかもしれません。(7 x64がテストできて7 x86がテストできないということはたぶんプリインストールOSで試していて、であればInBoxドライバーは使われていないはず。)
64bit版xpはどのような環境なのでしょうか? 内部的にはWindows Server 2003だったりするそれなりにレアなOSなので。これのパフォーマンスが出ないのはWindows 7と別要因かもしれません。
ともあれ、OpenGLやDirectXであればアプリケーションが32bitであろうと64bitであろうと、内部処理は64bitのデバイスドライバーに送信されるので本来速度差はないと思います。
この辺りはプロファイラーでどの処理に時間を要しているのか確認すれば、問題ははっきりすると思います。