gpt4 book ai didi

C++:升级到 GTX970 后,cv::gpu::GpuMat::upload 出现长时间延迟

转载 作者:搜寻专家 更新时间:2023-10-31 01:41:51 28 4
gpt4 key购买 nike

我在我的程序中使用 OpenCV 的 gpu 模块 (cuda) 有一段时间了,它运行良好。现在我把我的显卡升级到了 gtx970。现在,我在启动程序后第一次调用 cv::gpu::GpuMat::upload 时出现了很长的延迟。使用我的旧显卡 (GTX770),这几乎是瞬间完成的。

示例:我有一张尺寸为 512x600 像素的图像。使用此图像需要 12 秒。如果我在不关闭程序的情况下再次执行相同的代码,它会立即运行。我知道启动程序后第一次执行CUDA代码是在GPU上编译的,所以有一定的延迟是正常的。但对我来说,这似乎是莫名其妙的长,特别是因为使用旧卡速度要快得多。

有谁知道什么会导致这种行为?与 GTX970 卡相关的当前 OpenCV 版本是否存在任何已知问题?我使用的版本是 2.4.10,这是除了 3.0beta 之外的最新版本。

我现在还发现有专门支持 GTX970 和 GTX980 显卡的 CUDA Toolkit Release:

https://developer.nvidia.com/cuda-dow ...

我下载了它并用它再次编译了 OpenCV。不幸的是,这并没有解决我的问题。不知何故,我觉得现在需要更长的时间。

这里有没有人对 GTX900 卡和 OpenCV 有任何经验?

这是代码,如果有人想看的话:

    if (_cudaAvailable){
try{
_gpuUploadMutex.lock();
//upload image channels to the gpu if using cuda
cv::gpu::GpuMat gpuMat;
gpuMat.upload(_originalImage);
cv::gpu::split(gpuMat, _originalImageChannelsCuda);
_gpuUploadMutex.unlock();
std::cout << "Image uploaded to GPU successfully" << std::endl;
}
catch (...){
std::cerr << "Error occured while using CUDA, falling back to CPU. (Insufficient video RAM?)" << std::endl;
_cudaAvailable = false;
_gpuUploadMutex.unlock();
}
}

没什么特别的。导致初始延迟的代码行是 gpuMat.upload。

最佳答案

当您的程序尝试在 GPU 上执行代码时,驱动程序将检查可执行文件以寻找合适的代码以在您的特定 GPU 上运行。该可执行文件被称为“胖二进制文件”,这意味着它可以包含多种架构的代码。

在 GPU 的情况下,可执行文件可以包含不同 GPU 的机器代码以及 PTX,PTX 是一种稍微高级的语言(看起来像汇编语言),可以在运行时编译到特定的 GPU。

在您的情况下,我猜测二进制文件包含原始 GPU 的机器代码(GTX770 的计算能力为 3.0),但不包含新 GPU 的机器代码(GTX970 的计算能力为 5.2)。因此,当您在新 GPU 上运行时,驱动程序会找到 PTX(也包含在 fat 二进制文件中)并将其重新编译为 sm5.2。重新编译需要时间。

如果你能找到你的编译命令,你会看到类似这样的东西:

nvcc ... -gencode arch=compute_30,code=\'compute_30,sm_30\'

你应该改成:

nvcc ... -gencode arch=compute_30,code=\'compute_30,sm_30,sm_52\'

关于C++:升级到 GTX970 后,cv::gpu::GpuMat::upload 出现长时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27795501/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com