出版時間:2013-1 出版社:人民郵電出版社 作者:片山善夫 頁數(shù):139 字數(shù):181000 譯者:何本華 居福國,居福國
Tag標簽:無
內容概要
《C程序性能優(yōu)化:20個實驗與達人技巧》從CPU與編譯器的運行機制講起,帶領讀者一步步了解程序的執(zhí)行成本、編譯器的優(yōu)化選項等,總結出許多C程序性能優(yōu)化的技巧,并以實驗的方式進行了講解,簡明易懂,使人印象深刻。書中帶有大量的代碼實例,使讀者不僅能夠了解代碼優(yōu)化的原理,還能夠輕松地在實踐中應用?! 禖程序性能優(yōu)化:20個實驗與達人技巧》適合有一定基礎的C語言編程人員閱讀。
作者簡介
片山善夫:具有近二十年的C語言編譯器和解釋器開發(fā)經驗?,F(xiàn)從事對SPARC、VisionChip等體系結構的研究。譯者介紹:何本華,日語專業(yè)翻譯,擅長IT類、工程技術類、新聞稿件類翻譯,曾擔任奧特曼之父中田幸和的口譯。居福國,畢業(yè)于復旦大學計算機科學與技術專業(yè),精通C語言和Java,具有豐富的編程經驗。
書籍目錄
第1章 CPU與編譯器概論
1.1 高速路與人行道
1.2 編譯器是如何運作的
編譯后的匯編語言程序
添加優(yōu)化選項后的結果
1.3 CPU是如何運作的
指令集架構與微架構
如何執(zhí)行指令
指令流水線
高速緩存
深入探討高速緩存
緩存塊的替換算法
超標量指令執(zhí)行
第1章 是不是偏離了主題
第2章 執(zhí)行成本
2.1 兩程序的執(zhí)行成本
2.2 計·測·謀
書中的探討
2.3 防止基準測試程序被優(yōu)化
防止操作“歸并”
防止變量在初始化時被優(yōu)化
防止重復單一指令被優(yōu)化
本書中的基準測試程序
2.4 驗證——哪一步操作導致執(zhí)行速度緩慢
2.5 基礎加法與賦值運算
單一的賦值操作(寄存器間的傳送)
單一的賦值操作(數(shù)據(jù)相互關聯(lián)的情況)
常量賦值
變量間的加法運算
變量與常量相加
2.6 耗時的乘法運算
變量間的乘法運算
變量與常量相乘
2.7 更為耗時的除法運算
變量的除法(寄存器間的計算)
除數(shù)為2、4的除法運算
除數(shù)不是2的乘方的除法運算
無符號整數(shù)除法運算
除數(shù)為2的乘方時除法運算使用低成本移位指令
2.8 內存讀取
小數(shù)組的讀?。ㄐ》秶鷥鹊膬却娌僮鳎?br />大數(shù)組的讀?。ù蠓秶鷥鹊膬却娌僮鳎?br />與臺式機的CPU進行比較
2.9 造成執(zhí)行時間差別的判斷語句
無else節(jié)點的if語句
帶else節(jié)點的if語句
2.10 32/64位環(huán)境中不同的函數(shù)調用
2.11 實驗總結
若想被愛則先愛
第3章 尋找性能瓶頸
3.1 使用gprof命令進行分析
gprof的使用方法
3.2 哪個環(huán)節(jié)在消耗時間
獲取庫函數(shù)的評測信息
耗時的函數(shù)
顯示庫函數(shù)的調用次數(shù)
3.3 函數(shù)的調用關系
3.4 進行數(shù)據(jù)分析的原理
3.5 其他性能分析器
培養(yǎng)高水平人才的教育系統(tǒng)
第4章 達人方法論
4.1 達人的關注點
硬件篇
編譯器/中間件篇
算法篇
4.2 【硬件篇】數(shù)組和緩存的有效利用
矩陣的乘法運算
調整數(shù)組操作的順序
展開循環(huán)的方式
矩陣的分塊
4.3 【庫函數(shù)篇】緩慢函數(shù)的迂回戰(zhàn)術
strcmp函數(shù)為何緩慢
優(yōu)化的陷阱
4.4 【硬件篇】使用SIMD進行字符串對比
4.5 【庫函數(shù)篇】對比各種輸入輸出方法
行輸入函數(shù)的對比
輸出方法
管道輸入輸出的特殊案例
管道輸入輸出與文件輸入輸出
4.6 【算法篇】二分法查找與平衡二叉樹
海量數(shù)據(jù)的分類
真要做到如此地步?
第5章 進一步研究編譯器
5.1 不同級別的優(yōu)化選項
GCC的優(yōu)化選項
“零優(yōu)化”對調試有效
以不出現(xiàn)未定義行為為前提的2級以上優(yōu)化選項
5.2 優(yōu)化·寄存器·外部變量
5.3 刪除公共子表達式為程序瘦身
5.4 指針與復雜運算簡化
5.5 將用戶函數(shù)進行內聯(lián)展開
和別人拉開差距!
第6章 給辦公系統(tǒng)的一些啟示
6.1 排序與字符串操作
6.2 小數(shù)點數(shù)的計算與字符串/數(shù)字的換算
塊數(shù)據(jù)輸入輸出和字段分割
統(tǒng)計帶小數(shù)部分的數(shù)
整數(shù)轉換成字符串
性能優(yōu)化的效果
6.3 半角字符轉換為全角字符
判定字符的字節(jié)數(shù)
ASCII字符與半角片假名字符的判定
ASCII字符轉換為全角字符
半角字符轉換為全角字符
性能優(yōu)化的效果
判定字符字節(jié)數(shù)的其他方法
有關UTF-8
6.4 探索具有某種數(shù)據(jù)特性的數(shù)組
數(shù)據(jù)的特性
二分法查找與線性查找相結合
性能優(yōu)化的效果
后記
章節(jié)摘錄
版權頁: 插圖: 6.1 排序與字符串操作 在辦公系統(tǒng)中經常會進行數(shù)據(jù)規(guī)范化處理,以及排序、分類、統(tǒng)計、數(shù)據(jù)的變形等。但隨著數(shù)據(jù)量的不斷增加,數(shù)據(jù)處理速度難免逐漸降低。每晚花費幾個小時來批量處理數(shù)據(jù)也不能按時完成,給第二天的工作帶來不便,這樣的例子在現(xiàn)實生活中比比皆是。為了減輕服務器的負擔,大家都希望能將服務器程序的執(zhí)行時間縮短。 一般來說,辦公程序中多半的數(shù)據(jù)排序和字符串操作都比較耗時,所以高效的優(yōu)化策略就成了解決問題的焦點所在。在這一章中,我們會從USP研究所使用辦公系統(tǒng)工具群“Unieage Command”的優(yōu)化案例中甄選幾個來進行講解。雖然形式上有些不同,但都是些常用的邏輯,想必對讀者朋友來說還是能起到一定作用的。 當程序在處理數(shù)據(jù)時,如果數(shù)據(jù)結構較合理,那也就意味著會有了好的處理方法(算法)。相反,處理結構不合理的數(shù)據(jù)就會拉長執(zhí)行時間。也是基于這樣的出發(fā)點,本書在最后選取了處理數(shù)據(jù)性質的案例。 6.2小數(shù)點數(shù)的計算與字符串/數(shù)字的換算 本章所使用的程序sm2先輸入由空格來分隔開的數(shù)據(jù)行,然后按類別統(tǒng)計各字段的總和。表示分類類別的字段和作為被統(tǒng)計對象的字段將在程序執(zhí)行時進行分配。 這是個通用版的程序,如果有具體案例的話就能更好地把握其要點。截圖6—1中的數(shù)據(jù)是連鎖店上傳的銷售額。將這些數(shù)據(jù)的第4至第7個字段按相同的分店名合并起來,并以第一個字段按順序輸出,其結果請看截圖6—2。 該程序在編寫好之后實施了幾次性能優(yōu)化,最終改善后的速度是起初的6.38倍。有關改善的方法后面會進行說明。 塊數(shù)據(jù)輸入輸出和字段分割 sm2程序需要進行海量數(shù)據(jù)的輸入輸出,如果能對輸入輸出環(huán)節(jié)進行優(yōu)化那就再好不過了。因此我們在操作時不使用庫函數(shù)getline,而是在自定義大小的輸入輸出函數(shù)中定義4MB的輸入緩沖區(qū),然后將數(shù)據(jù)直接讀入緩沖區(qū),需要時從中取出一行的數(shù)據(jù)就可以了。 另外,原本我們在用字段分解輸入行的過程中使用的是strtok函數(shù),如果能將strspn函數(shù)和strcspn函數(shù)結合起來使用,效率將會得到提升。
編輯推薦
作者精通高效編程,其開發(fā)的C編譯器,不僅適用于16位及32位系統(tǒng),還能在GPU中對視頻數(shù)據(jù)進行實時編譯。作者將C高效編程的心得濃縮于20個技巧,并將這些技巧通過實驗的方式進行講解,簡明易懂,使人印象深刻。書中帶有大量的代碼實例,使讀者不僅能夠從理論上得以提高,而且還能夠輕松地在實踐中應用。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載