发布网友 发布时间:2023-01-20 07:22
共1个回答
热心网友 时间:2023-11-27 14:34
1. 之前的CPU和GPU地址空间不统一,CPU使用内存,GPU使用显存。当需要在GPU上运行一个Kernel的时候,是需要程序员显式的调用API将数据从内存拷贝到显存(如cudaMemcpy(host_data,device_data));当GPU完成运算时,也需要程序员将数据从显存拷贝回内存(如cudaMemcpy(device_data,host_data))。大量数据的拷贝需要花费较多时间,尤其是在之前的GPU一般是连接在PCIe总线上的情况下。
2. 内存和显存采用统一地址空间,和@泰罗Taro说的一样,目的是让CPU和GPU能看到一片共同的地址空间。不再需要程序员显式的将数据从内存拷贝到显存,可以直接通过相同的地址访问到。至于会不会提高性能,还是取决于内存和显存的设计。比如Nvidia的CUDA6也采用了CPU-GPU统一寻址,但是由于Nvidia的GPU还是通过PCIe总线和CPU通信,通过访问相同的地址虽然可以访问的CPU的数据,但是依然无法避免需要将数据从内存拷贝到显存,所以性能也不可能大幅提高。再比如AMD的APU,将CPU和GPU集成到同一个芯片上,共享同一个DRAM(显存即内存),就不存在从内存拷贝到显存的问题,可以节约之前通过PCIe拷贝数据的时间,提高一点性能。至于说让二者之间的容量不再固定受限,主要是之前的显存做在GPU内部,大小没法和CPU的内存相比,统一寻址之后就没这个问题了。