Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第一次Cuda调用时OpenCV Cuda“无效设备功能”_Opencv_Visual Studio 2013_Cuda - Fatal编程技术网

第一次Cuda调用时OpenCV Cuda“无效设备功能”

第一次Cuda调用时OpenCV Cuda“无效设备功能”,opencv,visual-studio-2013,cuda,Opencv,Visual Studio 2013,Cuda,我已经成功地使用gpu支持构建OpenCV有一段时间了,但是,我遇到了一个似乎无法修复的情况。在使用VS 2013和CUDA 8.0构建OpenCV 3.3之后,OpenCV cpu和gpu似乎在我的两台测试机器GTX 750 Ti和GTX 950M上工作良好,这两台机器都使用Windows 10。在另一台带有GTX 1050 Ti的机器上,cpu调用work,但我在第一次调用OpenCV cuda函数时得到了一个无效的设备函数。在CMake中,我修改了CUDA_ARCH_BIN和CUDA_生成

我已经成功地使用gpu支持构建OpenCV有一段时间了,但是,我遇到了一个似乎无法修复的情况。在使用VS 2013和CUDA 8.0构建OpenCV 3.3之后,OpenCV cpu和gpu似乎在我的两台测试机器GTX 750 Ti和GTX 950M上工作良好,这两台机器都使用Windows 10。在另一台带有GTX 1050 Ti的机器上,cpu调用work,但我在第一次调用OpenCV cuda函数时得到了一个无效的设备函数。在CMake中,我修改了CUDA_ARCH_BIN和CUDA_生成变量并进行了重建,但我似乎无法为这台机器找到解决方案。我更新了英伟达图形驱动程序,在Cu普勒,麦斯威尔和3.0,3.5,3.7,5.0和CUAUDA生成CUAYARCHARIB BIN。所有测试都在两台测试机器上进行,但在第三台测试机器上失败,并出现相同的错误。我在网上发现的一切都表明,这是由于GPU的计算能力与CUDA_ARCH_BIN设置不匹配造成的。我认为,如果我设置为5.0/Maxwell,它将在Maxwell、Pascal和更新版本上运行。唯一的另一个变量是1050TI在Windows7上运行,我祈祷这不是问题所在。或者VS2013、Cuda 8.0和/或OpenCV 3.3之间可能存在不兼容?任何想法都将不胜感激

感谢@RobertCrovella提供了正确的答案。通过简单地将6.1添加到CMAKE中的CUDA_ARCH_BIN列表中,问题就解决了。所以我最后用的是 CUDA_ARCH_BIN=5.0,5.2,6.0,6.1,因为我只对Maxwell和Pascal感兴趣 我让CUDA_一代人空着。如果你为CUDA_世代选择一些东西,它会自动为你填充CUDA_拱门_垃圾箱……对我来说,它给了我比我想要的更多

旁注:我注意到,添加到CUDA_ARCH_BIN的架构越多,OpenCV DLL就越大。这正好支持罗伯特在评论中所说的。似乎对于列表中的每个体系结构,该体系结构的特定代码都会添加到dll中。如果不在列表中放置拱门,代码将不会在该拱门上运行

现在一切似乎都很明显

再次感谢你,罗伯特

对于感兴趣的用户,以下是我的CUDA CMAKE设置:


我建议为Pascal 1050添加arch 6.1/Pascaldevice@RobertCrovella当我写这个问题时,我突然想到这可能就是问题所在。我认为将CUDA_ARCH_BIN设置为3.0、3.2、3.5、3.7、5.0、5.2可以在6.1卡上使用。我想也许你想要涵盖的每一种计算能力都必须在列表中?不管怎样…现在开始构建,并将返回报告。这完全取决于cmake如何将这些条目转换为实际的CUDA构建开关。如果它指定包含PTX,则您是正确的。如果没有,我是对的。由于无效设备功能错误是构建映像中不存在合适的PTX的决定性指示,我倾向于相信我是正确的,并且与您自己的说法一致:我在web上找到的所有信息都表明,这是由于GPU的计算能力与CUDA_ARCH_BIN设置不匹配造成的