2014-01-24 55 views
1

我在用eclipse幹活,我寫了一個C++代碼與OpenCV庫,當我異形是他給我0%時,如何更改樣品計數或使用gprof進行頻率檢測? 10.0毫秒太多ubuntu.C++

每個樣品計數0.01秒。 沒有時間積累

% cumulative self    self  total   
time seconds seconds calls Ts/call Ts/call name  
    0.00  0.00  0.00  2  0.00  0.00 cvScalar(double, double, double, double) 
    0.00  0.00  0.00  1  0.00  0.00 _GLOBAL__sub_I__ZN3Cam11getPositionEP9_IplImage 
    0.00  0.00  0.00  1  0.00  0.00 Oeffnecamera(CvScalar, CvScalar) 
    0.00  0.00  0.00  1  0.00  0.00 Berechnepositon(CvScalar, CvScalar) 
    0.00  0.00  0.00  1  0.00  0.00 handleVersionKratky(std::string) 
    0.00  0.00  0.00  1  0.00  0.00 __static_initialization_and_destruction_0(int, int) 
    0.00  0.00  0.00  1  0.00  0.00 Cam::getPosition(_IplImage*) 
    0.00  0.00  0.00  1  0.00  0.00 Cam::GetThresholdedImage(_IplImage*, CvScalar, CvScalar) 
    0.00  0.00  0.00  1  0.00  0.00 std::operator|(std::_Ios_Openmode, std::_Ios_Openmode) 

的問題是,這0.01秒到了。 我外形有:

g++ -pg Name.cpp 
than ./a.out 

tahn gprof -b a.out > a.txt 
than cut a.txt. 

我怎樣才能改變樣品計數我得到0.0001秒或者我如何可以改變頻

+0

您在第一次編輯時說過它很緊急。究竟是什麼問題?如果你需要時間數據,你可以把'for(i = 0; i <1000; i ++){...}'放在它的周圍,秒錶,並把結果時間除以1000.如果'opencv'有任何IO ,請注意'gprof'不會測量它,因爲它是一個CPU採樣器。如果您正在查看自己的時間,請注意它沒有意義,因爲大多數函數都將大部分時間花費在調用其他函數或I/O中。 –

+0

嗨,問題是,我必須看看這個代碼中的每個函數花費在gprof上的時間。我需要現在哪個功能花費大部分時間,並且必須優化它。 – user3231703

+0

我無法使用for(i = 0; i <1000; i ++){...},因爲我有一個camcapture,它只能工作一次。我必須成爲一個調用圖才能呈現它,我需要每個樣本數爲10個的gmon.out文件microseconde – user3231703

回答

0

感謝更多的信息響應。在你的情況下,我會推薦一個好的分析器,一個在掛鐘時間採樣(不僅是CPU時間,如gprof),對整個調用堆棧進行採樣(而不僅僅是程序計數器,如gprof),並報告包含百分比時間通過代碼行(不只是像大多數分析器那樣通過函數)。其中之一是Zoom這不是免費的,但您可以使用試用版。請記住,每行(不是每個函數)都需要掛鐘(不是CPU)百分比(不是絕對),包括(不是自己)。

許多人認爲他們正在尋找一個「慢功能」。 不需要。您需要了解的是更一般的意義,爲什麼是花費其大部分時間的程序。 您只能通過按代碼行查看掛鐘時間的百分比來獲得該信息。

此外,我建議您從堆棧採樣器獲得的輸出將會給出比調用圖更好或更好的表示。調用圖表通常會有很多不相關的細節(低百分比的框)等。

+0

謝謝你的麥克爲你的答案,我已經安裝了縮放,我現在將與它一起工作,我希望它會幫助。我會寫回來,我得到它。最好的問候 – user3231703

+0

您好再次,我試圖分析一個正常的c + +代碼與變焦,但我不明白,它的工作總差異gprof或其他分析器,我已閱讀變焦介紹,但沒有好的信息如何剖析一個正常的C++代碼,kann你能幫我一下嗎?關於 – user3231703

+0

你可以在運行時設置它來獲取棧樣本。您可以調整採樣頻率。一旦它獲得了一組堆棧樣本,它就會爲每個函數提供一個蝴蝶視圖,一邊是呼叫者,另一邊是被調用者。它可以顯示一行代碼,以及該行代碼的包含百分比時間。例如:如果在函數Bar中有一個函數Foo的調用,那麼這個調用的自身時間可以忽略不計,但是如果它是堆棧樣本的30%,那麼該調用(不是函數,函數調用)佔30%的總時間。 –