CPU与GPU统一虚拟内存(CUDA UM)原理

CUDA Unified Memory(UM)允许CPU和GPU共享内存,消除数据手动拷贝。UM通过cudaMallocManaged分配内存,并处理CPU和GPU的缺页中断。性能优化包括:使用预取和异步传输减少中断,利用cudaMemAdvise设定内存特性以减少迁移。ReadMostly标志创建只读副本,Residency标志指定数据存储位置,避免不必要的迁移。
摘要由CSDN通过智能技术生成

CPU与GPU的统一内存(CUDA Unified Memory)原理


一、UM下的CUDA编程

在PCIE接口上插上GPU,就变成了我们Desktop形式的CPU/GPU,
CPU与GPU分离,各自有属于自己的物理地址:
图1-1
在这种情况下,我们比较熟悉的CUDA编程是用cudaMalloc和cudaHostMalloc分别分配device和host内存,先后显示调用cudaMemcpy进行拷贝。

但是使用的UM (Unified Memory)的cudaMallocManaged就不需要显示的将hostMem内容拷贝到deviceMem了,例子如下:

{
   
	char * array = nullptr;       
	cudaMallocManaged(&array, N)  //分配内存
	fill_data(array);
	qsort<<<...>>>(array);        //GPU process
	cudaDeviceSynchronize();  
	use_data(array);              //CPU process
	cudaFree(array);
}

同一个指针array可以同时分别在CUDA和CPU使用,但编程框架中只显示分配了个地址数值。所以必然有底层逻辑在CPU和GPU各自独立的空间之间拷贝了数据,使其表现为程序员看似GPU和CPU使用了同一段地址。

那么问题来了,CUDA Host Runtime悄悄的做了什么。

二、UM的实现原理

我们以如上的程序为例子:

1. cudaMallocManaged分配CUDA内存

Pascal及以上架构的GPU是可以处理页错误(Page Fault)的,cudaMallocManaged是cudaRuntimeAPI,其不仅仅只为CPU分配内存,还将CPU端的页信息发送到GPU上:

图中的例子所示,假设array占用两个内存页,内存分配在GPU上,但cudaRuntime同时在CPU端创建了指针array的内存页:
图2-1
值得注意的是,由于CPU和GPU都用相同数值的array指针,所以页的页号在CPU和GPU端是相同的。

2. CPU缺页中断处理

接下来程序在CPU端调用fill_data(array)但实际上CPU没有为array实际分配内存空间,仅仅是有保留的页表存在,所以必然会产生缺页中断:
在这里插入图片描述

此时的缺页中断会促使GPU内存的内容通过PCIE总线migrate到CPU内存当中,待CPU处理完缺页,fill_data才函数会继续处理。
当GPU的页传输到CPU当中,为保证数据一致性,GPU的页就标记为失效。

3. CUDA Kernel 运行:

之后程序调用cudaKernel: sort<<<....,s>>><

  • 20
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1. CPU(Central Processing Unit):是计算机的主要处理器,用于执行程序的计算和控制操作。CPU的速度通常以时钟频率(GHz)来衡量,它能够执行大量的通用计算任务,但在处理大规模的深度学习计算任务时速度较慢。 2. GPU(Graphics Processing Unit):是专门用于处理图形和图像的处理器,但由于其并行计算的特性,也被广泛用于深度学习计算任务。GPU通常具有比CPU更多的处理单元和更高的内存带宽,能够快速地进行矩阵计算等深度学习计算任务。 3. TPU(Tensor Processing Unit):是由Google开发的专门用于深度学习计算的处理器,它在深度学习计算方面的性能比GPU更高。TPU具有高度优化的矩阵乘法和卷积操作,能够在大规模的深度学习模型中提供极高的计算性能。 4. CUDA:是由NVIDIA开发的一种用于并行计算的平台和编程模型,它支持在GPU上进行加速计算,并提供了一组API来实现并行计算任务。CUDA在深度学习计算领域得到了广泛应用,因为大多数深度学习框架都支持CUDA加速计算。 5. MKL(Math Kernel Library):是由Intel开发的一种数学库,它提供了一组高效的数学函数和算法,能够在CPU上加速矩阵计算、向量计算等计算任务。MKL在深度学习计算中也得到了广泛应用。 6. NNPACK(Neural Network Performance Pack):是Facebook开发的一个用于加速深度学习计算的库,它提供了高效的卷积计算和其他神经网络计算任务的实现。NNPACK能够在CPU上提供比MKL更高的计算性能,但通常不如GPU和TPU等专用处理器的性能。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值