2017-10-19 13 views
0

私はgpuサポートでOpenCVをしばらく構築してきましたが、修正できないような状況に遭遇しました。 OpenCV 3.3をVS 2013とCUDA 8.0でビルドした後、OpenCV cpuとgpuは、私のテストマシンGTX 750 TiとGTX 950Mの両方(Windows 10とも)で正常に動作するようです。 GTX 1050 Tiを搭載した別のマシンでは、CPUが動作しますが、私は最初のOpenCV-cuda関数呼び出しで "無効なデバイス機能"を取得します。 CMakeでは、私はCUDA_ARCH_BINとCUDA_GENERATION変数を試して再構築しましたが、私はこの1台のマシンの解決策を見つけることができません。私はNVidiaグラフィックスドライバを更新し、3.0,3.5,3.7,5.0のCUDA_ARCH_BIN、MaxwellのKeplerのCUDA_GENERATIONを試してみました。すべてが2台のテストマシンで動作し、3台目と同じエラーで失敗します。私がウェブ上で見つけたすべてのことは、これはGPUの計算機能とCUDA_ARCH_BIN設定の不一致が原因であると言います。私は、5.0/Maxwellを設定すると、Maxwell、Pascals、およびそれ以降で動作すると思います。唯一の他の変数は、1050 TiがWindows 7ボックスで動作していることです。問題はないと私は祈っています。あるいは、VS2013、Cuda 8.0、および/またはOpenCV 3.3との間に互換性がないかもしれませんか?どんなアイデアでも大歓迎です。OpenCV Cuda最初のcudaコールで無効なデバイス機能

+2

私はこのことを、この質問を書いていたとして、それは私に起こったパスカル1050デバイス –

+0

@RobertCrovella用アーチ6.1 /パスカルを追加することをお勧め問題かもしれない。 CUDA_ARCH_BINを3.0,3.2,3.5,3.7,5.0,5.2に設定すると、6.1カードで動作すると思います。たぶん*あなたがカバーしたいすべてのコンピューティング機能がリストになければならないのでしょうか?とにかく今ビルドして戻ってきます。 –

+2

これは、実際にどのようにcmakeがそれらのエントリを実際のCUDAビルドスイッチに変換するかによって異なります。それがPTXの包含を指定すれば、あなたは正しいです。そうでなければ、私は正しいです。 「無効なデバイス機能」のエラーは、ビルドされたイメージに適切なPTXが存在しないことを決定的に示しているため、私は正しいと思っており、自分の声明と一貫していると考えています。これは、GPUの計算機能とCUDA_ARCH_BIN設定の間の不一致が原因であると言います –

答えて

1

正解を提供してくれた@RobertCrovellaに感謝します。この問題はCMAKEのCUDA_ARCH_BINリストに6.1を追加するだけで解決しました。だから私が使用し終わったのは でした。CUDA_ARCH_BIN = 5.0,5.2,6.0,6.1(私はMaxwellとPascalにしか関心がないので) と私はCUDA_GENERATIONを空にしました。 CUDA_GENERATIONのために何かを選択すると、自動的にCUDA_ARCH_BINがあなたのために埋められます...そして、私のために、それは私が望む以上に私を与えました。

サイドノート:CUDA_ARCH_BINに追加するアーキテクチャが多くなればなるほど、OpenCV dllが大きくなったことに気付きました。ロバートがコメントしたことを正確にサポートしています。リスト内のすべてのアーキテクチャに対して、そのアーキテクチャの特定のコードがdllに追加されているようです。リストにアーチを置かないと、コードはそのアーチでは実行されません。

これですべてが明らかになったようです。

もう一度、Robertさんに感謝します。ここ

興味のある方のために

は、私のCUDAのCMAKE設定です:

enter image description here