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是否支持参考论证.或者编译器被某种方式欺骗了.
任何人都可以给出这个问题的完整答案:允许参考但不允许参考?
__global__函数的引用参数不起作用,因为通过引用传递参数实际上会创建一个指针,该函数将用于引用参数.但是,这通常会导致在设备代码上取消引用主机指针,这是不允许的.
甲__device__函数可以使用参考参数,但是,因为访问在设备代码的装置指针是合法的.
关于"解决方案",只需传递一个指针:
ExtractDisparityKernel ( ExtractDisparity *es)
Run Code Online (Sandbox Code Playgroud)
当然,请确保您传递的参数是一个正确cudaMalloc创建的指针.