在编译时在cuda内核中使用__ldg时出错

用户名

我的目标是利用应用程序中的缓存,搜索在线示例表明使用__ldg应该相对简单。

NVIDIA提供了有关GPU优化的文档(可在此处找到:https : //www.olcf.ornl.gov/wp-content/uploads/2013/02/GPU_Opt_Fund-CW1.pdf),其中提供了简单的示例:

__global__ void kernel ( int *output, int *input)
{
  ...
  output[idx] = __ldg( &input[idx] );
}

但是,当我尝试对此进行编译时,出现以下错误消息:

error: identifier "__ldg" is undefined.  

不幸的是,在Google搜索此错误消息的解决方案是无济于事的。有什么建议可以解决这个简单的例子吗?
我是否缺少编译器标志?

供参考,我的设备是3.5的计算能力,我正在使用CUDA 5.5

谢谢你。

罗伯特·克罗维拉

__ldg() 固有只在计算能力3.5(或更新版本)架构可用。

这意味着:

  1. 它必须在计算3.5(或更高版本)的GPU上运行
  2. 必须为计算3.5(或更高版本)GPU进行编译
  3. 也不能为较旧的体系结构对其进行编译。

这意味着:

  1. 这是行不通的: nvcc -arch=sm_30 ...
  2. 这将起作用: nvcc -arch=sm_35 ...
  3. 这是行不通的: nvcc -gencode arch=compute30,code=sm_30 -gencode arch=compute_35,code=sm_35 ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章