我的目标是利用我的应用程序中的缓存内存并搜索在线示例显示使用__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] );
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译它时,我收到以下错误消息:
error: identifier "__ldg" is undefined.
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Google上搜索此错误消息的解决方案无济于事.有什么建议这个简单的例子可能有什么问题吗?
是否有我遗漏的编译器标志?
作为参考,我的设备是计算能力3.5,我正在使用CUDA 5.5
.
谢谢.
对于__ldg
一般实现任意类型并且正确地回退到小于3.5的计算能力的实现,请参阅BryanCatanzaro/generics Github项目.
这是一个裸骨模板:
template<typename T>
__device__ __forceinline__ T ldg(const T* ptr) {
#if __CUDA_ARCH__ >= 350
return __ldg(ptr);
#else
return *ptr;
#endif
}
Run Code Online (Sandbox Code Playgroud)