亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

使用GProf來優(yōu)化你的C/C++程序

2020-05-23 14:24:23
字體:
供稿:網(wǎng)友

GProf 使用了一種異常簡單但是非常有效的方法來優(yōu)化C/C++ 程序,而且能很容易的識別出值得優(yōu)化的代碼。一個簡單的案例分析將會顯示,GProf如何通過識別并優(yōu)化兩個關(guān)鍵的數(shù)據(jù)結(jié)構(gòu),將實際應(yīng)用中的程序從3分鐘的運行時優(yōu)化到5秒的。

  這個程序最早可以追溯到1982年關(guān)于編譯器構(gòu)建的特別討論大會(the SIGPLAN Symposium on Compiler Construction)。現(xiàn)在這個程序成了各種UNIX 平臺上的一個標(biāo)準(zhǔn)工具。

  _________________ _________________ _________________

  Profiling in a nutshell

  程序概要分析的概念非常簡單:通過記錄各個函數(shù)的調(diào)用和結(jié)束時間,我們可以計算出程序的最大運行時的程序段。這種方法聽起來似乎要花費很多氣力——幸運的是,我們其實離真理并不遠!我們只需要在用 gcc 編譯時加上一個額外的參數(shù)('-pg'),運行這個(編譯好的)程序(來搜集程序概要分析的有關(guān)數(shù)據(jù)),然后運行'gprof'以更方便的分析這些結(jié)果。

  案例分析: Pathalizer

  我使用了一個現(xiàn)實中使用的程序來作為例子,是 pathalizer的一部分: 即event2dot,一個將路徑“事件”描述文件轉(zhuǎn)化為圖形化“dot”文件的工具(executable which translates a pathalizer 'events' file to a graphviz 'dot' file)。

  簡單的說,它從一個文件里面讀取各種事件,然后將它們分別保存為圖像(以頁為節(jié)點,且將頁與頁之間的轉(zhuǎn)變作為邊),然后將這些圖像整合為一張大的圖形,并保存為圖形化的'dot'格式文件。

  給程序計時

  先讓我們給我們未經(jīng)優(yōu)化的程序計一下時,看看它們的運行要多少時間。在我的計算機上使用event2dot并用源碼里的例子作為輸入(大概55000的數(shù)據(jù)),大致要三分多鐘:

  real 3m36.316s

  user 0m55.590s

  sys 0m1.070s

  程序分析

  要使用gprof 作概要分析,在編譯的時候要加上'-pg' 選項,我們就是如下重新編譯源碼如下:

  g++ -pg dotgen.cpp readfile.cpp main.cpp graph.cpp config.cpp -o event2dot

  現(xiàn)在我們可以再次運行event2dot,并使用我們前面使用的測試數(shù)據(jù)。這次我們運行的時候,event2dot運行的分析數(shù)據(jù)會被搜集并保存在'gmon.out'文件中,我們可以通過運行'gprof event2dot | less'來查看結(jié)果。

  gprof 會顯示出如下的函數(shù)比較重要:

  % cumulative self self total

  time seconds seconds calls s/call s/call name

  43.32 46.03 46.03 339952989 0.00 0.00 CompareNodes(Node *,Node *)

  25.06 72.66 26.63 55000 0.00 0.00 getNode(char *,NodeListNode *&)

  16.80 90.51 17.85 339433374 0.00 0.00 CompareEdges(Edge *,AnnotatedEdge *)

  12.70 104.01 13.50 51987 0.00 0.00 addAnnotatedEdge(AnnotatedGraph *,Edge *)

  1.98 106.11 2.10 51987 0.00 0.00 addEdge(Graph *,Node *,Node *)

  0.07 106.18 0.07 1 0.07 0.07 FindTreshold(AnnotatedEdge *,int)

  0.06 106.24 0.06 1 0.06 28.79 getGraphFromFile(char *,NodeListNode *&,Config *)

  0.02 106.26 0.02 1 0.02 77.40 summarize(GraphListNode *,Config *)

  0.00 106.26 0.00 55000 0.00 0.00 FixName(char *)

  可以看出,第一個函數(shù)比較重要: 程序里面絕大部分的運行時都被它給占據(jù)了。

  優(yōu)化

  上面結(jié)果可以看出,這個程序大部分的時間都花在了CompareNodes函數(shù)上,用 grep 查看一下則發(fā)現(xiàn)CompareNodes 只是被CompareEdges調(diào)用了一次而已, 而CompareEdges則只被addAnnotatedEdge調(diào)用——它們都出現(xiàn)在了上面的清單中。這兒就是我們應(yīng)該做點優(yōu)化的地方了吧!

  我們注意到addAnnotatedEdge遍歷了一個鏈表。雖然鏈表是易于實現(xiàn),但是卻實在不是最好的數(shù)據(jù)類型。我們決定將鏈表 g->edges 用二叉樹來代替: 這將會使得查找更快。

  結(jié)果

  現(xiàn)在我們看一下優(yōu)化后的運行結(jié)果:

  real 2m19.314s

  user 0m36.370s

  sys 0m0.940s

  第二遍

  再次運行 gprof 來分析:

  % cumulative self self total

  time seconds seconds calls s/call s/call name

  87.01 25.25 25.25 55000 0.00 0.00 getNode(char *,NodeListNode *&)

  10.65 28.34 3.09 51987 0.00 0.00 addEdge(Graph *,Node *,Node *)

  看起來以前占用大量運行時的函數(shù)現(xiàn)在已經(jīng)不再是占用運行時的大頭了!我們試一下再優(yōu)化一下呢:用節(jié)點哈希表來取代節(jié)點樹。

  這次簡直是個巨大的進步:

  real 0m3.269s

  user 0m0.830s

  sys 0m0.090s

  其他 C/C++ 程序分析器

  還有其他很多分析器可以使用gprof 的數(shù)據(jù), 例如

  

  

使用GProf來優(yōu)化你的C/C++程序

  

  KProf (截屏) 和 cgprof。雖然圖形界面的看起來更舒服,但我個人認(rèn)為命令行的gprof 使用更方便。

  對其他語言的程序進行分析

  我們這里介紹了用gprof 來對C/C++ 的程序進行分析,對其他語言其實一樣可以做到: 對 Perl,我們可以用Devel::DProf 模塊。你的程序應(yīng)該以perl -d:DProf mycode.pl來開始,并使用dprofpp來查看并分析結(jié)果。如果你可以用gcj 來編譯你的Java 程序,你也可以使用gprof,然而目前還只支持單線程的Java 代碼。

  結(jié)論

  就像我們已經(jīng)看到的,我們可以使用程序概要分析快速的找到一個程序里面值得優(yōu)化的地方。在值得優(yōu)化的地方優(yōu)化,我們可以將一個程序的運行時從 3分36秒 減少到少于 5秒,就像從上面的例子看到的一樣。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
手机看片福利永久| 久久久www免费人成精品| 久久亚洲影音av资源网| 91色琪琪电影亚洲精品久久| 国产视频一区二区在线| 神马久久精品| av网站在线免费播放| 99精品欧美一区二区三区小说| 国产一区二区剧情av在线| 欧美日韩综合高清一区二区| 91精品国产九九九久久久亚洲| 国内久久精品视频| 在线免费观看a视频| 中文幕av一区二区三区佐山爱| 亚洲av无码国产精品久久| 岛国视频午夜一区免费在线观看| 91精品国产综合久久精品| 妞干网在线播放| 久久久91精品| xxxxx性| 国产亚洲永久域名| 欧美网站免费观看| 久久亚洲国产精品尤物| 激情另类小说区图片区视频区| 97在线观看播放| 欧美一区二区三区久久| 91看片就是不一样| 免费国产a级片| 成人免费看片视频在线观看| 欧洲精品视频在线观看| 欧美综合77777色婷婷| 忘忧草在线影院两性视频| 国产精品特级毛片一区二区三区| 天天色天天操综合| 亚洲香蕉久久| 国产精品二区一区二区aⅴ污介绍| 日本在线免费播放| 中文字幕永久在线不卡| 中文字幕一区二区人妻视频| 日韩在线观看视频网站| 日韩美女国产精品| 亚洲一区二区中文字幕| 免费在线观看一区二区三区| 菠萝蜜视频网址| 久久久伊人日本| 麻豆freexxxx性91精品| 久久免费少妇高潮久久精品99| 蜜桃视频在线观看视频| 成人久久电影| 成人激情诱惑| 亚洲成人精品视频| 欧美性bbwbbwbbwhd| 久久久久国产精品一区| 国产精品黑丝在线播放| 免费亚洲婷婷| 国产aⅴ爽av久久久久成人| 午夜免费视频在线国产| 国产中文在线| 日韩欧美午夜| 中文字幕一区二区久久人妻网站| 日韩亚洲综合在线| 久久久夜色精品| 日本泡妞xxxx免费视频软件| 国产精品网红直播| 国产福利第一视频| 国产成人a视频高清在线观看| 玖草视频在线| 欧美女优在线| 新狼窝色av性久久久久久| 日韩欧美一中文字暮专区| 天海翼女教师无删减版电影| wwwww亚洲| 日本aa大片在线播放免费看| 亚洲女同ⅹxx女同tv| 国产毛片毛片毛片毛片毛片| 国产精品久久久久久久小唯西川| 中文字幕av一区二区三区谷原希美| 国产真实乱子伦精品视频| 亚洲激情午夜| 亚洲图片小说区| 超碰av在线免费观看| 欧美精品国产一区二区| 成人毛片在线| 国产黄色一级大片| 亚洲网站免费| jizzjizzjizz国产| 黄色av网站免费| 欧美一级片在线观看| 日韩电影毛片| 欧美精品电影在线播放| www.69av| 日韩在线中文| 91高潮在线观看| 日本aⅴ写真网站免费| 男人的天堂99| 在线免费看h| 9.1在线观看免费| 国产精品看片你懂得| www.国产精品| 亚洲va久久久噜噜噜久久天堂| 亚洲人成电影网站| 蜜桃av噜噜一区二区三区| 天堂成人在线| 欧美三级第一页| 一区二区三区四区在线观看视频| 影音欧美亚洲| 中文字幕一区在线观看视频| 亚洲 欧美 综合 另类 中字| 99re6这里只有精品| 久久久久久久久久久亚洲| 黄色av网站免费观看| 欧美一区自拍| 日本一区二区三区四区高清视频| 激情欧美日韩一区二区| 亚洲 欧美 变态 另类 综合| 日韩一区二区视频在线| 黄色av小说在线观看| 精品亚洲精品| 国产欧美精品一区aⅴ影院| youjizz亚洲女人| 69堂精品视频在线播放| 国产野外战在线播放| 欧美xxxxx少妇| 乱精品一区字幕二区| 亚洲精品中文字幕乱码三区不卡| 成人黄色免费网址| 欧美成人午夜做爰视频在线观看| 日韩男人天堂| av手机免费看| 麻豆精品一区二区av白丝在线| 美脚丝袜脚交一区二区| 国产91色综合久久免费分享| 日韩欧美激情一区| 九九热在线免费观看| 欧美色视频一区| 精品欧美一区免费观看α√| 成人激情av| 国产精品久久久久一区二区三区厕所| 日韩三级视频在线| 欧美巨大丰满猛性社交| 亚洲人成电影网站| 欧美精品导航| 国产欧美日韩视频一区二区| 美日韩精品免费观看视频| 国产黄色片大全| 国产人成在线观看| 国产女人av| 91精品国产综合久久香蕉| av在线影视| 欧美wwwsss9999| 男女啪啪网站视频| 成人短视频在线观看| 清纯唯美激情亚洲| 国产一区二区三区免费看| 亚洲欧美精品aaaaaa片| 手机av在线免费| 男女爱爱视频免费| 国产精品一区二区三区免费观看| 精品国产污污免费网站入口| 91久久精品国产91性色| 国产精品第八页| 国产精品毛片无遮挡高清| 性欧美精品男男| 中国xxxx性xxxx产国| 不卡中文字幕av| 99精品久久久久久中文字幕| 日韩精品123区| 日本一区二区在线免费观看| 一个人免费观看视频www在线播放| 加勒比av在线播放| 波多野结衣在线免费观看| 成人黄色91| caopon在线免费视频| 日本国产在线观看| 欧美综合激情网| 成人avav在线| 五月天视频在线观看| 精品国产乱子伦一区| av网站免费在线播放| 日本免费无人高清| 国产午夜精品理论片在线| 欧美自拍视频在线| 91中文字幕在线观看| 亚洲视频图片小说| 在线看片成人| 8x8x8国产精品| av在线观看地址| 五月婷婷一区二区三区| 快she精品国产999| 日韩av在线发布| 亚洲永久一区二区三区在线| 天堂av免费在线观看| 日韩av综合网| 日韩激情文学| 国产精品亚洲专一区二区三区| 91福利国产成人精品照片| 久久精品一区二区免费播放| 欧美日韩视频在线观看一区二区三区| 亚洲国产影院| 日本欧美视频在线观看| 国产一区二区网站| 欧美猛烈性xbxbxbxb| 国产精品二线| 国产xxx免费观看| 成人精品国产一区二区4080| 中文字幕在线永久| 亚洲一区国产视频| 欧美成人aaa片一区国产精品| 蜜臀99久久精品久久久久久软件| 91探花福利精品国产自产在线| 成人福利网站在线观看| 国产黄视频网站| 欧美三级在线观看视频| 成人性生交大片免费看无遮挡aⅴ| 精品国产乱码久久久久软件| 中文字幕乱码在线| 99re91这里只有精品| 91sao在线观看国产| 人妻内射一区二区在线视频| 69久久精品| 粉嫩高清一区二区三区精品视频| 在线免费观看日本欧美爱情大片| 日日噜噜夜夜狠狠久久丁香五月| 欧美1区2区3区| gai在线观看免费高清| 波多野结衣中文字幕在线播放| 一级黄色a视频| 婷婷激情四射五月天| 九九久久久久午夜精选| 亚洲欧美另类色图| 老牛国内精品亚洲成av人片| 亚洲女则毛耸耸bbw| 成人爽a毛片免费啪啪| 污网站在线免费| 中文字幕求饶的少妇| 久久一综合视频| 日韩在线资源网| 成人激情小说乱人伦| 国产一区二区在线观看免费播放| 国产成人久久精品麻豆二区| 国产伦精品一区| 日本亚洲欧美成人| jizz一区二区三区| 色乱码一区二区三区熟女| 亚洲欧美日韩第一页| 成人jjav| 特级西西人体高清大胆| 日本一区不卡| 国产成人jvid在线播放| 国产欧美一区二区三区在线老狼| 成人黄动漫网站| av天堂永久资源网| 亚洲女子a中天字幕| 久久精品亚洲一区二区| 正在播放木下凛凛xv99| 欧美一区二区成人6969| 天天操天天摸天天爽| 亚洲天堂男人天堂| 亚洲成人福利| 欧美中文字幕在线视频| 日韩影院在线| 91欧美日韩| 亚洲一区二区三区黄色| 成人欧美一区二区三区在线| 精品捆绑调教一区二区三区| 国产午夜精品无码| 国产精品青草综合久久久久99| 四虎4545www国产精品| 欧美不卡一区二区三区四区| 国产91精品不卡视频| 佐山爱痴汉视频一区二区三区| 97精品国产aⅴ7777| 日韩电影免费观看| 日韩精品成人一区二区三区| 成人午夜精品无码区| av在线资源站| 美脚丝袜脚交一区二区| 久草视频视频在线播放| www.男人的天堂.com| 国产精品综合一区二区| 欧美gay囗交囗交| av手机免费看| 精品国产视频一区二区三区| 天天综合天天干| 黄色一级免费| 另类人妖一区二区av| 亚洲在线免费| www.久久东京| 国产精品白丝jk黑袜喷水| 亚洲欧美自偷自拍另类| 久久av一区二区三区亚洲| 国产小视频自拍| 美女av在线免费看| 成年人三级网站| 97超级碰碰碰久久久| 久久久精品久久久久特色影视| 福利视频电影| 中文字幕在线观看视频网站| 色网在线播放| 菠萝蜜视频国产在线播放| 韩国19禁主播vip福利视频| xxxxhd欧美精品| 区一区二区三区中文字幕| 美女黄毛**国产精品啪啪| 亚洲人妖av一区二区| 精品卡1卡2卡三卡免费网站| www.av网站| 久久综合成人网| 日本激情视频网站| 国产极品在线播放| 欧美大片在线观看一区二区| 91精品视频专区| 欧美一区二区视频网站| 2021狠狠干| 国产精品三级av| 成人黄色在线网站| 成人午夜三级| jizz国产免费| 在线免费av导航| 国产欧美一区二区三区四区| 捆绑裸体绳奴bdsm亚洲| 亚洲色偷偷色噜噜狠狠99网| 日韩三级视频在线| 3d动漫精品啪啪一区二区下载| 99久久影视| 精品人妻一区二区三区蜜桃| 永久免费看mv网站入口| 免费看三级黄色片|