__device__ __constant__ const

时间:2011-11-01 02:13:30

标签: cuda

有什么区别,在CUDA程序中定义设备常量的最佳方法是什么?在C ++,主机/设备程序中,如果我想将常量定义为设备常量内存,我可以做任何一个

__device__ __constant__ float a = 5;
__constant__ float a = 5;

问题1.在设备2.x和CUDA 4上,它是否与

相同
__device__ const float a = 5;

问题2.为什么在PyCUDA SourceModule(“”“......”“”)中,它只编译设备代码,甚至以下工作?

const float a = 5;

1 个答案:

答案 0 :(得分:7)

在CUDA中__constant__是一个变量类型限定符,表示声明的变量将存储在设备常量内存中。引用CUDA编程指南的B 2.2节

  

__constant__限定符,可选择与__device__一起使用,   声明一个变量:

     
      
  • 驻留在恒定的内存空间中,
  •   
  • 具有应用程序的生命周期,
  •   
  • 可以从所有线程访问   在网格内,从主机到运行时库   (cudaGetSymbolAddress() / cudaGetSymbolSize() / cudaMemcpyToSymbol() /   cudaMemcpyFromSymbol()表示运行时API,cuModuleGetGlobal()表示   驱动程序API)。
  •   

在CUDA中,常量内存是通过高速缓存访​​问的专用静态全局内存区域(为此目的有一组专用的PTX加载指令),它们对于正在运行的内核中的所有线程是统一且只读的。但是,通过使用上面引用的主机端API,可以在运行时修改常量内存的内容。这与使用const声明向编译器声明变量不同,后者在声明范围内向变量添加只读特性。两者完全没有相同之处。