为了了解如何确保满足对齐要求,我多次阅读 Heterogeneous Computing with OpenCL p.no: 157 一书中的以下段落。这显示了如何为图像卷积中的问题添加填充(假设工作组大小为 16 x 16)。
内存访问对齐
NVIDIA 和 AMD GPU 的性能都受益于全局内存中的数据对齐。特别是对于 NVIDIA,对齐 128 字节边界上的访问和访问 128 字节段将理想地映射到内存硬件。但是,在此示例中,16 宽工作组将仅访问 64 字节段,因此应对齐数据到 64 字节地址。这意味着每个工作组访问的第一列应该从一个 64 字节对齐的地址开始。在此示例中,选择让边界像素不产生值决定了所有工作组的偏移量将是工作组尺寸的倍数(即,对于 16 x 16 工作组,工作组将开始访问第 N*16 列的数据) . 为确保每个工作组正确对齐,
1-任何人都可以帮助我理解在填充每个工作组访问的第一列之后如何从 64 字节对齐的地址开始(上述段落中提到的要求,对吗?)?
2-同样,该图的陈述是正确的:对于 16 x 16 工作组,工作组将开始访问 N*16 列的数据。
如果正确,如图所示的工作组 1,2 应该开始访问第 1x16 列的数据,与图中所示相反。我完全糊涂了!!:(
更新: 我现在很清楚 Q-2。 实际上图中显示的工作组是 2,1(在 opencl 约定中,第一列),所以它是完全正确的:2x16=32 而不是我想的 1x16。
但问题没有。1 仍然没有答案。