【发布时间】:2013-10-26 03:44:45
【问题描述】:
为了了解如何确保满足对齐要求,我多次阅读 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 列)。 为了确保每个工作组正确对齐,唯一的要求是用额外的列填充输入数据,使其宽度成为工作组 X 维度的倍数。
1-谁能帮助我理解在填充每个工作组访问的第一列之后如何从 64 字节对齐的地址开始(上面段落中提到的要求,对吗?)?
2-同样,图中的陈述是正确的:对于 16 x 16 工作组,工作组将开始访问第 N*16 列的数据。
如果正确,如图所示的工作组 1,2 应该开始访问第 1x16 列的数据,与图中所示相反。 我完全糊涂了!! :(
更新: Q-2 现在我已经清楚了。 实际上图中显示的工作组是 2,1(在 opencl 约定中,第一列),所以它是完全正确的:2x16=32 而不是我想的 1x16。
但是没有问题。 1 仍未得到答复。
【问题讨论】:
标签: cuda opencl gpgpu gpu memory-alignment