This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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



您好,

我將我的cache規劃128KB可自己使用,為了加速運算,我將每行的資料從DDR搬到L2 buffer,

計算每行搬運的時間,卻發現一個很怪異的問題,

當影像寬度是128的整數倍的某個小區間內,搬運的時間會比其它寬度多了近50倍的時間,

例如:  影像大小 4096x222, 4098x222, 4093x222, 會比4333x222搬一行的時間多了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];

    }

}

  • 地址及长度要保证cache line对齐。请看下面的cache user guide。
    2.4.3 Usage Guidelines for L2 Cache Coherence Operations
    http://www.ti.com/lit/ug/sprugy8/sprugy8.pdf

  • 您好,

    剛同事告訴我大陸行列和台灣的行列意思是相反的,我怕您有誤會意思,因此再解釋一次問題, 我這裡的列都是指垂直的資料,

    程式碼有附搬運每列影像高度資料:

    我將我的cache規劃128KB可自己使用,為了加速運算,我將每列的資料(垂直的資料)從DDR搬到L2 buffer,

    計算每列搬運的時間,卻發現一個很怪異的問題,

    當影像寬度是128的整數倍的某個小區間內,搬運的時間會比其它寬度多了近50倍的時間,

    例如:  影像大小 4096x222, 4098x222, 4093x222, 會比4333x222搬一列的時間多了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];

        }

    }