缓冲器创建和数据传输 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

主机程序与硬件内核之间的交互依赖于创建缓冲器并在器件中的存储器上传入和传出数据。这一过程会利用诸如 clCreateBuffer clEnqueueMigrateMemObjects 等函数。

重要: 单一缓冲器大小不能超过 4 GB,但为了最大限度提升从主机到全局存储器的吞吐量,AMD 还建议尽可能保留大小至少为 2 MB 的缓冲器。

有两种方法可用于分配存储缓冲器和传输数据:

  1. 由 XRT 分配缓冲器
  2. 使用主机指针缓冲器

如由 XRT 分配缓冲器,请使用 enqueueMapBuffer 来捕获缓冲器句柄。在第二种情况下,使用 CL_MEM_USE_HOST_PTR 来直接分配缓冲器,因此您无需捕获缓冲器句柄。

提示: 对于嵌入式平台,请勿使用 CL_MEM_USE_HOST_PTR。嵌入式平台需持续性存储器分配,应使用 CL_MEM_ALLOC_HOST_PTR 方法,如 由 XRT 分配缓冲器 中所述。

有多种编码实践可供您用于最大程度提升性能和高精度控制。OpenCL API 还支持通过其他命令来读写缓冲器。例如,您可使用 clEnqueueWriteBuffer clEnqueueReadBuffer 命令代替 clEnqueueMigrateMemObjects。但其中部分命令具有不同的影响,使用时必须明确其作用。例如, clEnqueueReadBufferRect 可以读取缓冲器对象的矩形区域并传输到主机应用,但它不会将数据从器件全局存储器传输到主机。您必须首先使用 clEnqueueReadBuffer 将数据从器件全局存储器传输到主机应用,然后使用 clEnqueueReadBufferRect 来读取目标矩形部分,并将其传输到主机应用中。