BBV:实验基本块向量生成工具
目錄
12.1。概觀12.2。使用基本塊向量創(chuàng)建SimPoints12.3。BBV命令行選項12.4。基本塊向量文件格式12.5。履行12.6。線程可執(zhí)行支持12.7。驗證12.8。性能要使用此工具,必須--tool=exp-bbv在Valgrind命令行上指定?。
12.1。概觀
基本塊是具有一個入口點和一個出口點的代碼的線性部分。甲基本塊矢量(BBV)是程序執(zhí)行過程中輸入的所有的基本塊的列表,以及每個基本塊多少次運行的計數(shù)。
BBV是一種生成用于SimPoint?分析工具的基本塊向量的?工具。SimPoint方法可以通過僅運行程序的一小部分,然后從這個小部分推斷出整體行為,從而加速架構(gòu)模擬。大多數(shù)程序表現(xiàn)出基于階段的行為,這意味著在執(zhí)行期間的不同時間,程序?qū)⒂龅綍r間間隔,其代碼的行為類似于之前的間隔。如果您可以檢測到這些間隔并將它們組合在一起,則可以通過僅模擬最小數(shù)量的間隔,然后縮放結(jié)果來獲得總體程序行為的近似值。
在計算機體系結(jié)構(gòu)研究中,在循環(huán)精確模擬器上運行基準測試可能會導致1000倍的減速,從而需要數(shù)周,數(shù)周甚至更長的時間才能運行完整的基準。通過使用SimPoint可以顯著降低,通常為90-95%,同時仍然保持合理的準確性。
T. Sherwood,E.Perelman,H. Hamerly和B. Calder在“自動表征大規(guī)模程序行為”的文章中可以找到SimPoint如何工作的更完整的介紹。
12.2。使用基本塊向量創(chuàng)建SimPoints
要快速創(chuàng)建一個基本的塊向量文件,您將像這樣調(diào)用Valgrind:
valgrind --tool = exp-bbv / bin / ls在這種情況下,我們正在運行/bin/ls,但這可以是任何程序。默認情況下,bb.out.PID將創(chuàng)建一個調(diào)用的文件?,其中PID被正在運行的進程的進程ID替換。該文件包含基本的塊向量。對于長時間運行的程序,此文件可能相當大,因此使用gzip或其他壓縮程序進行壓縮可能是明智之舉。
要創(chuàng)建實際的SimPoint結(jié)果,您將需要可從SimPoint網(wǎng)頁獲得的SimPoint實用程序?。假設您下載了SimPoint 3.2并對其進行了編譯,請使用以下命令創(chuàng)建SimPoint結(jié)果:
./SimPoint.3.2/bin/simpoint -inputVectorsGzipped \-loadFVFile bb.out.1234.gz \-k 5 -saveSimpoints results.simpts \-saveSimpointWeights results.weights其中bb.out.1234.gz是由BBV生成的壓縮基本塊向量文件。
SimPoint實用程序使用15維進行隨機線性投影,然后使用k均值聚類來計算哪些間隔是感興趣的。在本例中,我們使用-k 5選項指定了5個間隔。
SimPoint運行的輸出是?results.simpts?和results.weights文件。第一個是程序的最相關(guān)的5個間隔。當外推全程序行為時,秒數(shù)保持縮放每個間隔的權(quán)重。間隔和權(quán)重可以與支持快進的模擬器結(jié)合使用;?您快速轉(zhuǎn)到感興趣的間隔,收集所需間隔長度的統(tǒng)計數(shù)據(jù),然后使用與權(quán)重結(jié)合使用的統(tǒng)計量來計算結(jié)果。
12.3。BBV命令行選項
BBV特定的命令行選項有:
--bb-out-file=<name> [default: bb.out.%p]此選項選擇基本塊向量文件的名稱。的?%p和%q格式說明可以用來嵌入進程ID和/或名稱的環(huán)境變量的內(nèi)容,由于是用于芯選項的情況下?--log-file。
此選項選擇PC文件的名稱。該文件保存各種基本塊的程序計數(shù)器地址和功能名稱信息。這可以與基本塊向量文件結(jié)合使用,通過函數(shù)名稱快速轉(zhuǎn)換,而不僅僅是指令計數(shù)。的?%p和%q格式說明可以用來嵌入進程ID和/或名稱的環(huán)境變量的內(nèi)容,由于是用于芯選項的情況下?--log-file。
此選項選擇要使用的間隔的大小。默認值是100萬條指令,這是一個常用的值。其他尺寸可以使用;?較小的間隔可以幫助程序更精細的階段。然而,較小的間隔大小可能導致由于預熱效應導致的準確性問題(當快速轉(zhuǎn)發(fā)各種架構(gòu)特征將被初始化時,在將“預熱”到狀態(tài)之前需要一些數(shù)量的指令進行完全模擬將沒有快進,大間隔時間往往會減輕這種情況。)
該選項指示該工具僅顯示指令計數(shù)總計,并且不生成實際的基本塊向量文件。這對于調(diào)試和收集指令計數(shù)信息而無需生成大型基本塊向量文件非常有用。
12.4。基本塊向量文件格式
基本塊向量以固定間隔傾倒。這通常是每1億個指令完成的;?該?--interval-size選項可用于更改此選項。
輸出文件如下所示:
T:45:1024:189:99343 T:11:78573:15:1353:56:1 T:18:45:12:135353:56:78 314:4324263每個新的間隔以T開始。在相同的行上跟隨一系列基本塊和頻率對,一個在間隔期間輸入的每個基本塊。每個塊/頻率對的格式是冒號,后跟一個數(shù)字,唯一標識基本塊,另一個冒號,然后是頻率(這是塊輸入的次數(shù)乘以在塊)。這些對由一個空格彼此分開。
頻率計數(shù)乘以基本塊中的指令數(shù),以便權(quán)重計數(shù),使得小基本塊中的指令不被計入比大基本塊中的指令更重要的位置。
SimPoint程序只處理以“T”開頭的行。所有其他行都被忽略。傳統(tǒng)的注釋是用一個“#”字符開始的。一些其他BBV生成工具,如PinPoints,生成以“T”以外的字母開始的行,以指示有關(guān)正在運行的程序的更多信息。我們不會生成這些,因為SimPoint實用程序忽略它們。
12.5。履行
Valgrind提供創(chuàng)建BBV文件所需的所有信息。在當前的實現(xiàn)中,所有指令都將進行檢測。這比使用基本塊級別的方法慢(約兩倍),但是有一些復雜性(特別是使用代表前綴檢測),使得該方法更加困難。
Valgrind實際上提供了超級塊級的儀器。超級塊有一個入口點,但不同于基本塊可以有多個出口點。一旦一個分支出現(xiàn)在一個塊的中間,它被分割成一個新的基本塊。由于Valgrind不能產(chǎn)生“真實”基本塊,因此生成的BBV向量將與其他工具生成的不同。實際上,這似乎并不影響SimPoint結(jié)果的準確性。我們在內(nèi)部強制?--vex-guest-chase-thresh=0?選擇Valgrind,這迫使更基本的塊狀行為。
當超級塊是第一次運行時,它會用我們的BBV程序進行測試。分配塊信息(bbInfo)結(jié)構(gòu),其保存塊的各種信息和統(tǒng)計信息。將唯一的塊ID分配給塊,然后將結(jié)構(gòu)放入有序集中。然后,該塊中的每個本地指令被調(diào)用為使用指向塊信息結(jié)構(gòu)的指針作為參數(shù)來調(diào)用指令計數(shù)例程。
在運行時,我們的指令計數(shù)例程每個本機指令被調(diào)用一次。訪問相關(guān)的塊信息結(jié)構(gòu),更新塊計數(shù)和總指令數(shù)。如果總指令計數(shù)溢出間隔大小,則我們走排序集,寫出在該間隔中訪問的任何塊的統(tǒng)計信息,然后將塊計數(shù)器重置為零。
在x86和amd64架構(gòu)上,計數(shù)代碼具有處理代表前綴字符串指令的額外代碼。這是因為實際的硬件將一個前綴的指令作為一個指令進行計數(shù),而一個天真的Valgrind實現(xiàn)將會計數(shù)盡可能多(可能數(shù)百,數(shù)千甚至數(shù)百萬)的指令。我們特別處理代表前綴的指令,以使結(jié)果與硬件性能計數(shù)器匹配。
BBV也計算fldcw指令。該指令以各種方式用于x86機器上;?將浮點值轉(zhuǎn)換成整數(shù)時最常見。在Pentium 4系統(tǒng)上,退出的指令性能計數(shù)器將該指令計數(shù)為兩條指令(所有其他已知處理器僅計數(shù)為一條)。當在Pentium 4系統(tǒng)上使用SimPoint時,這可能會影響結(jié)果。我們提供fldcw計數(shù),以便用戶可以評估是否會影響其結(jié)果,以避免使用奔騰4機器進行實驗。可以為此工具添加一個模擬雙重計數(shù)的選項,以便生成的BBV文件可用于使用Pentium 4系統(tǒng)上硬件性能計數(shù)器的實驗。
12.6。線程可執(zhí)行支持
BBV支持線程程序。當程序有多個線程時,會為每個線程創(chuàng)建一個附加的基本塊向量文件(每個附加文件是指定的文件名,結(jié)尾附加了線程號)。
沒有官方的方法使用SimPoint與線程工作負載。最常見的方法是獨立運行每個線程的SimPoint,并使用一些確定性執(zhí)行方法來嘗試匹配原始工作負載。這可以用當前的BBV來實現(xiàn)。
12.7。驗證
BBV已經(jīng)在x86,amd64和ppc32平臺上進行了測試。早期版本的BBV已經(jīng)使用硬件性能計數(shù)器進行了詳細的測試,這項工作在VMweaver和SA McKee的HiPEAC'08大會“使用動態(tài)二進制儀器生成多平臺SimPoints:方法和準確性”的論文中進行了描述。
12.8。性能
使用此程序可以通過本地執(zhí)行將執(zhí)行速度降低約40倍。這取決于所使用的機器和正在運行的基準。在3.4 GHz Pentium D處理器上運行的SPEC CPU 2000基準測試中,減速范圍從24x(mcf)到340x(vortex.2)。
總結(jié)
以上是生活随笔為你收集整理的BBV:实验基本块向量生成工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ip 转发设置 ip_for
- 下一篇: Web编程核心