計算機設計的指導原則

基於《計算機體系結構:量化研究方法》1.9 計算機設計的量化原理編程

瞭解更多的信息後,會發現相同的思路和原則貫穿底層到上層,硬件到軟件。這一章節中的設計指導原則對於上層編程也是有參考意義的。緩存

充分利用並行

充分利用並行是提高性能的最重要的方法之一。從最底層的CPU到操做系統級,再到設備級,均可以經過實現並行來知足性能需求,但並行化可能會增長通訊成本。oop

指令級並行

在單獨處理器級別,充分利用指令間的並行對於實現高性能很是關鍵。咱們能夠知道並不是全部指令執行都取決於與其相鄰的前一條指令,所以有可能徹底並行或部分並行地執行這些指令。
流水線是你們最熟悉的指令級並行示例。流水線背後的基本思想就是將指令執行重疊起來,以縮短完成指令序列的總時間。性能

執行下面的代碼會發現執行Loop 1的時間大概是執行Loop 2的1.5倍左右。優化

int main()
{    
    int count = 100000000;
    int a[2] = {0};
     // Loop 1
    clock_t s = clock();
    for( int i = 0; i < count; ++i ){
        a[0]++;
        a[0]++; // 依賴於上一行代碼的執行結果
    }
    clock_t e = clock();
    printf( "Loop 1 cost %u\n", e - s );

    // Loop 2
    s = clock();
    for( int i = 0; i < count; ++i ){
        a[0]++;
        a[1]++; // 徹底獨立於上一行代碼
    }
    e = clock();
    printf( "Loop 2 cost %u\n", e - s );

    return 0;
}

線程級並行

線程能夠分爲硬線程和軟線程編碼

  • 硬線程並行就是多個CPU並行處理
  • 軟線程並行就是操做系統支持多任務並行,充分利用CPU。

局部性原理

局部性分爲時間局部性和空間局部性操作系統

  • 時間局部性:最近訪問的數據在接下去的一段時間內有很大機率還會被訪問
  • 空間局部性:被訪問的數據附近的數據有很大機率會被訪問

CPU的L1 cache、操做系統的page cache等都是基於該原理的應用。正由於存在局部性,因此能夠提早加載數據到緩存或者將數據保存在緩存中以便後續快速訪問。
不一樣數據類型的局部性是存在差別的,所以L1 cache還分爲指令cache和數據cache。這對編碼中使用緩存是有指導意義的,即不一樣類型的數據不公用緩存,能夠提高各自的命中率,提升性能。線程

重點關注常見情形

進行設計權衡時,常見情形要優先於很是見情形。優化這些常見情形對性能的提高更明顯。有一種基本定律能夠量化這一原則,即Amdahl定律。利用Amdahl定律,能夠計算出改善系統中某一部分能得到的性能增益。
簡單粗暴的理解就是常見情形在整個執行過程當中佔據的比例是最大的,優化常見情形的執行時間,性價比最高。設計

相關文章
相關標籤/搜索