CPU 和 GPU 内存共享

CPU and GPU memory sharing

如果(独立的)GPU 有自己的视频 RAM,我必须将我的数据从 RAM 复制到 VRAM 才能使用它们。但是,如果 GPU 与 CPU(例如 AMD Ryzen)集成并共享内存,我是否还必须制作副本,或者它们是否可以交替访问同一内存块?

在集成显卡的情况下可以避免复制,但此功能因平台而异,不同供应商的工作方式可能不同。

How to Increase Performance by Minimizing Buffer Copies on Intel® Processor Graphics 文章介绍了如何为 Intel 硬件实现此目的:

To create zero copy buffers, do one of the following:

Use CL_MEM_ALLOC_HOST_PTR and let the runtime handle creating a zero copy allocation buffer for you

If you already have the data and want to load the data into an OpenCL buffer object, then use CL_MEM_USE_HOST_PTR with a buffer allocated at a 4096 byte boundary (aligned to a page and cache line boundary) and a total size that is a multiple of 64 bytes (cache line size).

When reading or writing data to these buffers from the host, use clEnqueueMapBuffer(), operate on the buffer, then call clEnqueueUnmapMemObject().

GPU 和 CPU 内存共享? GPU 有多个核心,没有控制单元,但 CPU 通过控制单元控制 GPU。专用 GPU 有自己的 DRAM=VRAM=GRAM,速度比集成 RAM 快。当我们说集成 GPU 时,它的意思是 GPU 与 CPU 放置在同一芯片上,并且 CPU 和 GPU 使用相同的 RAM 内存(共享内存)。

对其他类似问答的引用:

  • GPU - System memory mapping
  • Data sharing between CPU and GPU on modern x86 hardware with OpenCL or other GPGPU framework