Chapter.01漫遊電腦世界
1.1電腦的前世、今生、來世
1.1.1電腦的誕生
1.1.2從軍用到民用──飛入尋常百姓家
1.1.3個人電腦時代──英雄輩出的時代
1.1.4手機──裝在口袋的電腦
1.1.5無處不在的電腦
1.1.6電腦的來世
1.2電腦分門別類別
1.3PC個人電腦結構探秘
1.3.1處理器──一顆奔騰的心
1.3.2記憶體──大肚能容,容天下難容之事
1.3.3主機板與晶片組──架起溝通的橋樑
1.3.4輸入裝置──五覺
1.3.5顯示裝置──顏面
1.3.6顯示卡──我貴,因為我專業
1.3.7通訊介面──關節
1.3.8軟體──電腦的靈魂
1.3.9電腦產業發展態勢
Chapter.02初識處理器──掀起你的蓋頭來
2.1處理器是怎樣工作的──處理器的硬體模型
2.1.1硬連線電路──一定終身
2.1.2通用電腦模型──硬體搭台,軟體唱戲
2.2怎樣來使用處理器──處理器的程式設計模型
2.2.1軟硬不分
2.2.2ISA橫插一刀
2.3處理器的分層模型
2.4選什麼樣的處理器──適合的才是最好的
2.4.1硬體指標──硬實力的競爭
2.4.2軟體指標──軟實力的競爭
2.4.3商業指標──在商言商
Chapter.03指令集體系結構──處理器的外表
3.1指令集是什麼
3.1.1從處理器程式設計模型談起──一切從模型開始
3.1.2電腦語言──人與電腦溝通的橋樑
3.2指令集發展的來龍去脈
3.2.1CISC時代──粗放式擴張
3.2.2RISC時代──最佳化設定資源,合理提升效率
3.2.3後RISC時代──不管黑貓白貓,抓到老鼠就是好貓
3.3指令集的五朵金花
3.3.1x86──碩大的大象
3.3.2ARM──穩紮穩打的蟻群
3.3.3MIPS──優雅的孔雀
3.3.4Power──昔日的貴族
3.3.5C6000──偏安一隅的獨立王國
3.3.6至今仍在服役的元老們
3.4地盤之爭
3.4.1地盤劃分
3.4.2x86、ARM之戰
3.4.3ARM、MIPS之戰
3.5組合語言格式──沒有規矩不成方圓
3.5.1機器字長
3.5.2運算元個數
3.5.3運算元順序
3.5.4大小端──小問題,大折騰
3.5.5指令型態──我們需要哪些指令
3.5.6定址方式──千萬裡,我追尋著你
3.5.7總結
Chapter.04微架構──處理器的內心世界
4.1跟著順溜學管線
4.1.1順溜的2級管線
4.1.2順溜管線的深入分析
4.2從子彈射擊到指令執行
4.2.1最簡單的3級管線
4.2.2史上最經典的5級管線
4.2.3DSP更深的管線
4.2.4管線上的冒險──免不了磕磕絆絆
4.2.5分支預測──以古為鏡,可以知興替
4.3從循序執行到亂序執行──因時制宜
4.3.1亂序的概念
4.3.2指令的相關
4.3.3去除指令的相關性
4.3.4處理器的亂序執行
4.4處理器平行設計──平行,提高性能的不二法門
4.5指令平行(InstructionLevelParallelism)
4.5.1指令平行的“綠營”和“藍營”
4.5.2Superscalar處理器實例──IntelP4CPU
4.5.3VLIW處理器實例──TIC6000DSP
4.5.4Superscalar和VLIW總結
4.6資料平行(DataLevelParallelism)
4.6.1何為SIMD、MMX、SSE
4.6.2幾種不同形式的SSE指令
4.7執行緒平行(ThreadLevelParallelism)
4.7.1多執行緒──時分重用
4.7.2硬體多執行緒──讓我來幫你一把
4.7.3多核心──從“芯”到“蕊”的跳變
4.7.4各種硬體多執行緒比較
4.8平行總結
4.9微架構總結
4.9.1處理器性能公式
4.9.2透過微架構的改進提昇程式執行效率
4.9.3商用處理器微架構的選擇
Chapter.05Cache──處理器的“肚量”
5.1什麼是Cache──探索既熟悉又陌生的領域
5.1.1隨處可見的Cache──技術來源於生活
5.1.2處理器的Cache──一切都是收益和成本的權衡
5.2處理器的Cache結構──探索那些鮮為人知的秘密
5.2.1Cache的階層──階層化管理
5.2.2Cache的工作方式──丘位之劍,命中與未命中
5.2.3Cache的映射方式──多對一的策略
5.2.4Cache的寫方式──你不需要知道真相
5.3Cache一致性
5.3.1一致性問題的產生──資訊不對稱導致的問題
5.3.2Cache一致性的底層操作
5.3.3Cache一致性協定
Chapter.06撰寫高效程式──時間就是生命
6.1軟體效率──21世紀什麼最重要?效率!
6.1.1高效程式的意義──時間就是生命,時間就是金錢
6.1.2程式剖析──沒有調查,就沒有發言權
6.2減少指令數──勤儉持家
6.2.1使用更快的演算法──演算法,程式設計的靈魂
6.2.2選用合適的指令──合適的人做合適的事
6.2.3降低資料精度──位元也要省著用
6.2.4減少函數呼叫──不要老打斷我
6.2.5空間換時間──我們總是在走,卻忘了停留
6.2.6減少過保護──打不破的部門牆
6.3減少處理器不擅長的操作──不要逼我做我不喜歡的事情
6.3.1少用乘法
6.3.2少用除法、求餘
6.3.3在精度允許的條件下,將浮點數定點化
6.3.4儘量減少分支
6.3.5將最可能進入的分支放在if中,而不是else中
6.4最佳化記憶體存取──別讓包袱拖垮了你
6.4.1少使用陣列,少使用指標
6.4.2少用全域變數
6.4.3一次多存取一些資料
6.4.4資料對齊存取
6.4.5大資料結構時的Cacheline對齊
6.4.6程式、資料存取符合Cache的時間、空間局部性
6.4.7多執行緒程式設計時,避免falsesharing
6.4.8自己管理記憶體動態分配
6.4.9隱藏資料搬移時間
6.5充分利用編譯器進行最佳化──編譯器:我才是最佳化第一高手
6.5.1編譯器的結構──知己知彼,百戰不殆
6.5.2編譯器提供了幾級最佳化選項──分級管理
6.5.3編譯器會計算常數
6.5.4簡單的運算式化簡
6.5.5分析公共敘述
6.5.6迴圈展開、軟體管線
6.5.7自動向量化
6.5.8高效的資料組織
6.5.9指令平行化
6.5.10編譯器更懂處理器──百度更懂中文
6.6利用多核心來加速程式──人多力量大
6.6.1平行計算
6.6.2OpenMP
Chapter.07SOC──吸星大法
7.1SOC大一統時代
7.1.1SOC和IP
7.1.2SOC市場驅動力
7.2IP核心
7.2.1CPUIP
7.2.2GPUIP
7.2.3DSPIP
7.2.4VideoEngineIP
7.2.5其他IPcore
7.2.6總結
Chapter.08“芯”路歷程──明明白白我的“芯”
8.1邏輯電路基礎──電腦的基本構成
8.1.1模擬、數位、邏輯的關係──細微之處探真知
8.1.2組合邏輯電路──萬丈高樓平地起
8.1.3時序邏輯電路──你在我心中留下了記憶
8.1.4微電子技術──微乎微乎,至於無形
8.2晶片設計──芯者,國之大事,不可不察也
8.2.1人類是怎麼管理複雜事物的
8.2.2晶片設計流程
8.2.3硬體描述語言──軟硬不分
8.2.4邏輯綜合
8.2.5硬體描述語言與軟體描述語言的差別
8.2.6實體設計
8.3晶片製造──點沙成金
8.3.1探索微觀世界
8.3.2晶片製造流程