您好,
我將我的cache規劃128KB可自己使用,為了加速運算,我將每行的資料從DDR搬到L2 buffer,
計算每行搬運的時間,卻發現一個很怪異的問題,
當影像寬度是128的整數倍的某個小區間內,搬運的時間會比其它寬度多了近50倍的時間,
例如: 影像大小 4096×222, 4098×222, 4093×222, 會比4333×222搬一行的時間多了50倍(4096約上下正負15都會花很多時間),
能否請教是什麼原因會造成這種問題?
下面是單純從DDR搬每1行影像到L2 buffer的程式
for(i=0; i<imageWidth; i++)
{
for(j=0; j<imageHeight; j++)
{
L2Buff[j] = imgData[i + j*imageWidth];
}
}
Shine:
地址及长度要保证cache line对齐。请看下面的cache user guide。2.4.3 Usage Guidelines for L2 Cache Coherence Operationshttp://www.ti.com/lit/ug/sprugy8/sprugy8.pdf
Chia-Hung Chen1:
回复 Shine:
您好,
剛同事告訴我大陸行列和台灣的行列意思是相反的,我怕您有誤會意思,因此再解釋一次問題, 我這裡的列都是指垂直的資料,
程式碼有附搬運每列影像高度資料:
我將我的cache規劃128KB可自己使用,為了加速運算,我將每列的資料(垂直的資料)從DDR搬到L2 buffer,
計算每列搬運的時間,卻發現一個很怪異的問題,
當影像寬度是128的整數倍的某個小區間內,搬運的時間會比其它寬度多了近50倍的時間,
例如: 影像大小 4096×222, 4098×222, 4093×222, 會比4333×222搬一列的時間多了50倍(4096約上下正負15都會花很多時間),
能否請教是什麼原因會造成這種問題?
下面是單純從DDR搬每1列影像到L2 buffer的程式
for(i=0; i<imageWidth; i++){
for(j=0; j<imageHeight; j++) { L2Buff[j] = imgData[i + j*imageWidth];
}
}