20180925 3 效能分析

2022-08-18 21:42:09 字數 2387 閱讀 1460

作業要求參見[

一、得出程式執行時間

執行截圖如下:

第一次執行時間為 0.942 s

第二次執行時間為 0.826 s

第三次執行時間為 0.861 s

平均執行時間為:0.876 s

cpu引數:intel(r) core(tm) i5-4200m cpu @ 2.50ghz  2.50ghz

二、猜測程式瓶頸

猜測一:每次查詢map容器該單詞是否出現過比較費時,因為個單詞都要去查詢一遍,優化過後可能執行快5%。

if(mp[str]==0

)else

猜測二:判斷是否是單詞組成元素比較費時,因為要去判斷每乙個字元,優化過後可能執行快10%。

if(isalpha(ch)!=0||(ch=='

\''&&len>0)||ch=='

-'||(ch>='

0'&&ch<='

9'&&len>0))

三、利用profile找出瓶頸cpu使用率截圖:

函式呼叫次數及執行時間截圖:

這兒可以看到最耗時的三個函式分別是:map的查詢比較函式,string的拼接函式以及判斷是否為字母函式。

map查詢比較函式和string拼接函式:

if (mp[str] == 0

) else

判斷字母函式:

if (isalpha(ch) != 0 || (ch == '

\''&&len>0) || ch == '

-' || (ch >= '

0'&&ch <= '

9'&&len>0))

分析:map和string的兩個函式可能需要呼叫堆疊,消耗時間比較多,而判斷字母函式因為執行的次數多,導致最後執行時間就比較多。

四、優化程式

map和string想不出怎麼優化,判斷函式直接和字母進行比較。相應的函式變化如下:

if (text[i]>='

a'&&text[i]<='z'

) else

if (text[i]>='

a'&&text[i]<='z'

) else

if ((text[i]=='

'&&len>0)||text[i]=='—'

)

五、再次profile測試ptime執行時間截圖:

第一次執行時間為 0.826 s

第二次執行時間為 0.817 s

第三次執行時間為 0.827 s

平均執行時間為:0.823 s

比未修改時快了0.053s

cpu使用率截圖:

函式呼叫次數及執行時間截圖:

可以看到map和string函式執行時間比例基本上沒有變化,判斷字母函式找不到了,其他執行函式的執行時間百分比都是低於0.1%的。

六、總結

經過修改,程式的執行速度有了一定的提公升,有很多地方我還沒能力去修改,如果能進一步修改,程式的執行速度會有進一步的提公升。在以後的程式中,我們一定要靈活運用各種工具,優化程式,提公升程式執行速度。

20180925 3 效能分析

此作業要求參見 要求0 以 戰爭與和平 作為輸入檔案,重讀向由檔案系統讀入。連續三次執行,給出每次消耗時間 cpu引數。測試用例 戰爭與和平 以為資料輸入。cpu引數 intel r core tm i74500u cpu 1.80ghz 1.80ghz 要求1 猜測存在的瓶頸 判斷引數是否是檔案目...

作業要求 20180925 3 效能分析

本次作業要求參見 由於上次作業沒有實現功能4,具體的 還在做,在接下來的時間如果實現功能4,會補寫功能4的效能分析。在對自己的已實現功能效能分析後,對喬靜玉同學程式的功能4進行了效能分析 以下是我對自己上次實現的功能的進行的效能分析,以此證明我認真學習了使用ptime程式進行效能分析。要求0 用pt...

mysql 效能分析 Mysql效能分析

優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...