【发布时间】:2016-04-16 04:04:48
【问题描述】:
我想我有一个有趣的问题,很想得到一些帮助。
硬件
2x 相同的机器
- i-7 4770
- 华硕主板
- 8GB 内存
- GTX 750 (Maxwell)(驱动程序版本 335.23)
软件
- VS2010
- VS2012
- OpenCV 2.4.5(在 Kepler 硬件上编译)
- 库达 5.0
正如标题所说,当我尝试创建 OpenCV GpuMat (cv::gpu::Gpumat) 时,程序将“挂起”。我的意思是不会发生进一步的处决。有趣的是,CUDA 安装成功,OpenCV 头文件是使用 CMake 编译的,并且已经在其他计算机上验证过(并且gpu::setDevice() 在当前机器上不会返回错误),并且程序偶尔会运行。下面的代码是我正在测试的。
在下面的实现中,代码将挂在gpuMat_1.upload(cpuMat_1)。以前(当作为基准测试以确保某些部分正常工作时),gpuMat.upload 将完成。在确认在两台相同的机器上(每台都有 GTX 750)后,两者都被提升到有 2 个上传和一个添加(当前显示)并且不会完成第一次上传。当第二次上传被删除,并随之添加,它仍然在第一次上传期间挂起。
感谢您的帮助。如果还有什么我应该补充的,或者有助于澄清问题的,请询问。
#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;
}
更新:我最近在其中一个单元上重新编译了 OpenCV(以考虑硬件更改)并且遇到了同样的问题。
【问题讨论】:
-
335.23。我现在就加,谢谢提醒。
-
您应该有用于 OpenCV 库的
.pdb文件,尝试在调试器中运行它并使用中断/断点并单步执行/跳过以了解它在挂起之前/何时执行的操作。它是否进入某种循环、挂起 CUDA 调用等。这可能有助于诊断问题。 -
在当前的实现(上面的代码)中,我在 gpuMat_1.upload 处添加了一个断点,并且“显示下一条语句”我没有看到任何东西,“Step Into”导致它挂起。早些时候,我将 GpuMat 初始化更改为指针,它将进入构造函数,仅在调用“create”时挂起。编辑:语法。