const定义的变量
在CUDA编程中,const关键字用于声明一个常量,这意味着该变量的值不能被修改。在CUDA中,使用常量可以提高程序的性能,因为编泽去可以在代码中进行常量折叠,从而消除了在代码中使用变量的开销。此外,常量在内存中有其专用的存储区域,这意味着它们可以具有更快的访问速度。
在CUDA中,常量通常用于存储不变的值。例如数学常数或程序参数。可以使用__constant__修饰符将常量定义为CUDA全局内存中的常量,这样它们就可以在设备代码中使用。在主机代码中,可以使用cudaMemcpyToSymbol()函数将常量从主机内存复制到设备内存中。
需要注意的是,虽然CUDA中的常量是不可修改的,但是在某些情况下,可以通过一些技巧来修改它们的值。例如,可以使用cudaMemcpyTosymbol()函数将新值复制到常量的内存位置。但这通常是不推荐的做法,因为它可能会破坏代码的正确性和可维护性。
注意:在判断两个浮点数是否相等时,不能用运算符 ==,而要将这两个数 的差的绝对值与一个很小的数进行比较。在上述程序中,我们假定,当两个双精度 浮点数的差的绝对值小于 10−15 时它们就是相等的。求绝对值的函数在 C++ 头文 件 中声明,故需要在程序开头包含此头文件
GPU内存![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/642fc32df8574ceacb0af4a23fab8b26.png)
gridDim\blockDim 分别是网格维度、线程块维度
blockIdx、threadIdx 分别是线程块号(对应网格大小)、线程号(对应线程块大小)
共享内存使用:
shared 共享内存限定符。
需要强调的是,在一个核函数中定义一个共享内存变量,就相当于在每一个线 程块中有了一个该变量的副本。每个副本都不一样,虽然它们共用一个变量名。核函数中 对共享内存变量的操作都是同时作用在所有的副本上的。
Extern shared 动态共享内存,不能定义数组大小。
使用动态共享内存不会影响程序性能,但有时可提 高程序的可维护性