我们所说的oclMat对齐实际上是什么意思?

我们所说的oclMat对齐实际上是什么意思?,c,opencv,opencl,C,Opencv,Opencl,阅读以下链接: 七,。oclMat中的所有矩阵在列中对齐(现在是对齐) 步骤的系数为32+字节)。意思是,m.cols*m.elemSize() 基本上,这意味着在每行之后插入一些“垃圾”字节,以便下一行的起始地址适合某种对齐方式 例如,假设您有一个由12列宽的16位整数组成的矩阵(行数并不重要)。如果每行紧跟在下一行之后,内存布局可能如下所示(假设元素开始于地址0x100000): 0x100000。。。 0x100018。。。 ... 这里,每行是12(列数)x2(每列/每元素字节)=24

阅读以下链接:

七,。oclMat中的所有矩阵在列中对齐(现在是对齐) 步骤的系数为32+字节)。意思是,m.cols*m.elemSize()
基本上,这意味着在每行之后插入一些“垃圾”字节,以便下一行的起始地址适合某种对齐方式

例如,假设您有一个由12列宽的16位整数组成的矩阵(行数并不重要)。如果每行紧跟在下一行之后,内存布局可能如下所示(假设元素开始于地址
0x100000
):

0x100000。。。
0x100018。。。
...
这里,每行是12(列数)x2(每列/每元素字节)=24字节。然而,某些架构可能不“喜欢”这样,因为每行只能保证以8字节对齐,即SSE/AVX必须使用未对齐的访问,这要慢得多

但是,如果我们“插入”8个额外的“垃圾”字节,则布局如下所示:

0x100000。。。
0x1000020。。。
...
现在,每行是12(列数)x2(每列字节)+8(垃圾字节)=32字节。现在,每行将对齐到32字节,这意味着它符合对齐AVX访问的256位对齐要求,这可以显著加快代码速度