亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是“緩存友好”代碼?

什么是“緩存友好”代碼?

C++
幕布斯7119047 2019-06-23 14:59:45
什么是“緩存友好”代碼?“緩存不友好代碼“和”緩存友好“密碼?如何確保編寫高效緩存代碼?
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

除了@marc Claesen的答案之外,我認為緩存不友好代碼的一個具有指導意義的典型示例是按列而不是逐行掃描C二維數組(例如位圖圖像)的代碼。

行中相鄰的元素在內存中也是相鄰的,因此按順序訪問它們意味著按升序訪問它們;這是對緩存友好的,因為緩存傾向于預取連續的內存塊。

相反,按列訪問這些元素是緩存不友好的,因為同一列上的元素在內存中彼此之間的距離很遠(特別是,它們的距離等于行的大小),所以當您使用這種訪問模式時,您正在內存中跳轉,這可能會浪費緩存在內存中檢索元素的努力。

破壞演出的唯一方法就是

// Cache-friendly version - processes pixels which are adjacent in memoryfor(unsigned int y=0; y<height; ++y){
    for(unsigned int x=0; x<width; ++x)
    {
        ... image[y][x] ...
    }}

// Cache-unfriendly version - jumps around in memory for no good reasonfor(unsigned int x=0; x<width; ++x){
    for(unsigned int y=0; y<height; ++y)
    {
        ... image[y][x] ...
    }}

在具有小緩存和/或與大數組(例如當前機器上的10多萬像素24 BPP圖像)工作的系統中,這一效果可能相當顯著(幾個數量級的速度);因此,如果您必須做許多垂直掃描,通常最好先旋轉90度的圖像,然后執行各種分析,從而限制緩存-不友好的代碼僅限于旋轉。


查看完整回答
反對 回復 2019-06-23
  • 3 回答
  • 0 關注
  • 792 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號