none
OpenGLプログラムの64bitOS上での速度について RRS feed

  • 質問

  • よろしくお願いいたします。

    過去に 

     Microsoft Visual Studio 2003 を使用してMFC+OpenGLの32bit版プログラムを作成し、
     windowsXP 32bit 上で使用しておりました。

    現在、

    そのソフトウェアをそのままの状態で Windows7 64bit上で動作させていたます。
    ポリゴン数が少ない時は特に問題ないのですが、増加してくると描画速度が格段に落ち、
    32bit OS上での動作との速度差が非常に大きい(32bitOSではスムーズに回転しますが、64bitOSだと
    同じ描画規模でも1回の再描画に30秒近くかかる場合がある)と言う状態にあり頭を抱えております。

    プログラムが悪いと考え、これからプロファイルをとるつもりですが、その前に何かアドバイスを頂ければと
    質問させて頂きました。

    気になる点として、そもそもOpenGL(32bit)をWindows 64bit OS上で WOW64を経由しているので、
    速度は大幅に遅くなって当たり前なのでしょうか?

    それとも、コンパイル時のオプションで解決するなどなにか対策があるのでしょうか?

    なにか糸口でも頂ければ助かります。

    よろしくお願いいたします。

    2013年6月13日 0:56

回答

  • 明確な答えを持っているわけではないのですが思うところを書きます。

    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のデバイスドライバーに送信されるので本来速度差はないと思います。
    この辺りはプロファイラーでどの処理に時間を要しているのか確認すれば、問題ははっきりすると思います。

    • 回答の候補に設定 星 睦美 2013年6月18日 1:04
    • 回答としてマーク 星 睦美 2013年6月26日 7:14
    2013年6月15日 3:01
  • PixelFormatの設定はどうなっているのでしょうか。

    ChoosePixelFormat()は引数のPIXELFORMATDESCRIPTORの設定を無視することがありますので、ChoosePixelFormat()の戻り値をDescribePixelFormat()で確認されてはいかがでしょうか。

    • 回答の候補に設定 星 睦美 2013年6月18日 1:04
    • 回答としてマーク 星 睦美 2013年6月26日 7:14
    2013年6月15日 5:53

すべての返信

  • 質問文は64bit OSの問題とされていますが、本当に64bit OSが問題なのですか? つまりWindows 7 32bit とWindows 7 64bitの比較をされたのでしょうか?

    • 回答の候補に設定 佐祐理 2013年6月18日 5:55
    2013年6月13日 3:03
  • ご返信ありがとうございます。

    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マシンは
    無く、未実施な状態です。

    引き続きよろしくお願いいたします。

    2013年6月14日 4:04
  • 明確な答えを持っているわけではないのですが思うところを書きます。

    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のデバイスドライバーに送信されるので本来速度差はないと思います。
    この辺りはプロファイラーでどの処理に時間を要しているのか確認すれば、問題ははっきりすると思います。

    • 回答の候補に設定 星 睦美 2013年6月18日 1:04
    • 回答としてマーク 星 睦美 2013年6月26日 7:14
    2013年6月15日 3:01
  • PixelFormatの設定はどうなっているのでしょうか。

    ChoosePixelFormat()は引数のPIXELFORMATDESCRIPTORの設定を無視することがありますので、ChoosePixelFormat()の戻り値をDescribePixelFormat()で確認されてはいかがでしょうか。

    • 回答の候補に設定 星 睦美 2013年6月18日 1:04
    • 回答としてマーク 星 睦美 2013年6月26日 7:14
    2013年6月15日 5:53
  • ご回答ありがとうございます。

    非常にお恥ずかしい話なのですが、インストーラーにOpenGL32.dll が入っており、インストールフォルダに
    コピーされ、それを参照していた模様です。

    大変申し訳ありません。

    貴重なアドバイスありがとうございました。

    2013年6月18日 5:42
  • ご回答ありがとうございます。

    非常にお恥ずかしい話なのですが、インストーラーにOpenGL32.dll が入っており、インストールフォルダに
    コピーされ、それを参照していた模様です。

    大変申し訳ありません。

    貴重なアドバイスありがとうございました。

    2013年6月18日 5:42
  • フォーラム オペレーターの星 睦美です。

    tomai45 さん
    返信ありがとうございます。今回はコミュニティの回答者とのやりとりが見直すきっかけになったのではないかと思います。

    同様の事象で情報を探している方には、回答者のアドバイスとtomai45 さんからの最終的に解決した内容を例として参考にしていただきたいと思います。私から[回答としてマーク] させていただきました。

    では今後ともMSDN フォーラムをお役立てください。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年6月26日 7:20