Cuda __设备常数常数常数

Cuda __设备常数常数常数,cuda,Cuda,在CUDA程序中定义设备常数的最佳方法是什么?在C++、主机/设备程序中,如果我想定义常量在设备常量内存中,我可以做< /P> __device__ __constant__ float a = 5; __constant__ float a = 5; 问题1。在设备2.x和CUDA 4上,它是否与 __device__ const float a = 5; 问题2。为什么在只编译do设备代码的PyCUDA SourceModule(“…”)中,甚至可以执行以下操作 const float

在CUDA程序中定义设备常数的最佳方法是什么?在C++、主机/设备程序中,如果我想定义常量在设备常量内存中,我可以做< /P>
__device__ __constant__ float a = 5;
__constant__ float a = 5;
问题1。在设备2.x和CUDA 4上,它是否与

__device__ const float a = 5;
问题2。为什么在只编译do设备代码的PyCUDA SourceModule(“…”)中,甚至可以执行以下操作

const float a = 5;

在CUDA
中,常量是一个变量类型限定符,指示要声明的变量将存储在设备常量内存中。引述

\uuuu常量\uuuu
限定符,可选择与
\uuu设备\uuuu
一起使用, 声明一个变量,该变量:

  • 驻留在恒定的内存空间中
  • 具有应用程序的生存期
  • 可以从所有线程访问 在网格中,通过运行时库从主机访问 ( / / / 对于运行时API和 驱动程序API)

在CUDA中,常量内存是一个专用的、静态的全局内存区域,通过缓存(有一组专用的PTX加载指令)访问,该缓存对运行内核中的所有线程都是统一的、只读的。但是常量内存的内容可以在运行时通过使用上面引用的主机端API进行修改。这与使用
const
声明向编译器声明变量不同,后者是在声明范围内向变量添加只读特征。这两个问题根本不是一回事。

问题3。这是作业吗?读起来像作业。如果是家庭作业,请添加一个
家庭作业
标签,您可能还需要
c++
,这样您会得到一些回复。我个人无法回答。我对CUDA一无所知。“或者,在计算能力为2.x的设备上,程序使用负载均匀(LDU)操作;有关详细信息,请参阅CUDA C编程指南的F.4.4节”(CUDA_C_最佳实践_指南.pdf的3.2.5恒定内存)。此外,还有所有计算能力的设备支持的恒定内存空间(在常量变量驻留的地方),compute capability 2.x的设备支持LDU(LoaD Uniform)指令,编译器使用该指令加载任何变量:*指向全局内存,*内核中的只读(程序员可以使用const关键字强制执行),*不依赖于线程ID。”所以我想,我在问哪个更好(或者它们是相同的)对于计算能力2.x设备:
\uuuu常量\uuuu
(通过PTX加载指令)或
const
通过(LDU)?