gpt4 book ai didi

cuda - Cuda 上的引用参数

转载 作者:行者123 更新时间:2023-12-05 09:23:59 54 4
gpt4 key购买 nike

我不知道 cuda 不支持引用参数。我的程序中有这两个函数:

  __global__ void
ExtractDisparityKernel ( ExtractDisparity& es)
{
es ();
}

__device__ __forceinline__ void
computeAdjacentValue (int x1, int y1, int x2, int y2, float& value )
{ ....
}

给定global函数,编译报错: /home/lv/pcl-trunk/gpu/kinfu_large_scale/src/cuda/estimate_combined.cu(959): 错误:global 例程不能有引用参数

我搜索了一些解决方案。有人说不允许。但是 device 函数不会报告此类错误。我很困惑 cuda 是否支持引用参数。或者编译器不知何故被愚弄了。

谁能给这个问题一个完整的答案:哪里允许引用,哪里不允许引用?

最佳答案

__global__ 函数的引用参数将不起作用,因为通过引用传递参数实际上会创建一个指针,该函数将使用该指针来引用该参数。然而,这通常会导致取消引用设备代码上的主机指针,这是不允许的。

但是,__device__ 函数可以使用引用参数,因为在设备代码中取消引用设备指针是合法的。

关于“解决方案”,只需传递一个指针:

ExtractDisparityKernel (  ExtractDisparity *es)

当然,请确保您传递的参数是一个正确的 cudaMalloc 创建的指针。

一般来说,与下面的评论相反,可以在 CDP(CUDA 动态并行)设置中对子内核使用引用参数。由于 CDP 设置中的其他限制,例如对父内核的本地内存空间的使用限制,某些类型的引用参数可能仍然无法使用。

随着统一内存 (UM) 的出现,现在甚至可以在从主机代码调用的内核上使用引用参数,只要正确使用 UM。同样,可以使用引用固定主机内存的引用参数。

关于cuda - Cuda 上的引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794492/

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