C++ OpenCV GPU挂毯

C++ OpenCV GPU挂毯,c++,opencv,cuda,C++,Opencv,Cuda,我想我这里有一个有趣的问题,我很想得到一些帮助 硬件 2台相同的机器 i-74770 华硕摩博 8GB内存 GTX 750(麦克斯韦)(驾驶员版本335.23) 软件 VS2010 VS2012 OpenCV 2.4.5(在开普勒硬件上编译) Cuda 5.0 正如标题所说,当我尝试创建OpenCVGpuMat(cv::gpu::GpuMat)时,程序将“挂起”。我的意思是不会再执行。有趣的是CUDA安装成功,OpenCV头使用CMake编译,并在其他计算机上进行了验证(并且gpu::s

我想我这里有一个有趣的问题,我很想得到一些帮助

硬件

2台相同的机器

  • i-74770
  • 华硕摩博
  • 8GB内存
  • GTX 750(麦克斯韦)(驾驶员版本335.23)
软件

  • VS2010
  • VS2012
  • OpenCV 2.4.5(在开普勒硬件上编译)
  • Cuda 5.0
正如标题所说,当我尝试创建OpenCV
GpuMat
cv::gpu::GpuMat
)时,程序将“挂起”。我的意思是不会再执行。有趣的是CUDA安装成功,OpenCV头使用CMake编译,并在其他计算机上进行了验证(并且
gpu::setDevice()
在当前计算机上不会返回错误),并且该程序偶尔会运行。下面的代码是我正在测试的

在下面的实现中,代码将挂起在
gpuMat_1.upload(cpuMat_1)
。以前(当作为基准测试以确保某些部件正常工作时),
gpuMat.upload
将完成。在确认在两台相同的机器(每台都有GTX 750)上,两台机器都有两次上载和一次添加(当前显示),并且不会完成第一次上载。当第二次上载被删除,并且添加了它时,它在第一次上载期间仍然挂起

谢谢你的帮助。如果我还有什么需要补充的,或者有助于澄清问题的,请询问

#include <iostream>
#include <opencv2\gpu\gpu.hpp>

int main()
{
    std::cout << "Number of gpu devices: " << cv::gpu::getCudaEnabledDeviceCount() << std::endl;

    cv::Mat cpuMat_1, cpuMat_2;
    cv::gpu::GpuMat gpuMat_1, gpuMat_2, gpuMat_3;

    cpuMat_1 = cv::Mat::ones(4, 4, CV_8SC1);
    cpuMat_2 = cv::Mat::ones(4, 4, CV_8SC1);

    gpuMat_1.upload(cpuMat_1);
    std::cout << "Help." << std::endl;
    gpuMat_2.upload(cpuMat_2);
    std::cout << "Please, help." << std::endl;

    cv::gpu::add(gpuMat_1, gpuMat_2, gpuMat_3);

    std::cout << "Help has come." << std::endl;

    system("PAUSE");
    return 0;
}
#包括
#包括
int main()
{

std::cout问题是OpenCV 2.4.5和新的Maxwell架构不兼容。我能够将我的手放到Quadro 600上并安装它来测试它,它工作正常。然后我用GTX 650测试了它,它也工作了。然后我用650上的mog2运动检测库测试了它,它也工作了。

335.23.我现在就添加它,谢谢你提醒我。你应该有OpenCV库的
.pdb
文件,试着在调试器中运行它,并使用中断/断点和步进/结束来了解它在挂起之前/何时做了什么。它是否进入某种循环、挂起CUDA调用等。这可能有助于诊断问题。在在当前的实现(上面的代码)中,我在gpuMat_1.upload中添加了一个断点,并且“Show next statement”没有显示任何内容,“Step Into”导致它挂起。之前我将gpuMat初始化更改为指针,它将进入构造函数,只有在“create”时挂起被称为。编辑:语法。你知道OpenCV 2.4.9是否与Maxwell架构兼容吗?我刚买了一个GeForce 750 Ti用于OpenCV!!希望我几周前读过这篇文章。我现在不能肯定地回答这个问题。我们最终会更新所有库,但不知道什么时候。如果你测试它,请让我知道。G不工作。事实证明,Maxwell使用了一种新的架构50。请看:。只需将CUDA_ARCH_BIN设置为1.12.0 3.0 3.5 5 5.0,并将CUDA_ARCH_PTX设置为5.0,这将告诉NVCC为1.1-5.0架构创建二进制代码(准备运行)并创建PTX(JIT编译)对于5.0,如果您编写任何特定于5.0的代码,它将向后兼容到其他体系结构。希望这有帮助。这些设置(CUDA_ARCH_PTX和CUDA_ARCH_BIN)是在CMake中…以防不清楚。:-)太棒了,我记得检查过它们,但没有得到相同的结果…我很快会再试一次并进行测试。可能是我忘记了其中一个盒子,因为我是根据我同事最初告诉我的情况来做的。