gpt4 book ai didi

c++ - 如何为 GpuMat 编写内核?

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:29 26 4
gpt4 key购买 nike

<分区>

我正在尝试使用以下代码迭代 cv::cuda::GpuMat:

__global__ void kernel(uchar* src, int rows, int cols, size_t step)
{
int rowInd = blockIdx.y * blockDim.y + threadIdx.y;
int colInd = blockIdx.x * blockDim.x + threadIdx.x;

if ((rowInd < rows) && (colInd < cols))
{
uchar * rowptr = src + (rowInd * step);
rowptr[colInd] = 255;
}

}

void invoke_kernel(cv::cuda::GpuMat _img)
{
dim3 tpb(50, 50);
dim3 bpg(((_img.cols + 49) / 50), ((_img.rows + 49)/ 50));
kernel<<<bpg, tpb>>> (_img.data, _img.rows, _img.cols, _img.step);

}

int main()
{


cv::cuda::GpuMat mat;
mat.create(cv::Size(500, 500), CV_8UC1);
std::cout << mat.rows << " " << mat.cols << std::endl;
invoke_kernel(mat);

cv::Mat img;
mat.download(img);

cv::namedWindow("test");
cv::imshow("test", img);
cv::waitKey(0);

return 0;
}

如您所见,它只是应该将整个(原本是黑色的)图像的内核设置为白色。

图像只是保持黑色,除了第一列,那是白色的。感觉就像我在某处做了一些非常愚蠢的事情,但我就是想不通:/

我检查了内核是否以正确的尺寸运行(10x10 block ,每个 block 50x50 个线程)。当我尝试使用 NVIDIA 调试器时出现另一个问题。经过一些谷歌搜索后,我发现 NVCC 编译器似乎在优化期间删除了我的 rowInd 和 colInd 变量,因此调试器不显示它们的值。

感谢您的宝贵时间。

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