您好,
我的L2 buffer大小只有128KB可使用,
我在寫影像處理gray_dilation演算法時,必須將每列的資料搬移到L2 buffer,做寬度的擴增,再將每行的影像資料搬移到L2 buffer運算,做高度的擴增,
但我卻發覺當我把影像每列的資料搬到L2 buffer, 因為資料橫向排列是連續的,所以搬過去很快,
但做高度擴增時,我把每行影像資料搬到L2 buffer, 因為資料不連續的,我搬每個行的1個像素, 它其實也把整列一起搬過去,所以相當花時間,
搬行資料和搬列的資料所花費的時間差了上百倍之多,想請教有沒有什麼方法可以增快高度資料的搬移呢? 因為cache的容量並不大,
當影像的高度資料太長,搬運時間就比搬列的資料多了好多倍,下面是搬高度資料和搬寬度資料到L2 buffer的程式碼,
請問有什麼解決方法嗎?
//搬高度資料
for(i=0; i<imageWidth; i++)
for(j=0; j<imageHeight; j++) {
L2Buff[j] = imgData[i + j*imageWidth];
}
//搬寬度資料
for(j=0; j<imageHeight; j++)
{
memcpy(tmpBuff, imgData, imageWidth*sizeof(U8));
imgData+= imageWidth;
}
Chia-Hung Chen1:
抱歉補充一下,
台灣的列和行剛好和大陸的列和行意思相反,我這裡的列是指橫的影像寬度資料,
行是指垂直的影像高度資料
Thomas Yang1:
回复 Chia-Hung Chen1:
可以考虑用EDMA搬移嘛,里面有3D模式,可以通过指定 index 增加来调整源和目的数据的offset。
具体使用可以参考下EDMA UG的 3D模式章节