购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 内存管理

内存管理在传统串行程序中是非常常见的。寄存器空间、栈空间内的内存由机器自己管理,堆空间由用户控制分配和释放,MXMACA程序也是一样的,只是MXMACA提供的API可以分配管理设备上的内存,当然也可以用MXMACA管理主机端的内存,主机端的传统标准库也能完成主机端内存管理。

主机端和设备端内存函数见表3-1。

表3-1 主机端和设备端内存函数

mcMalloc负责分配GPU内存,并以devPtr的形式返回指向所分配内存的地址。其函数原型为mcError_t mcMalloc(void** devPtr,size_t size)。

mcMemcpy负责主机端与函数之间的数据传输,其函数原型为mcError_t mcMemcpy(void* dst,void* src,size_t count,mcMemcpyKind kind)。该函数从src指向的源存储区复制一定数量的字节到dst指向的目标存储区,复制方向由kind指定,其中,kind有以下4种:mcMemcpyHostToHost、mcMemcpyHostToDevice、mcMemcpyDevcieToHost和mcMemcpyDeviceToDevice。这个函数是以同步方式执行的,即在mcMemcpy函数返回以及传输操作完成之前,主机端应用程序是阻塞的。

MXMACA内存管理示意图如图3-5所示,内存是分层次的,第6章会详细介绍每个具体的环节。

图3-5 MXMACA内存管理示意图 lEhKBdvBeuhgthXjYFWaFAgyH5i+m+MyagunJrN3oE+0m9Le+s6EJ42i8HqfbcZ6

点击中间区域
呼出菜单
上一章
目录
下一章
×