日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁(yè) > 編程 > C++ > 正文

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

2020-05-23 14:24:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

  _________________ _________________ _________________

  Profiling in a nutshell

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

  案例分析: Pathalizer

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

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

  給程序計(jì)時(shí)

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

  real 3m36.316s

  user 0m55.590s

  sys 0m1.070s

  程序分析

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

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

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

  gprof 會(huì)顯示出如下的函數(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 *)

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

  優(yōu)化

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

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

  結(jié)果

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

  real 2m19.314s

  user 0m36.370s

  sys 0m0.940s

  第二遍

  再次運(yùn)行 gprof 來(lái)分析:

  % 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 *)

  看起來(lái)以前占用大量運(yùn)行時(shí)的函數(shù)現(xiàn)在已經(jīng)不再是占用運(yùn)行時(shí)的大頭了!我們?cè)囈幌略賰?yōu)化一下呢:用節(jié)點(diǎn)哈希表來(lái)取代節(jié)點(diǎn)樹(shù)。

  這次簡(jiǎn)直是個(gè)巨大的進(jìn)步:

  real 0m3.269s

  user 0m0.830s

  sys 0m0.090s

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

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

  

  

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

  

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

  對(duì)其他語(yǔ)言的程序進(jìn)行分析

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

  結(jié)論

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
极品久久久久久| 一二三区精品福利视频| 91色在线看| 在线不卡一区二区| av中文在线播放| 亚洲国产欧美日韩精品| 日韩中文字幕二区| 国产视频一二区| 日韩一二三四区| 色www精品视频在线观看| 999精品色在线播放| 欧美日韩国产免费观看视频| 亚洲乱码中文字幕| 国产亚洲福利| 日韩欧美久久久| 一区二区欧美国产| 欧美亚洲国产日韩| 欧美日韩国产综合久久 | 一区精品在线播放| 亚洲天堂国产视频| 亚洲一区在线观看免费| 刘玥91精选国产在线观看| 91久久精品国产91性色69| 免费在线视频一区二区| 国产小视频免费在线观看| 黄色一区二区在线| 欧美一级免费看| 日韩在线中文字幕| 中文字幕精品在线播放| 日韩高清不卡一区二区| 日韩精品免费观看视频| 国产一卡二卡3卡4卡四卡在线| 日韩视频在线观看视频| 日韩色在线观看| 亚洲一区视频在线观看视频| 在线综合 亚洲 欧美中文字幕| 欧美日韩高清在线一区| 在线国产99| 日本一欧美一欧美一亚洲视频| 大香一本蕉伊线亚洲网| 欧美 日韩 中文字幕| 人人做人人澡人人爽欧美| 亚洲 欧美 日韩系列| 国产欧美日韩中文字幕| 一级日韩一级欧美| 日韩在线 中文字幕| 日韩亚洲欧美中文字幕| 国产欧美日韩综合| 久久久久久91| 欧美成人精品在线| 亚洲成年人影院在线| 日韩欧美中文第一页| 欧美日韩激情在线一区二区三区| 欧美日韩中文字幕精品| 亚洲伊人婷婷| 中文字幕亚洲视频| 亚洲a一级视频| 自拍日韩亚洲一区在线| 亚洲视频在线观看三级| 亚洲三级av| 日韩视频不卡中文| 国产一区日韩| 久久夜色精品国产欧美乱极品| 欧美日韩免费精品| 在线一区免费| 欧美日韩中文字幕| 高清国产一区| 一级片免费在线播放| 欧美日韩在线播放一区| 日韩欧美三级在线| 日韩欧美不卡| √天堂资源中文www| 中文字幕在线视频第一页| 一区二区日韩av| 最近中文字幕在线中文高清版| 日韩久久在线| 亚洲福利在线视频| 日韩欧美在线字幕| 久久久精品99| 欧美日韩中文国产| 深夜福利亚洲| 欧美日韩视频不卡| 日韩精品视频在线播放| 亚洲男人在线| 欧美三级日韩三级国产三级| 国产网站欧美日韩免费精品在线观看| 精品999在线| 日韩中文字幕二区| 精品日韩av一区二区| 欧美日韩在线看| 久久精品99久久久久久久久| 91精品日本| 欧美在线日韩精品| av三级在线播放| 日韩1区在线| 在线中文字幕视频观看| 日韩精品视频在线观看免费| 91精品国产综合久久久久| 国产视频1区| 欧美日韩国产系列| 日韩午夜高潮| 日本黄色一区二区三区| 一区二区日韩av| 日韩欧美在线1卡| 欧美另类久久久品| 日韩精品资源二区在线| 91精品国产综合久久久久久| 在线资源av| 亚洲欧洲一区二区天堂久久| 日韩中文欧美在线| 国产一区激情在线| 欧美 日韩 国产 高清| www.狠狠干| 日本亚洲视频在线| 久久精品在线观看| 国产欧美日韩第一页| 亚洲第一精品在线| 欧美亚洲另类制服自拍| 久久91精品国产91久久小草| 国产一级在线免费观看| 91最新在线| 亚洲欧美中文字幕| 欧美日韩中文| 日韩亚洲一区在线| 亚洲一级二级| 在线一区免费| 91精品国产综合久久久久久| 日韩在线视频免费观看| 国产欧美久久久| 国产99在线|亚洲| 黄色国产网站在线观看| 亚洲福利在线视频| av免费观看网站| 欧美不卡一二三| 国产一区精品在线| 亚洲制服一区| 91久久中文| 久久电影国产免费久久电影| 欧美日韩国产不卡| 亚洲欧美中文字幕在线观看| 欧美1区免费| 国产日韩免费| 欧美三级三级三级爽爽爽| 欧美日韩在线精品一区二区三区激情综| 在线欧美一级视频| 一级特黄大欧美久久久| 91欧美在线视频| 成人xxxx| 欧美亚洲专区| 欧美在线视频二区| 国产日韩精品电影| 国产欧美在线观看| 亚洲黄色一区二区| 色欧美日韩亚洲| 亚洲一级在线| 国产一级在线播放| 日韩欧美国产亚洲| 亚洲福利视频专区| 久久久精品福利| 欧美日韩国产成人| 中文字幕成人乱码在线电影| wwwav91com| 欧美一级免费看| 91精品国产综合久久香蕉最新版| 久久久精品福利| 亚洲一区在线观看免费| 精品国产欧美日韩不卡在线观看| 欧洲精品二区| 国产激情久久| 首页国产欧美久久| 国产不卡一区二区在线观看| 中文字幕在线观看国产| 91久久久久| 一二三区精品福利视频| 日韩欧美中文在线视频| 韩国一区二区av| 日韩欧美色综合网站| 日韩欧美亚洲视频| 国产欧美日产一区| av中文天堂在线| 二区三区不卡不卡视频| 人成免费在线视频| 精品人妻二区中文字幕| 日韩欧美中文字幕在线播放| 欧美高清一区| 在线日韩中文| 欧美日韩国产中字| 亚洲免费看av| 久久久精品国产99久久精品芒果| 一区二区三区视频网站| 欧美日韩视频不卡| 久久久99免费| 久久精品www| 先锋男人资源站| 欧美日韩亚洲视频| 欧美另类专区| 欧美日韩亚州综合| 欧美日韩在线视频免费观看| 中文字幕中文字幕精品| 深夜福利亚洲| 国产亚洲一区字幕| 欧美在线日韩在线| 在线免费91| 国产91久久久久| 黄色一区二区在线| 亚洲第一视频在线观看| 免费高清视频日韩| 一区二区三区精品在线| 日韩中文字幕视频在线| 日韩中文字幕在线观看视频| 97最新国自产拍视频在线完整在线看| 另类专区欧美| 国产一区不卡精品| 日韩精品三级| 日本视频久久久| 亚洲综合日韩中文字幕v在线| 日韩精品福利一区二区三区| 国产黄在线观看| 欧美日韩在线播放三区四区| 国产欧美日韩久久| 日韩 欧美 中文| 日韩精品在线视频| 日韩精品综合在线| 日韩在线观看一区| 色国产在线视频| 欧美自拍一区| 91精品国产91久久久久久久久| 精品国产99| 国产激情在线观看| 91精品国产91久久久久久不卡| 国产视频97| 欧美日韩综合色| 日韩中文字幕| 国产视频中文字幕| 国产香蕉精品视频| 欧美日韩视频网站| 日韩精品视频在线观看视频| 欧美xxxx中国| 国产欧美综合在线| 国产欧美中文在线| 日韩欧美国产网站| 色综合久久88色综合天天免费| 久久视频免费看| 在线一区av| 中文字幕日韩精品在线| 亚洲免费精品视频| 欧美日韩三级在线| 1区2区在线| 欧美日韩综合视频网址| 91精品国产91久久久久久青草| 日韩精品在线中文字幕| 国产一区在线精品| 欧美日韩中文在线| 欧美日韩高清一区二区不卡| 91精品国产色综合久久不卡蜜臀| 日韩中文欧美在线| 91精品免费在线观看| 91精品久久久久久久久| 欧美日韩在线视频一区| 欧美日韩国产在线观看| 中文字幕乱码在线| 福利一区二区| 中文字幕第一页在线播放| 欧美国产综合在线V| 国产日韩在线视频| 日韩视频一区在线观看| 91麻豆视频网站| 欧美日韩综合高清一区二区 | 在线欧美日韩国产| 久久视频免费看| 精品播放一区二区| 二区三区中文字幕| 欧美日韩综合在线| 婷婷中文字幕一区三区| 九色蝌蚪视频在线| 色综合久久88色综合天天免费| 日韩欧美中文字幕精品| 日韩欧美国产免费播放| 中文字幕最新精品| 欧美日韩在线视频首页| 精品一二线国产| 中文字幕亚洲一区二区av在线| 精品999在线| 中文字幕亚洲二区| 日韩视频在线一区二区| 日本精品福利视频| 中文 欧美 日韩| 日韩午夜一区| 免费高清在线一区| 国产视频不卡| 欧美日韩中国免费专区在线看| 91精品高清| 玖玖在线免费视频| 91精品婷婷国产综合久久| 欧美日韩激情一区二区三区| 日韩中文字幕观看| 91麻豆视频网站| 久久综合九色欧美综合狠狠| 精品日韩99亚洲| 精品日韩av| 日韩在线三区| 午夜伦欧美伦电影理论片| 日韩国产一区| 亚洲福利精品| 91精品在线免费观看| 国产欧美中文字幕| 国产一级片在线| 国产成人精品免费久久久久| 日韩字幕在线观看| 国产黄色一区| 国产欧美日韩在线视频| 中文字幕精品视频在线| 免费高清视频日韩| 在线中文字幕视频| 中文字幕国产欧美| 在线一区免费| 国产自产视频| 91精品视频播放| 国产日韩中文字幕在线| 中文字幕在线观看欧美| 一区二区三区视频网站| av免费看在线| 久久久久久自在自线| 日韩精品资源二区在线| 一本一道久久a久久精品综合蜜臀| av免费不卡国产观看| 国产永久免费高清在线观看| 国产一区精品| 国产小视频免费在线网址| 99在线精品视频免费观看20| 日本xxxwww免费视频| 国产v日产∨综合v精品视频| 在线视频国产三级| 在线资源av| 亚洲视频在线观看日本a| 欧美三级三级三级爽爽爽| 狠狠色综合色区| a天堂在线资源| 精品国产91| 欧美三级免费观看| 91精品999| 最近免费中文字幕在线第一页| 丰满少妇一区二区| 欧美日韩第一区日日骚| 久草视频观看| 日本а中文在线天堂| av免费观看国产| 亚洲精品中文字幕乱码三区| 亚洲国产综合久久| 精品久久久久久综合日本欧美| 国产黄色片中文字幕| 中文av字幕一区| 精品久久电影| 中文在线日韩| 午夜av一区| 精人妻一区二区三区| 国产福利久久| 欧美中文字幕视频| 日韩中文字幕网| 在线一区免费| 欧美 日韩 国产在线| 亚亚洲欧洲精品| 日韩欧美色综合| 国产在线观看a| 欧美激情一区二区在线| 欧美日韩成人综合| 国产在线日韩精品| 激情综合色综合久久| 国产绿帽一区二区三区| 亚洲一级网站| 日韩av综合在线观看| 久久99精品久久久久久青青日本| 中文字幕一区二区三区精品| 日韩欧美国产视频| 国产在线日韩精品| 亚洲一区中文字幕在线观看| 日韩你懂的电影在线观看| 亚洲欧洲日韩在线| 国产成人精品999在线观看| 免费日韩精品中文字幕视频在线| 国产手机精品视频| 亚洲九九精品| 欧美在线日韩| 精品一区二区三区中文字幕在线| 日韩精品在线私人| 91久久久精品| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 国产中文在线播放| 欧美日韩国产免费| 成年人看的羞羞网站| 亚洲欧美中文字幕| 99国产成 人 综合 亚洲欧美| 欧美中文字幕视频| 中文字幕国产欧美| 国产婷婷在线观看| 国产午夜精品视频| 一区二区日韩视频| 精品在线观看一区| 蜜桃久久av一区| 激情五月综合|