TI中文支持网
TI专业的中文技术问题搜集分享网站

當影像寬度是cache寬度的倍數,搬移每一行影像到L2 buffer會變很慢的問題

您好,

我將我的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];

    }

}

赞(0)
未经允许不得转载:TI中文支持网 » 當影像寬度是cache寬度的倍數,搬移每一行影像到L2 buffer會變很慢的問題
分享到: 更多 (0)