Intel® FPGA SDK for OpenCL™ Pro Edition: 最佳实践实践指南

ID 683521
日期 9/26/2022
Public
文档目录

8.2.1. Contiguous Memory Access(连续存储访问)

连续存储访问优化静态分析内核中全局加载和储存操作的访问模式。 在整个内核调用过程中发生的顺序加载或者储存操作过程中, Intel® FPGA SDK for OpenCL™ Offline Compiler指示内核访问全局存储器中的连续位置。

请参考如下代码实例:

__kernel void sum ( __global const float * restrict a,
                    __global const float * restrict b,
                    __global float * restrict c )
{
	size_t gid = get_global_id(0);

	c[gid] = a[gid] + b[gid];
}

来自数组a的加载操作使用的索引是一个work-item全局ID的指导功能。通过基于work-item全局ID的数组索引,连线编译器可以指导连续的加载操作。这些加载操作按顺序从输入数组中检索数据,并根据需要将读取的数据发送到流水线。然后,连续储存操作将退出计算流水线的结果的元素存储在全局存储器内的顺序位置上。

提示: 对任意只读全局缓冲区使用const限定词(qualifier),以便离线编译器可以对加载操作执行更积极的优化。

下图说明连续存储访问优化的实例:

图 81. Contiguous Memory Access(连续存储访问)


连续加载和储存操作提高了存储访问的效率,因为它们可以提高访问速度并减少硬件资源需求。数据同时进和出流水线的计算部分,允许计算和存储访问之间的重叠。如果可能,请使用指引连续存储器位置的work-item ID来进行访问全局存储器的加载和储存操作。对全局存储器的顺序访问提高了存储器访问效率,因为它们提供了理想的访问模式。