none
NVIDIA Quadro + VisualStudio 2013 で不安定動作

    質問

  • 状況説明

    OpenGLを使用したアプリケーション(32bit)を開発・メンテナンスしています。
      • 当アプリケーションを、今年 VisualStudio C++ 2008 から VisualStudio C++ 2013 へ変更しました。
      • 一部の環境で、アプリケーションが不安定(クラッシュなど)になる問題が発生しました。
          問題
        • クラッシュ(異常終了)
        • ダイアログが一瞬開くが、直ぐに閉じる。
        • ファイルを開いた際に、「ファイル名が長すぎます」のエラーが出る。
        • など
      • 調査したところ、環境が以下の場合に発生していました。
        • グラフィックボード = NVIDIA Quadro
        • 上記以外の場合は、問題は発生していない。(Intel HD, NVIDIA GeForce)
      • 暫定対処
      OpenGL関数の呼出DLLをVisualStudio C++ 2008(元に戻す)でビルドし、 NVIDIA Quadro環境で確認したところ、問題の解決を確認しました。

    Microsoftの情報

    MicrosoftサポートWeb(以下のURL)に、関係すると思われる情報がありました。
    • 英語:https://support.microsoft.com/en-us/help/2894215/you-experience-performance-issues--product-crashes--or-rendering-issue
    • 日本語:https://support.microsoft.com/ja-jp/help/2894215/you-experience-performance-issues--product-crashes--or-rendering-issue
    • VisualStudio 2013 以降で発生
    • グラフィックスドライバーのバグの可能性あり
    回避策を試してみましたが、問題は解決しませんでした。

    お願い

    現在のところ、VisualStudio C++ 2008 に戻すと問題が発生しない事より、VisualStudio C++ 2013 の問題と 思っていますが、原因や対処方法などの詳しい情報を教えて頂きたい。
    (取りあえずは、上記の暫定対処で問題を回避していますが、 一部DLLをVisualStudio C++ 2008で作るのは面倒ですし、 他システムのサポートの問題もあります。)

    2017年11月10日 9:28

すべての返信

  • まず、ドライバを最新にしてみるべきかもしれません。

    次に、改善策ではありませんが、

    対象DLLのプロジェクトののプロパティDLGの「構成プロパティ」の「全般」の中に、「プラットホームツールセット」があります。
    これを「Visual Studio 2013(v120)」から「Visual Studio 2008(v90)」にした場合にはどうなりますでしょうか。
    これで症状が出ないのであれば、少なくともVS2013でビルドすることができ、
    作業上の煩わしさはなくなると思われます。

    なお、掲載されたページはVS自体に対する設定であり、ビルドされる実行ファイルには関係ないと思われます。

    2017年11月10日 9:50
  • グラフィックスドライバを、NVIDIA社Webサイトの最新に変更しましたが、解決しませんでした。

    「プラットホームツールセット」は、試してみます。

    返信ありがとうございます。

    2017年11月10日 10:12
  • Quadroを搭載していた環境で問題が発生したとのことですが、グラフィックスハードウェア(とグラフィックスドライバー)以外の条件(OS、CPUやメモリなど)は完全に同じなのでしょうか? 対照実験の原則に基づいて論理的に検証していますか? ミスリードやバイアスを引き起こすタイトルは避けるべきです。

    また、質問をするときは最低限のマナーとして、検証したハードウェアの型番や、デバイスドライバーのバージョンも示すようにしてください。OSのバージョンなども示すべきです。

    ちなみにアプリケーションの開発にはMFCか何かのフレームワークを使っているのでしょうか? Visual Studio 2013には最新のアップデート(Update 5)を適用していますか? また、OpenGLの想定バージョンはいくつですか? もしGLEWを使っている場合、バージョンはいくつですか?

    技術系メーリングリストで質問するときのパターン・ランゲージ

    すでにほかの回答者の方から説明がなされていますが、ID 2894215のサポート記事は、Visual Studio自身の画面描画に関する問題の回避策に関するものです。Visual Studioは2010以降、画面描画の一部にWPF (Direct3D) を導入しているため、グラフィックスドライバーにバグがあるとVisual Studio自身のパフォーマンスが低下したりクラッシュしたりすることがあります。

    なお、「プラットフォームツールセットの変更」という回避策が提示されていますが、それだと結局コンパイルには旧コンパイラおよび旧SDKが使われることになり、VS2013を使う意義が薄れます。恒久的な解決策というよりは、開発環境移行時の一時的・過渡期的な用途でのみ利用するのがよいと思います。

    ところで、Visual C++ 2012以降は、x86 (32bit) プラットフォームの場合コンパイルオプション/arch:SSE2が既定で使われるようになっています。SSE2命令をサポートしない古いCPUでは問題を起こす可能性があります。

    https://msdn.microsoft.com/en-us/library/7t5yh4fd(v=vs.110).aspx

    https://msdn.microsoft.com/en-us/library/7t5yh4fd(v=vs.100).aspx

    Visual C++ 2013にて、まず/arch:IA32を試してみてください。プロジェクトのプロパティから、[構成プロパティ]→[C/C++]→[コード生成]→[拡張命令セットを有効にする]を、「拡張命令なし (/arch:IA32)」に設定することで、コンパイラはSSE/SSE2命令を使わなくなります。とはいえ、x64対応しているCPUはすべてSSE2に対応しているので、よほどの骨董品でもないかぎり/arch:SSE2が問題を起こすことはありませんが。

    他にも、一部の最適化オプションを無効化することで、正常動作するようになる可能性もあります。旧コンパイラが生成したコードでは一切問題が起きないとのことなので、QuadroグラフィックスドライバーのバグというよりはVCコンパイラが引き起こした問題である可能性が高いのではないでしょうか。

    2017年11月10日 13:49
  • Katsumi Goto さん、こんにちは
    フォーラム オペレーターの立花楓です。
     
    本件についてその後いかがでしょうか。無事に問題は解決されましたでしょうか。
    何か進展がございましたらこちらのスレッドへご返信いただけますと幸いです。

    また、お寄せいただいた情報が参考になった場合には [回答としてマーク] をお願いいたします。

    よろしくお願いします。


    MSDN/TechNet Community Support 立花楓

    2017年11月17日 2:43
    モデレータ