CUDA与HIP GPU语言:底层性能之选
1. 内存管理优化
在GPU编程中,内存管理是提升性能的关键因素。使用固定内存(pinned memory)而非可分页内存,能显著提高性能。CUDA提供了 cudaHostMalloc 函数来分配固定内存,它可直接替代常规的系统 malloc 例程,只是参数略有不同,示例代码如下:
double *x_host = (double *)malloc(stream_array_size*sizeof(double));
cudaMallocHost((void**)&x_host, stream_array_size*sizeof(double));
不过,大量使用固定内存也存在弊端。在多用户、多应用的操作系统中,内存分页(memory paging)是将内存页面临时移至磁盘,以便其他进程运行的过程。它能让用户感觉拥有比实际更多的内存,例如在使用Word时临时启动Excel而无需关闭原应用。但内存分页操作开销较大,在高性能计算中,为避免严重的性能损失,通常会避免使用内存分页。
部分同时具备CPU和GPU的异构计算系统正在引入统一内存(unified memory)。统一内存为CPU和GPU提供了单一的地址空间,由GPU运行时系统自动处理数据移动。虽然可能仍存在两个独立的数组,但数据会自动迁移。在集成GPU上,甚至可能无需移动内存。不过,为确保程序能在没有统一内存的系统上运行,建议编写显式的内存复制代码,若架构不需要,可跳过内存复制操作。
超级会员免费看
订阅专栏 解锁全文
42

被折叠的 条评论
为什么被折叠?



