内存管理在传统串行程序中是非常常见的。寄存器空间、栈空间内的内存由机器自己管理,堆空间由用户控制分配和释放,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内存管理示意图