sách gpt4 ai đã đi

cuda - Cuda 上的引用参数

In lại 作者:行者123 更新时间:2023-12-05 09:23:59 54 4
mua khóa gpt4 Nike

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

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

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

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

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

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

1 Câu trả lời

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

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

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

ExtractDisparityKernel ( ExtractDisparity *es)

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

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

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

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

54 4 0
Bài viết được đề xuất: c# - 在 Enum C# 中使用 Switch 语句
Bài viết được đề xuất: SQL:在一组列上查找具有匹配值的记录
Bài viết được đề xuất: uml - 如何在 uml 序列图中表示 "sub-sequences"?
Bài viết được đề xuất: regex - 正则表达式从税号中删除破折号
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com