1. 程式人生 > >往期技術文章勘誤

往期技術文章勘誤

media 勘誤 center edi 容易 += red 筆記 圖片

技術分享圖片

最近在整理一個材料,借用了我在往期推送的一些技術文章中的內容。回頭看文章中的細節,發現還是存在一些當時理解不充分,或者是筆誤的地方。由於微信推送出去的文章已經不便於更改(除非重新推送),因此就特起一篇勘誤文章,把目前發現的錯誤訂正下,希望沒有給大家帶來困擾。

《TI C6000優化手冊——讓代碼看起來像釘子》

錯誤位置:描述“restrict”關鍵字的部分。

原文:“restrict”關鍵字也不能隨便亂加,我們需要了解C6000的片上內存組成,只有當兩個指針所指的內存在不同的block裏時,restrict才是合法的。

解析:正如“restrict”的作用所言,用它聲明過的指針變量,能夠保證不會同其它指針變量指向同一個數據體。這與指針指向的數據體是否在同一個block存儲區無關,也不需要考慮具體的片上內存組成形式。比如:

short *restrict a;

short *b;

short x[100];

short y[100];

這裏可以確認程序不會出現a=x;b=x;的情況。而a=x;b=y是合法的,即使數組x和y在同一個block中對齊到了同一個bank。

勘誤:刪除該句。

《現代處理器與代碼性能優化》

錯誤位置:代碼片段3

原文:

void array_sum(short *a, short *sum, length)

{

unsigned int i;

short sum_temp1 = 0;

short sum_temp2 = 0;

for(i=0; i<length-1 ; i+=2)

{

sum_temp1 = sum_temp1 + a[i];

sum_temp2 = sum_temp2 + a[i+1];

}

for(; i<length; i++)

{

sum_temp1 = sum_temp1 + a[i];

}

*sum = sum_temp1 + sum_temp1;

}

解析:最後一條語句中的一個sum_temp1應更改為sum_temp2。

勘誤:

void array_sum(short *a, short *sum, length)

{

unsigned int i;

short sum_temp1 = 0;

short sum_temp2 = 0;

for(i=0; i<length-1 ; i+=2)

{

sum_temp1 = sum_temp1 + a[i];

sum_temp2 = sum_temp2 + a[i+1];

}

for(; i<length; i++)

{

sum_temp1 = sum_temp1 + a[i];

}

*sum = sum_temp1 + sum_temp2;

}


錯誤位置:4.1節 確認性能瓶頸,其中講到Amdahl定律可以用公式表達為: Told/Tnew = 1/[(1-a) + a/b]。

原文:設原程序執行時間為Told,其某部分代碼所需執行時間占該時間的比例為a,而該部分性能提升的比例為b。

解析:最後一小句中b表示為待優化部分代碼性能提升的比例有誤,很容易會發現這裏公式推導不通,b正確的含義是待優化部分代碼性能提升的倍數。

勘誤:設原程序執行時間為Told,其某部分代碼所需執行時間占該時間的比例為a,而該部分性能提升的倍數為b。

·END·

想進一步跟蹤本博客動態,歡迎關註我的個人微信訂閱號:信號君

信號君:尋求簡單之道

技術成長 | 讀書筆記 | 認知升級

技術分享圖片

掃描二維碼關註信號君

往期技術文章勘誤