网站策划素材,怎样在百度上免费建网站,易联网站制作,网站优化链接CUDA编程模型 我们使用CUDA_C语言进行CUDA编程#xff0c; 1#xff0c;CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2#xff0c;CUDA编程模型提供了内存访问控制#xff0c;我们可以实现主机和GPU设备内存的控制#xff0c;我们可以实现CPU和GPU之间内存的数据传…CUDA编程模型 我们使用CUDA_C语言进行CUDA编程 1CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2CUDA编程模型提供了内存访问控制我们可以实现主机和GPU设备内存的控制我们可以实现CPU和GPU之间内存的数据传递。 3CUDA编程模型提供了内核函数进行并行运算时就是由GPU协调处理线程指向并行运算多个内核函数。
CUDA线程模型
线程模型结构
从逻辑层面讲CPU内线程可以被划分为grid网格和block块。 每一个内核执行就会产生一个与之对应的grid运行。 grid和block都是多维的。它们最多可以是三维的。
线程管理
每一个线程具有blockIdx和threadIdx唯一标识。blockIdx和threadIdx是三维的通过x、y和z访问。线程模型维度通过blockDim和gridDim标识。它们一样是三维的一样通过x、y和z访问。线程IDthread ID用于标识线程在block中的相对位置的标识和可以由线程标识和blockDim计算出来如果block维度为DxDy线程标识为ij那么thread IDij*Dx 上图中的thread ID 以此为 0 123456789101112131415。
内存模型 shared memory共享内存 共享内存被同一个block中的所有线程所共享它是一种片上存储空间具有低延迟和高带宽的特点。 内核函数中使用__shared__修饰的变量保存在shared memory中。 register寄存器 每个线程独有一个register其他线程不能访问。 它是访问速度最快的内存内核函数代码中没有任何其他修饰符的自动变量存放在register中以此加快运行速度。 local memory本地内存 每个线程独有一个local memory其他线程不能访问。 其速度略慢于register。 内核函数中无法放在register中的变量会存放在local memory中如无法确定下标的数值较大的数据结构等。 constant memory常量内存 全局内存用于host和所有的thread都可以访问到global memory。 内核函数中使用__constant__修饰的变量存储在constant memory中。 global memory全局内存 全局内存用于host和所有的thread都可以访问到global memory。 在CUDA编程中它是内存数量最大、使用最多、延迟最大的内存 静态分配时使用__device__关键字修饰动态分配时在主机中使用内存管理函数。 其适用于主机和device的大量数据交互。
内存管理
内存管理的API接口