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