我现在在做4k图像的运动估计和补偿,现在计算量不大,看着ALU busy为7%,而 memory busy为 70%左右,所以这里耗时严重,现在每帧处理的速度为12ms左右,通过上面简单转换类型的话可以达到4ms,但是这里会有误差,担心误差累积后出错。 所以想找到一个读取速度优化的方法? 能有建议吗?
__global uchar* piTemp = (__global uchar*)(pchImg + y*width + x); int x0 = piTemp[0]; int x1 = piTemp[1]; int x2 = piTemp[2]; int x3 = piTemp[3];
[quote=引用 3 楼 shihufeng 的回复:] 我的数据是单通道8bit的,不想花时间和内存将其转换为int型。 现在是每次去读一个char像素值都要占用一次带宽(128bit),而有效信息只有8bit,浪费严重。 __global int* piTemp = (__global int*)(pchImg + y*width + x); 这个式子中x的偏移不为4的整数倍时会发生转换失败的。
我的数据是单通道8bit的,不想花时间和内存将其转换为int型。 现在是每次去读一个char像素值都要占用一次带宽(128bit),而有效信息只有8bit,浪费严重。 __global int* piTemp = (__global int*)(pchImg + y*width + x); 这个式子中x的偏移不为4的整数倍时会发生转换失败的。
如果你的图像格式是RGBA8888的话,那么这种取法肯定就有问题了。你如果要用int类型,那么把pchImg也变为int*就行了,不需要自己去转类型。如果你要转类型,由于pchImg原本是char*类型,所以pchImg + y*width + x这种定位肯定就不正确了,你得用: pchImg + ( y * width + x) * 4才行。
602
社区成员
575
社区内容
加载中
试试用AI创作助手写篇文章吧