亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: Linux C 程序如何優(yōu)化性能 [打印本頁(yè)]

作者: __slucx__    時(shí)間: 2014-03-25 13:20
標(biāo)題: Linux C 程序如何優(yōu)化性能
本帖最后由 __slucx__ 于 2014-03-25 13:28 編輯

接手一個(gè)程序,QT + C + 多線程, 程序運(yùn)行真的是慢的沒(méi)話說(shuō),
代碼里都處都是pthread_mutex_lock 與pthread_mutex_unlock,
包括界面代碼里,
請(qǐng)問(wèn)如果想優(yōu)化這個(gè)程序該從哪個(gè)方面入手?
還有就是如何規(guī)范代碼?

對(duì)此我想補(bǔ)充提問(wèn)幾個(gè)問(wèn)題,
請(qǐng)高/熟手賜教,長(zhǎng)長(zhǎng)姿勢(shì)

Linux C寫的程序如何優(yōu)化性能,
都說(shuō)20%的代碼占用著80%時(shí)間,
那關(guān)鍵如何找出這20%的代碼?
怎樣定位并優(yōu)化這部分代碼?
有什么工具嗎?

同時(shí)在嵌入式設(shè)備上怎樣應(yīng)對(duì)上面的問(wèn)題?
作者: shan_ghost    時(shí)間: 2014-03-25 13:47
鎖不一定就慢。CPU執(zhí)行一次原子操作不過(guò)幾個(gè)納秒而已。關(guān)鍵是鎖有無(wú)沖突。

可以用profile工具觀察下,看看是哪幾個(gè)函數(shù)慢、慢到哪了,再針對(duì)性的解決問(wèn)題。
作者: folklore    時(shí)間: 2014-03-25 14:08
本帖最后由 MMMIX 于 2014-03-25 21:04 編輯

我也想知道~~~~~~~~~~~~

[-hide]
只能重新實(shí)現(xiàn)~
[-/hide]
作者: shan_ghost    時(shí)間: 2014-03-25 14:42
本帖最后由 shan_ghost 于 2014-03-25 15:07 編輯
folklore 發(fā)表于 2014-03-25 14:08
我也想知道~~~~~~~~~~~~

本帖隱藏的內(nèi)容

只能重新實(shí)現(xiàn)~




[-hide]
高性能的程序常常不是profile出來(lái)的,而是一開(kāi)始就高性能,然后又用profile抓出并深度優(yōu)化了那“20%”的熱點(diǎn)而已。

一個(gè)很爛的程序,很可能不是20%的代碼拖慢了80%的性能,而是80%的代碼都在嚴(yán)重的影響性能。[-/hide]
作者: MMMIX    時(shí)間: 2014-03-25 14:51
在 C/C++ 版不要用隱藏貼,謝謝合作!

@folklore @shan_ghost
作者: cokeboL    時(shí)間: 2014-03-25 15:02
不厚道啊不厚道
作者: cokeboL    時(shí)間: 2014-03-25 15:03
也不厚道啊不厚道
作者: shan_ghost    時(shí)間: 2014-03-25 15:07
本帖最后由 shan_ghost 于 2014-03-25 15:08 編輯

回復(fù) 5# MMMIX


    嗯嗯,灰常徹底的去掉了
作者: __slucx__    時(shí)間: 2014-03-25 15:37
回復(fù) 2# shan_ghost


    多謝,去下載工具
作者: __slucx__    時(shí)間: 2014-03-25 15:59
回復(fù) 2# shan_ghost


    程序是多線程,對(duì)公共數(shù)據(jù)的訪問(wèn)都加了鎖,所以感覺(jué)程序執(zhí)行的效率很低
作者: hanzhenlll    時(shí)間: 2014-03-25 16:10
回復(fù) 1# __slucx__

    我覺(jué)得首先要讀懂代碼再去優(yōu)化 比用什么工具都強(qiáng),  話說(shuō)QT也只是顯示個(gè)UI界面而已,關(guān)鍵看你后臺(tái)那些時(shí)刻占用資源的循環(huán)是如何處理的,,一個(gè)結(jié)構(gòu)設(shè)計(jì)不好的軟件 怎么優(yōu)化都是徒勞的....
作者: shan_ghost    時(shí)間: 2014-03-25 16:29
本帖最后由 shan_ghost 于 2014-03-25 16:31 編輯

同意樓上。

鎖主要就是起個(gè)互斥/保護(hù)作用而已。程序結(jié)構(gòu)良好的話,鎖操作并不會(huì)帶來(lái)太大影響。

一般來(lái)說(shuō),的確是80%的性能問(wèn)題就出在20%的代碼上。但性能和性能是不一樣的,慢也是沒(méi)有下限的……

有可能重寫了20%的熱點(diǎn)代碼,不過(guò)是從慢到死變成很慢;再做個(gè)profiel,又不得不重寫另外的20%熱點(diǎn),結(jié)果又從很慢變成勉強(qiáng)可以接受的慢;再解決20%,又從勉強(qiáng)可以接受的慢變成看起來(lái)很快,但任務(wù)一重就慢到死……可這已經(jīng)是在原有框架下改寫60%的代碼了,工作量可是重寫的好多好多倍(因?yàn)榈貌煌5南蛟锌蚣芡讌f(xié),而且很難找到一個(gè)兩全的妥協(xié)方案);推倒重來(lái)時(shí),這些代碼多半就用不上了。

所以,最好還是先分析程序邏輯,看看究竟水到哪里了,是不是還有挽救價(jià)值,然后再針對(duì)性解決。
作者: andloani    時(shí)間: 2014-03-25 19:39
我自己是這么做的:寫個(gè)腳本在每個(gè)函數(shù)里面添加日志,把時(shí)間都打印出來(lái),執(zhí)行一遍看看log就知道時(shí)間花在哪里了,再針對(duì)性地優(yōu)化。
作者: MMMIX    時(shí)間: 2014-03-25 21:03
andloani 發(fā)表于 2014-03-25 19:39
我自己是這么做的:寫個(gè)腳本在每個(gè)函數(shù)里面添加日志,把時(shí)間都打印出來(lái),執(zhí)行一遍看看log就知道時(shí)間花在哪里 ...


直接用 profiling 工具吧,比你這方法快捷方便還可靠。
作者: __slucx__    時(shí)間: 2014-03-25 22:24
本帖最后由 __slucx__ 于 2014-03-25 22:40 編輯

@shan_ghost 你說(shuō)的性能檢測(cè)工具叫啥? 我怎么沒(méi)有找到?  gprof?
作者: __slucx__    時(shí)間: 2014-03-25 23:18
但是似乎gprof不支持多線程
作者: shan_ghost    時(shí)間: 2014-03-26 11:09
本帖最后由 shan_ghost 于 2014-03-26 11:10 編輯

gprof能在多線程場(chǎng)景正常執(zhí)行,但只能顯示主線程相關(guān)的信息。

http://blog.csdn.net/stanjiang2010/article/details/5655143
作者: fl3w    時(shí)間: 2014-03-26 16:19
gprofile吧,有的時(shí)候能幫你找到你以前根本想不到的瓶頸。

優(yōu)化無(wú)非就是兩步:找到性能瓶頸,優(yōu)化它,
前者求助于工具比較靠譜,后者就純靠技術(shù)實(shí)力了。
作者: __slucx__    時(shí)間: 2014-03-26 17:40
本帖最后由 __slucx__ 于 2014-03-26 17:41 編輯

回復(fù) 17# shan_ghost


    不行啊,我想要看全部的,以及各線程之間的影響,比如鎖的沖突
作者: shan_ghost    時(shí)間: 2014-03-26 18:46
回復(fù) 19# __slucx__


    前面給的鏈接里就有解決方案。

或者,直接google profile 工具 C,大堆的文章在等著你。
作者: 和尚VS禿頭    時(shí)間: 2014-03-28 14:55
推薦你一個(gè)工具vtune吧。intel的一個(gè)工具,能找出程序運(yùn)行的熱點(diǎn)(hotspots),主要是X86平臺(tái)。X86平臺(tái)intel的ICC編譯器一般會(huì)自動(dòng)優(yōu)化。ARM架構(gòu)優(yōu)化的主要是利用大量的寄存器。一般鎖是非常損耗性能的,能不用鎖就不用,盡量減少臨界區(qū)的數(shù)據(jù)量和計(jì)算,或者直接用局部變量替代。AMR里貌似也有SIMD相關(guān)的指令吧。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2