gpt4 book ai didi

c++ - 使用 OpenCV UMat 作为输入时参数的 OpenCL 参数化

转载 作者:行者123 更新时间:2023-11-28 04:50:29 26 4
gpt4 key购买 nike

我一直在查看 simple opencl example 的源代码更好地理解如何编写 opencv 代码。

似乎kernel definition具有由 9 个参数组成的参数列表:

"__kernel void magnutude_filter_8u(\n"
" __global const uchar* src, int src_step, int src_offset,\n"
" __global uchar* dst, int dst_step, int dst_offset, int dst_rows, int dst_cols,\n"
" float scale)\n"

但它是called只有 3 个参数:

bool executionResult = k
.args(
cv::ocl::KernelArg::ReadOnlyNoSize(src), // size is not used (similar to 'dst' size)
cv::ocl::KernelArg::WriteOnly(result),
(float)2.0
)

这在其他代码中也会发生,例如 canny .cl.cpp实现。

我想知道允许这种情况发生的 UMat 结构有什么特别之处。

最佳答案

如果您多浏览一下 opencv 代码,您会发现 ReadOnlyNosizeWriteOnly函数返回一个 kernelArg,它似乎是打包到一个结构中的 4 个值,内核从这 3 个中“使用”,默认情况下为每个 KernelArg 分配 2 个值,在这种情况下,这些匹配到 src_step、src_offset、dst_step 和 dst_offset ,另一方面,dst_rows 和 dst_cols 参数是从 dst UMat 大小推导出来的(再次参见 set() 调用),它们是 OpenCL 函数调用所需的所有参数。

现在 args(...) 为每个参数调用 set(int index, T type),在 KernelArg 的情况下它将是

set(int i, const KernelArg &arg);

这是做什么的 set call ,这意味着它解压缩(使用其成员)KernelArg 结构。如果您想知道它们分配给内核的位置是多少

clSetKernelArg(..)

函数内部调用

关于c++ - 使用 OpenCV UMat 作为输入时参数的 OpenCL 参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322297/

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