Cuda __设备常数常数常数
在CUDA程序中定义设备常数的最佳方法是什么?在C++、主机/设备程序中,如果我想定义常量在设备常量内存中,我可以做< /P>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
__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)?