【发布时间】:2019-03-19 12:53:15
【问题描述】:
如果(离散)GPU 有自己的视频 RAM,我必须将数据从 RAM 复制到 VRAM 才能使用它们。但是如果 GPU 与 CPU 集成(例如 AMD Ryzen)并共享内存,我是否仍然需要进行复制,或者它们可以交替访问同一个内存块?
【问题讨论】:
标签: gpu opencl shared-memory gpgpu video-memory
如果(离散)GPU 有自己的视频 RAM,我必须将数据从 RAM 复制到 VRAM 才能使用它们。但是如果 GPU 与 CPU 集成(例如 AMD Ryzen)并共享内存,我是否仍然需要进行复制,或者它们可以交替访问同一个内存块?
【问题讨论】:
标签: gpu opencl shared-memory gpgpu video-memory
在集成显卡的情况下可以避免复制,但此功能是特定于平台的,并且对于不同的供应商可能会有不同的工作方式。
How to Increase Performance by Minimizing Buffer Copies on Intel® Processor Graphics 文章描述了如何为 Intel 硬件实现这一点:
要创建零复制缓冲区,请执行以下操作之一:
使用 CL_MEM_ALLOC_HOST_PTR 并让运行时处理为您创建一个零拷贝分配缓冲区
如果您已经拥有数据并且想要将数据加载到 OpenCL 缓冲区对象中,则使用 CL_MEM_USE_HOST_PTR 和分配在 4096 字节边界(与页面和缓存行边界对齐)的缓冲区,总大小为64 字节的倍数(缓存行大小)。
从主机读取或写入数据到这些缓冲区时,使用clEnqueueMapBuffer(),对缓冲区进行操作,然后调用clEnqueueUnmapMemObject()。
【讨论】:
GPU 和 CPU 内存共享? GPU有多个核心,没有控制单元,但CPU通过控制单元控制GPU。专用 GPU 拥有自己的 DRAM=VRAM=GRAM,速度比集成 RAM 快。当我们说集成 GPU 时,意味着 GPU 与 CPU 放置在同一芯片上,并且 CPU 和 GPU 使用相同的 RAM 内存(共享内存)。
【讨论】: