細微的優化代碼

程序一:
for(i=0; i<m; i++)
{
    for(j=0; j<n; j++)
    {
        for(k=0; k<p; k++)
        {
            c[i][j] = a[i][k] * b[k][j];
        }
    }
}

程序二:
for(i=0; i<m; i++)
{
    for(k=0; k<p; k++)
    {
        for(j=0; j<n; j++)
        {
            c[i][j] = a[i][k] * b[k][j];
        }
    }
}


程序一在循環的時候給c[i][j]賦值時,a[i][k]是連續的,但是b[k][j]跳躍性很大,這樣對於cache的命中率降低了很多,故會稍微比程序二慢一些,當數據量大的時候,這種細微的差別就會體現出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章