• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            VTune工具使用心得

            轉載自:http://hi.baidu.com/luguowei/blog/item/b19568e796feca2db93820c9.html/cmtid/4d3dd7f809696c01d9f9fdc9

            0.     概述

            VTuneIntel一個比較強大的性能分析軟件。主要包括三個小工具:

            1Performance Analyzer:性能分析,找到軟件性能比較熱的部分,一般也就是性能瓶頸的關鍵點,幫助我們收集數據發現問題,至于Analyzer這個功能,有點大言不慚了,還得靠各位大家自己分析了,當然個人認為這一點會是Intel下一步強化該工具的重點。

            2Intel Threading Checker用于查找線程錯誤能夠檢測資源競爭、線程死鎖等問題大家程序在并行化后,可以通過Threading Checker 檢測一下有沒有多線程相關的錯誤。

            3Intel Threading Profiler:線程性能檢測工具,多線程化有可能會有負載比平衡同步開銷過大等等線程相關的性能問題。該工具可以幫你發現每一個線程每一時刻的狀態。

            可以簡單認為該工具是如下的使用順序:(發現可以多線程的代碼瓶頸)---進行并行等編碼階段---(發現多線程中錯誤部分)---改正代碼bug階段---(發現多線程中有待提高的瓶頸部分)---優化代碼性能階段。可以看出這套軟件針對代碼并行的實現有點服務到家的感覺,核心思想就是:找茬

            另外推薦一個配套的工具,就是Intel C++ 編譯器,可以集成到VS2005或者命令行下,配套使用應該會一些更好的效果,傳說中對Intel C++ 編譯器好像都是贊不絕口的,而且都是自家的東西,Intel肯定不會虧待它的。

            還有一個網上推薦的東西,直接粘貼過來,沒有了解過,不好多加評論: Intel MKL 函數庫,提供了VML 函數這些函數可以對超越函數(sin, cos, exp, log)進行優化。

            此外友情提示一下,如果你使用的是AMDCPU芯片,并一心決定以后繼續使用它的話,建議同學你就不用往下看了,理由就不告訴你了^_^

            本文章主要是對VTune的一個初級使用的心得總結,有什么不對的大家多扔板磚,算是一個拋磚引玉的作用吧,歡迎大家一起總結完善!

            1.    Intel Performance Analyzer

            對于該工具使用比較簡單,不過直接說一下,軟件名稱是性能分析,實際上只是對軟件操作進行時間上的總結和統計,用戶自己需要根據數據進行分析,總體來說,該性能分析工具同IBM的性能分析工具大致一樣,個人認為還不如IBM的好用的,呵呵。

            基本操作:

            1)新建一個工程:File->new project,一般選Quick Performence Analysis Wizard就可以了。

            2)選擇要測試的程序,在彈出的對話框中有Application to Launch,填入Debug文件下的exe程序就行了。

            3Run Activity:按工具欄上的綠色三角按鈕就行了,一般會自動運行程序,這時你執行你想要的操作。本來還有些配置可以配的,不過比較麻煩,一般的分析就算了。

            4)完了就會生成很多表,最麻煩的就是怎么看這些數據。左邊有這些數據的一個樹型列表,可以選擇看哪個統計表,中間就是相應的圖表現實,圖表下面還有一個Legend窗口,解釋圖表中的符號各是什么意思。

                   

            上圖為分析的主界面。對于分析圖表的結果,看上去比較多,其實真正有用的就一個(個人看法),首先出現的就是一個框架的分析結果,有一個柱狀圖來體現各種dll和進程的時間占用統計,當鼠標在每一個柱子上停留,ToolKit會顯示該進程的平均執行時間和執行的次數,右側Summary概述該進程下占用的比例等統計,下面的legend說明機器的配置和一些名次解釋。

            選擇進入相應的進程,則看到對應進程中各個函數的對應信息,在此不再詳細說明。這時通過統計圖可以發現程序性能主要的花費部分,這時就要運用你對代碼的了解和分析、經驗發現性能提升的地方,也就是你的性能最應該和最顯著提高,這時點擊你關系的函數,如果你有該函數的實現文件(cpp),則可以結合Source File進行一些簡單的分析,這里可以給你提供源代碼和匯編碼兩種方式來進行體現,供大家選擇。在Sampling Results中提供該進程下各個函數的時間統計,定位到每一個執行函數上(通常就是消耗時鐘時間最多的,即關鍵代碼)。如圖所示:

            比如上面這個分析結果,該函數是對圖片像素進行優化分類、分割處理、生成結果的功能,具有大量的數字運算和循環,這也是我們最應該和最有效采用多線程等手段提升效率的部分。源碼右邊的列表中給出了一些指令的執行次數和執行時間。經過分析又可以定位一些比較重點改進的指令。

            總結此工具,和IBM的性能分析工具作用大致相同(個人感覺還是推薦IBM的,其實都差不多,主要是先入為主了,而且圖形界面比較直觀),該工具的Call Graph選項也和IBM那樣支持圖形分析,但是我在機子上運行會崩潰,不知道為什么。該工具只是將分析的數據呈現給我們,而分析的過程還要依靠大家。另外,在源碼上點擊會出現一個窗口,顯示該行執行的次數等一些分析結果,不過我這個版本該功能還是很弱的,近似于沒有用處,可能會在下面的版本有所提升。

            注意:

            1)該軟件支持Linux系統,如果分析的軟件屬于跨平臺產品,可以根據各自情況查看是否有必要也同事在Linux下分析,個人認為我們的軟件沒有太大必要,完全可以在Windows下分析,發現問題進行改進,此功能主要針對只運行在Linux平臺下的軟件的,所以沒有進行研究。

            2)該軟件支持遠程模式,沒有發現我們的軟件是否有此功能的必要性,沒有進行過多研究,只是發現一個帖子知道如何遠程,會在附錄中添加上。

            3)使用VTune GUI去收集數據可能VTune本身開銷會影響分析結果,所以VTune提供命令行的分析模式,基本語法在附件中,個人認為現在我們在圖形界面下進行分析也會有很大收獲,考慮到時間成本也沒有進行過多研究。

            2.Intel Thread Checker

            非常不錯的一個工具,如果你用過上面性能分析的工具,這個上手也是比較容易的,界面和使用風格上保持一致,簡單說這個工具也是對加鎖解鎖的數據收集和對死鎖的檢測,將程序運行中發生的所有邏輯關系(讀寫操作)和認為死鎖現象(時間過長)體現給程序員,讓大家進行分析這些可能會導致deadlockdata races等問題。

            基本操作:

            1  New Project,在 New Project 對話框中,在 Category 下拉框里選擇 Threading Wizards ,在下面的 List View 中選擇 Intel? Thread Checker Wizard ,然后 OK 

            2 選擇你想要檢測的程序,一定是Debug的,可以查看源代碼,這個應該不是什么要求。

            3 Run Activity:按工具欄上的綠色三角按鈕就行了,一般會自動運行程序,這時你執行你想要的操作。另外,對于死鎖問題,可以設定時間,在Configure---Options---Cpllector--- Synchronization中進行設定,來定義你認為作為死鎖的最小時間設定。

            4 運行結束后生成很多表,然后就是我們自己分析了。

            下面就簡要說明一下這些表的作用和一些個人的使用心得:

            上圖是運行程序后生成的主界面(Diagnostics),以及源碼界面(Source View),這里最有用的信息主要是Short DescptionDescption這兩個列表內容,第一個表主要是對該操作可能導致的并行問題的歸類,比如data racedeadlock等,如果對此類錯誤不是很理解,可以點擊右鍵在菜單中查看Diagnostics Help,會對此類型錯誤進行一個概括的介紹,如下圖所示(介紹讀寫資源競爭):

            如上是我在多線程程序中的一個數據競爭的現象的幫助文檔說明,其邏輯關系是Read該數據后Write該數據,這種情況則可能會導致Data Race的問題,這在點上,Thread Checker則會把程序運行中的各種出現的邏輯情況都羅列并定位到代碼所在行。

            上圖是我在程序中的一個死鎖問題的幫助文檔的說明,給出可能的死鎖原因,正是我在程序中用到了WaitForSingleObject()函數,導致了線程函數和進程條死鎖的產生。同時可以定位到死鎖線程的源代碼,這時候,就需要我們仔細研究死鎖的原因了。下圖是我查看死鎖詳細描述定位到源代碼的界面(可見高亮顯示的兩個部分正是導致我線程死鎖的原因:創建后等待該線程,而此時線程調用MFC進程條,而進程條又在等該線程):

            對于Descption中的內容,則會闡述這個問題的具體內容,可以定位到具體代碼行,雙擊可以切換到代碼,這時大家可以分析這行代碼了,所示重點懷疑對象了,當然案件的真相和真兇則需要各位“偵探”來判斷啦。

            以上是我對Data racedeadlock的兩個問題程序進行的簡單的分析報告,根據Intel對該工具的介紹和相關資料,該工具主要就是針對這兩種情況進行分析。一般并行運算主要就是這兩種問題啦。(看資料應該可以做出這個判斷)

            總體來說該工具最有用的就是如上的兩個表的數據分析啦,當然還有另外兩個表,一個是Stack Traces,這個主要是對堆棧跟蹤,可以發現該程序堆棧,看一下一共創建了多少個線程之類的信息。另外一個則是圖表統計,統計檢測到的問題的一個堆疊柱狀圖。感覺用處不大。下圖是堆棧跟蹤圖:

            3.Intel Thread Profile

            正如Intelflash演示中介紹的那樣,這款工具的作用就是:improved thread application performance.當然坦白的說,要想讓工具自動實現這點不像說的那么簡單,準確來說,它的作用應該是幫助我們提高線程應用的性能,重點在“幫助”上。相對以上兩個工具的作用和定位,感覺這款工具目前的功能和它自身的定位還是有一些差距的,沒有很多像上面兩個工具提供一些分析的作用,而只是對代碼多線程的一個統計和圖形的直觀顯示,畢竟,要想讓工具自己找到優化方案是有點強人所難的。還有感覺網上對這款工具的使用介紹也不是很多,幾乎沒有,感覺不想上面兩款軟件應用的廣泛或者大家的代碼還沒有達到這一階段的要求吧。操作方法還是保持的一致風格,不用培訓,直接上手。

            基本操作:

            1 選擇你想要優化的程序,Debug版本可以調試到源代碼。在這點上程序支持普通模式(支持Windows API等)和OpenMP專有兩個模式。這里選擇第一個了,第二個不會用啊。

            2 Configure中可以配置一些選項,查看該優化程序的Dependence等,推薦還是默認吧,個人認為足夠我們用的了。

            3 點擊Finish運行你的程序,運行你的多線程程序吧,然后在運行你需要檢測的程序功能后點擊結束。       

            4 這時候則會生成一系列表格圖形讓大家分析。

                     下面我來簡單介紹一下主要表的功能吧,都是一些很基本的方法,剛剛上手,這個工具的使用教程網上不多,還沒有研究很深入,需要以后在多線程開發中學以致用才是關鍵。

                 TimeLine表:顧名思義就是時間線的統計,如下表所示,在這個表中,統計了所有線程按照時間軸的狀態:

                     上圖所示,在這個程序中,我創建了三個顯示,在加上主線程,一共四個,在這個時間軸中顯示了這四個線程從生到死的每一個瞬間,對于這些顏色,在右側會有說明,比較重要的比如綠色代表活動狀態,淺綠代表等待。橙色代表至少一個線程運行,灰色表示沒有此時沒有線程在運行。這樣大家可以很清楚的看到每一個線程的全部狀態,算是得到了程序線程運行的最直接、最表面的第一手資料了。當然秉承的VTune的一慣風格,雙擊可以跟蹤到源代碼哦(如果你有的話)。

                     Profile Filter表:對線程各種狀態的一個歸類,對此還不是很熟悉,是對時間表的各種狀態的一個統計直方圖,如下表所示:

                     上圖是對剛才那個時間表中各種線程各種狀態花費時間一個統計圖對比,灰色的是非活躍階段,橙色則是有一個線程活動的時間,統計出各個狀態的一個百分比。可以看出上面有許多不同的顯示方式,沒有太多研究,應該是按照不同的分類方式來對下面時間表的一個體現,大家可以按照自己的愛好去選擇吧。

                     另外還有一個Summary表格,是對整個程序運行的一個統計,在這個表格中數據要比圖表詳細很多,畢竟圖表只是一個通過圖形將一個重點數據更加直觀的表現,信息量相對數據來說要小很多,在這個摘要中,創建線程數,狀態都統計成表格,圖像如下:

                     總體來說,我對這個工具研究的時間不是很多,也不是很了解,只是入門了,以后用到的時候在發揮啦,呵呵。這款軟件就是將各個線程狀態進行一個統計和時間表現給大家,大家可以發現在某一時間多線程性能可能會有不盡如意的地方或還有很多提升空間,這樣大家可以抓住本質,重點來最有效的優化我們的并行程序。


            posted on 2010-09-21 02:15 楊粼波 閱讀(4671) 評論(0)  編輯 收藏 引用

            国产69精品久久久久99尤物| 精品久久久久成人码免费动漫 | 九九久久自然熟的香蕉图片| 麻豆久久久9性大片| 亚洲国产精品综合久久一线| 久久久久久久久久久免费精品| 精品久久久久久无码人妻热| 国产精品亚洲综合专区片高清久久久| 久久久久中文字幕| 91亚洲国产成人久久精品网址| 婷婷久久综合九色综合98| 久久夜色精品国产亚洲| 久久www免费人成看国产片| 久久国产成人午夜AV影院| 久久亚洲中文字幕精品一区| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久久久久久国产免费看| 欧美激情精品久久久久久久九九九| 欧美大战日韩91综合一区婷婷久久青草 | 日韩精品久久久久久| 久久精品国产精品亚洲| 久久无码一区二区三区少妇| 久久久国产99久久国产一| 色综合久久久久综合99| 久久亚洲春色中文字幕久久久| 久久国产成人精品麻豆 | 久久精品无码专区免费| 精品久久久久久无码不卡| 狠狠色丁香久久婷婷综合五月| 久久高清一级毛片| 亚洲乱码中文字幕久久孕妇黑人| 99久久99久久久精品齐齐| 精品国产一区二区三区久久蜜臀| 青青热久久国产久精品| 日韩人妻无码精品久久免费一| 久久综合九色综合精品| 香蕉久久夜色精品国产尤物| 久久久九九有精品国产| 99久久国产综合精品女同图片| 国产精品免费看久久久香蕉| 性做久久久久久久|