关于Cuda的参考论点

Lv *_*ang 2 parallel-processing cuda nvidia

我不知道cuda不支持引用参数.我的程序中有以下两个功能:

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

  __device__ __forceinline__ void
  computeAdjacentValue (int x1, int y1, int x2, int y2, float& value )
  {   ....
  }
Run Code Online (Sandbox Code Playgroud)

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

我搜索了一些解决方案.有人说不允许这样做.但设备功能不会报告此类错误.我很困惑,cuda是否支持参考论证.或者编译器被某种方式欺骗了.

任何人都可以给出这个问题的完整答案:允许参考但不允许参考?

Rob*_*lla 5

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

__device__函数可以使用参考参数,但是,因为访问在设备代码的装置指针是合法的.

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

ExtractDisparityKernel (  ExtractDisparity *es)
Run Code Online (Sandbox Code Playgroud)

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