Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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

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
C++ OpenCV CUDA:GpuMat未上载_C++_Opencv - Fatal编程技术网

C++ OpenCV CUDA:GpuMat未上载

C++ OpenCV CUDA:GpuMat未上载,c++,opencv,C++,Opencv,我正在尝试使用OpenCV 3.1中的CUDA上传到GPU: Mat testImg = Mat::zeros(Size(640,480), CV_8UC3); GpuMat gpuImg = GpuMat(testImg); 在一个简单的程序中,这是可行的。但我有一个巨大的项目,其中有两行代码无法执行,即使在主要功能的开始。我调试了它并进入了gpu_mat.cu直到第222行create(mat.size(),mat.type()): [从gpu_mat.cu中的第213行开始](此文件的完

我正在尝试使用OpenCV 3.1中的CUDA上传到GPU:

Mat testImg = Mat::zeros(Size(640,480), CV_8UC3);
GpuMat gpuImg = GpuMat(testImg);
在一个简单的程序中,这是可行的。但我有一个巨大的项目,其中有两行代码无法执行,即使在主要功能的开始。我调试了它并进入了
gpu_mat.cu
直到第222行
create(mat.size(),mat.type()):
[从gpu_mat.cu中的第213行开始](此文件的完整代码:)


mat
rows
的值为640,
cols
的值为480。有人有办法吗?我几乎陷入绝望。

GPU有多少内存?475956122列乘以640行乘以(猜测)每个元素4个字节为1.21845e12字节~=1135 GB~=1.1 TB。据我所知,没有一款GPU提供超过24GB的板载内存;我不知道为什么调试时的值这么高。在我的另一个测试程序中,COL的数量也很高。在诊断问题时,我们只能根据询问者提供的信息,在这种情况下,这表明请求的分配超过了任何已知GPU的存储容量,因此失败。可能代码中的其他地方有问题导致了这一点,但是如果没有一个最小的、可构建的和可运行的复制代码,我看不出如何在这里提供更多的帮助。投票结束。
/////////////////////////////////////////////////////upload

void cv::cuda::GpuMat::upload(InputArray arr) {
    Mat mat = arr.getMat();

    CV_DbgAssert( !mat.empty() );

    create(mat.size(), mat.type()); //programm goes until here; this function does not return; the program just hangs here

    CV_CUDEV_SAFE_CALL( cudaMemcpy2D(data, step, mat.data, mat.step, cols * elemSize(), rows, cudaMemcpyHostToDevice) ); 
}