目录
memory allccation/release 内存申请/释放
memory copy between cpu and gpu cpu与gpu之间的内存拷贝
存储单元
global memory 全局内存
constant memory 常量内存
texture memory 纹理内存
local memory 本地内存
shared memory 共享内存
register 寄存器
on chip memory 黄色:GPU上的内存,速度快,空间小,寄存器和共享内存,常量缓存和纹理缓存在片上
on board memory 蓝色:位于PCB板子上的内存,速度慢,空间大,本地内存、全局内存、常量内存、纹理内存
Register 寄存器
每个SM中若申请寄存器数量多,则block数量就会变少。
若寄存器不够用,则会出现寄存器溢出的情况,系统自动使用local memory
Shared memory
好处:将shared memory分成32个bank,使得同一时间shared memory可以响应多个thread
缺点:同一个warp多个线程访问同一个bank中的不同地址,会冲突
总结:同一个bank在同一个时间周期内只能响应同同一个warp的一次请求。
解决bank conflict
给shared memory增加一列。(没明白)
Local Memory
Constant Memory
广播机制:同一时间constant memory可以向所有thread提供数据(广播)
疑问:一个warp的所有线程还是所有线程?
Texture Memory
Global Memory
合并访存:读取global memory时,连续线程访问连续的数据,就可以返回连续数据
常用内存函数
memory allccation/release 内存申请/释放
CPU memory:malloc();memset();free();
GPU memory:cudaMalloc();cudaMemset();cudaFree()
memory copy between cpu and gpu cpu与gpu之间的内存拷贝
cudaMemcpy(void*dst,const void*src, size t count, cudaMemcpyKind kinddst: destination memory address
cudaMemcpy(void*dst,const void*src, size t count, cudaMemcpyKind kind)
- dst: destination memory address 目标内存地址
- src: source memory address 源内存地址
- count: size in bytes to copy 拷贝大小(单位字节)
- kind: direction of the copy 拷贝方向
cudaMemcpyKind 拷贝方向
- cudaMemcpyHostToDevice 主机 -> 设备
- cudaMemcpyDeviceToHost 设备 -> 主机
- cudaMemcpyDeviceToDevice 设备 -> 设备
- cudaMemcpyHostToHost 主机 -> 主机