的指令的基本塊,或者沿著路徑308向下到被標(biāo)明 為"BB4"的指令的另一基本塊。在BB3處,控制可W沿著路徑310向下流到被標(biāo)明為"BB5" 的指令的基本塊。然而,在BB4處,控制可W沿著路徑312向下流到BB5,或者可W通過路 徑314循環(huán)回到BB4。因此,路徑314構(gòu)成循環(huán)??刂瓶蒞保持在BB4處,直到滿足使得控 制退出由路徑314限定的循環(huán)的條件。在BB5處,控制可W通過路徑316流到BB6。在BB6 處,控制可W通過路徑318流回到BBl。因此,從BBl到BB6并且再次返回而可W取的各種 路徑可W構(gòu)成另一循環(huán)。此外,由路徑314所限定的循環(huán)可W是在BBl和BB6之間的"較 大"循環(huán)內(nèi)的嵌套循環(huán)。在各種實(shí)施例中,諸如該些的循環(huán)內(nèi)的可執(zhí)行指令可W形成忙}。
[0027] 參考回圖1和圖2,在各種實(shí)施例中,分析器206可W被配置為例如從似內(nèi)檢測(cè) 沒有向量或循環(huán)迭代間相關(guān)性的可執(zhí)行指令的子集。該樣的指令子集在圖1中被標(biāo)識(shí)為 化}。為了檢測(cè)化},在各種實(shí)施例中,分析器206可W執(zhí)行相關(guān)性分析,例如W標(biāo)識(shí)在指令 之間的執(zhí)行次序約束(例如,循環(huán)迭代間相關(guān)性),W確定對(duì)可執(zhí)行指令進(jìn)行重排序是否是 安全的。在各種實(shí)施例中,分析器206可W在寄存器上執(zhí)行靜態(tài)相關(guān)性分析,W標(biāo)識(shí)數(shù)據(jù)相 關(guān)性。在各種實(shí)施例中,分析器206可W執(zhí)行重會(huì)聚分析W發(fā)現(xiàn)分支的兩個(gè)邊在哪里會(huì)聚, 例如,W標(biāo)識(shí)控制相關(guān)性。例如,在圖3中,BB2的端部處的分支會(huì)聚于BB5處,使得BB3和 BB4中的所有指令依賴于BB2的端部處的分支。
[0028] 作為相關(guān)性分析的部分,在各種實(shí)施例中,分析器206可W被配置為生成一個(gè)或 多個(gè)相關(guān)性鏈。用于指令/的相關(guān)性鏈巧U出了值:接/間接依賴于的所有指令(例如,由 /消耗的值的直接/間接產(chǎn)生器)。如果飽>含/本身(例如,7直接/間接依賴于本身),則 指令巧TW具有阻止向量化的迭代間相關(guān)性,并且因此可能不被指派給化}。另一方面,如 果/不直接/間接依賴于本身,則巧TW被指派給化}。在圖4中描繪了示例相關(guān)性鏈。圖 4中的指令1和3可W潛在地依賴于它們本身,并且因此可能不是可向量化的。
[0029] 在各種實(shí)施例中,分析器206可W被配置為例如從沒有向量相關(guān)性的可執(zhí)行指令 集(圖1中的化})中檢測(cè)適合于轉(zhuǎn)換為一個(gè)或多個(gè)SIMD指令的一個(gè)或多個(gè)可執(zhí)行指令。該 些指令在圖1中被指明為巧}。為了標(biāo)識(shí)巧},在一些實(shí)施例中,分析器206可W標(biāo)識(shí)引起 W規(guī)則間隔的地址而對(duì)存儲(chǔ)器的訪問的指令。例如,W存儲(chǔ)器位置的鄰接序列或者至少W 存儲(chǔ)器位置的可辨別模式(例如,每隔、每=個(gè)等)訪問存儲(chǔ)器的指令可W被視為W"規(guī)則" 間隔訪問存儲(chǔ)器,并且可W被描述為具有恒定"跨步(stride)"。在各種實(shí)施例中,巧}中的 可執(zhí)行指令的基本塊可W被認(rèn)為是可向量化的(例如,可轉(zhuǎn)換為SIMD)。將從該向量化獲得 的潛在增益可W例如由分析器206確定和提供為對(duì)用戶的報(bào)告或者對(duì)自動(dòng)化系統(tǒng)的輸入 W用于優(yōu)化可執(zhí)行指令。
[0030] 圖5描繪了根據(jù)各種實(shí)施例的可W例如由分析器206生成W提供向量化效益分析 的結(jié)果的示例報(bào)告500。報(bào)告500中呈現(xiàn)的信息和效益不意味著是限制性的,并且其它信息 和統(tǒng)計(jì)可W在報(bào)告中呈現(xiàn),該取決于執(zhí)行向量化效益分析的實(shí)體的偏好。在各種實(shí)施例中, 報(bào)告500可W取具有超鏈接和通常存在于網(wǎng)頁上的其它組件的超文本標(biāo)記語言("HTML") 文檔的形式。報(bào)告500可W附加地或替代地取其它形式,諸如經(jīng)由向量化效益分析計(jì)算機(jī) 程序的圖形用戶接口("GUI")。
[0031] 在各種實(shí)施例中,報(bào)告500可W包括在向量化效益分析期間計(jì)算的各種量。例如, 報(bào)告500可W包括被包含在循環(huán)中的可執(zhí)行指令或忙}如與過程中的所有指令或者{A}相 比的百分比。因此,在該示例中,{口中的可執(zhí)行指令可W形成{A}中的所有可執(zhí)行指令的 3. 1%。在各種實(shí)施例中,報(bào)告500可W附加地或替代地包括沒有向量相關(guān)性的可執(zhí)行指令 或化}(在圖5中被稱為"獨(dú)立Instr.")如與似相比的百分比,其在該示例中為100%。 在各種實(shí)施例中,報(bào)告500可W附加地或替代地包括可向量化的指令或巧}(在圖5中被稱 為"可向量化(作為封裝的)")如與(口相比的百分比,其在該示例中為100%。
[0032] 在各種實(shí)施例中,報(bào)告500可W包括平均行程(trip)計(jì)數(shù)乘W數(shù)據(jù)操作數(shù)大小。 在各種實(shí)施例中,"平均行程計(jì)數(shù)"可W指忙}中的可執(zhí)行指令的平均迭代(例如,執(zhí)行循環(huán) 中的可執(zhí)行指令的平均次數(shù))。在圖5的示例中,數(shù)據(jù)操作數(shù)大小(其可W是原始指令可W作 用于的數(shù)據(jù)的寬度)是8. 0字節(jié),其當(dāng)乘W平均行程計(jì)數(shù)時(shí)得到185. 6。在各種實(shí)施例中, 報(bào)告500可W包括忙}中的基本塊和兩邊(two-edge)基本塊的數(shù)目,其在該示例中分別為 1. 0和0,W捕獲循環(huán)內(nèi)的控制復(fù)雜度的量。
[0033] 在各種實(shí)施例中,評(píng)級(jí)(ranking)系統(tǒng)可W被采用W向用戶提供各種上述量影響 了向量化的潛在效益多少的快速和簡(jiǎn)單的指示。例如,在報(bào)告500中,在各種百分比和量的 右側(cè)描繪了一系列星該些星可W提供那些量中的每一個(gè)如何對(duì)向量化的影響起作用 的粗略指示。
[0034] 如上所指出的,似中的指令形成整個(gè)計(jì)算機(jī)程序{A}的3. 1%,該可能相當(dāng)于五 星中的S顆。在各種實(shí)施例中,如果忙}中的指令形成了整個(gè)程序{A}的更高的百分比,例 如,50%,那么可W給出四個(gè)或五個(gè)星。如果{口中的指令形成了 {A}的更低的百分比,例如, 1%,那么可W給出一或零個(gè)星。在各種實(shí)施例中,針對(duì)特定量而給出的星的數(shù)目可W基于與 該量相關(guān)聯(lián)的影響的各種闊值。該樣的闊值可W由用戶例如基于經(jīng)驗(yàn)數(shù)據(jù)和/或用戶偏好 來確定和/或配置。
[00巧]在各種實(shí)施例中,可W在報(bào)告500中報(bào)告關(guān)于可W通過向量化獲得的效益的信 息。例如,在一些實(shí)施例中,報(bào)告500可W包括可W通過向量化實(shí)現(xiàn)的整個(gè)程序或{A}的 多個(gè)可執(zhí)行指令的計(jì)數(shù)的減少。在圖5中,例如,報(bào)告了向量化將產(chǎn)生關(guān)于整個(gè)程序{A}的 1. 03X的增益。作為另一示例,在一些實(shí)施例中,報(bào)告500可W包括關(guān)于可執(zhí)行指令循環(huán){C} 的可執(zhí)行指令的計(jì)數(shù)的減少,其在該里是7. 73x。
[0036] 在各種實(shí)施例中,報(bào)告500中可W包括其它信息。例如,"循環(huán)展開"是在編譯期間 執(zhí)行的優(yōu)化過程,其中循環(huán)中的可執(zhí)行指令被重復(fù)多次(稱為"循環(huán)展開因子")。在一些實(shí) 施例中,分析器206可W被配置為確定循環(huán)展開因子,例如,W供在報(bào)告500中提供。
[0037] 另外或替代地,報(bào)告500可W包括用戶可操作元素,諸如對(duì)各種類型的信息的鏈 接。例如,在圖5中,報(bào)告500包括對(duì)W下各項(xiàng)的鏈接:循環(huán)忙}的匯編代碼、針對(duì)該特定程 序生成的控制流程圖(例如,在圖3中的300)、用于巧}的熱區(qū)的調(diào)試文件、和源文件。
[0038] 在各種實(shí)施例中,分析器206可W使用諸如W下一個(gè)的算法來確定來自向量化的 潛在增益。
[0039] 在該示例中,"潛在增益"可W是提供可W通過向量化獲得的增益的指示(例如, 作為百分比)的正數(shù)。"Total_Insts"可W是指代{A}中的可執(zhí)行指令的總數(shù)的正數(shù)。 "Estimated_Vector_Insts"可W是指代被標(biāo)識(shí)為適合于轉(zhuǎn)換為SIMD指令的可執(zhí)行指 令(例如,巧})的所估計(jì)數(shù)目除W所謂的"Iteration_Reduction_Ratio"的正數(shù)。"Non_ Vectorizable_Insts"可W是指代在{A}中的可執(zhí)行指令的總數(shù)與{A}中的不可向量化的 可執(zhí)行指令的數(shù)目之間的差(例如,{4}-巧})的正數(shù)。"Iteration_Re化ction_Ratio"可 W是指代所謂的"Avg_Trip_Count"除W所謂的"Vectorized_T;rip_Count"的正數(shù)。"Avg_ Trip_Count"可W是指代檢查中的循環(huán)的循環(huán)迭代的平均數(shù)的正數(shù)。"Vectorized_T;rip_ Count"可W是指代"Avg_Trip_Count"與所謂的"Vector_Element_Size"的向上舍入的乘 積除W所謂的"SIMD_Wi化h"的正數(shù)。"Vector_Element_Size"可W是指代通過指令而在 其上操作的數(shù)據(jù)操作數(shù)的大小的正數(shù)。"SIMD_Wi化h"可W是指代SIMD寄存器的寬度的正 數(shù),例如W字節(jié)。
[0040] 圖6描繪了示例方法600,其各種方面可W通過仿真器202、效能評(píng)測(cè)器204和/ 或分析器206中的一個(gè)或多個(gè)實(shí)現(xiàn),W執(zhí)行向量化效益分析。該些技術(shù)可W在整數(shù)或浮點(diǎn) C卞P")代碼上使用,并且可W在標(biāo)量代碼和已經(jīng)部分向量化的代碼(例如,SSE到AVX)二者 上使用。在框602處,可W例如由仿真器202來執(zhí)行多個(gè)可執(zhí)行指令{A},諸如計(jì)算機(jī)程序 或指令跟蹤。在框604處,可W例如由效能評(píng)測(cè)器204來檢測(cè)多個(gè)可執(zhí)行指令的執(zhí)行密集 點(diǎn)或"熱點(diǎn)"巧}。
[0041] 在框606處,可W例如由分析器206從多個(gè)可執(zhí)行指令{A}內(nèi)檢測(cè)包括循環(huán)的可 執(zhí)行指令集,例如忙}。在框608處,可W例如由分析器206從忙}內(nèi)檢測(cè)不具有相關(guān)性(其 可能阻止向量化)的可執(zhí)行指令集,例如化}。在框610處,可W例如由分析器206從化} 內(nèi)檢測(cè)W規(guī)則間隔訪問寄存器或存儲(chǔ)器的一個(gè)或多個(gè)可執(zhí)行指令,例如巧}。在框612處, 可W例如由分析器206來提供通過向量化巧}中的指令將獲得的效益的指示。在一些實(shí)施 例中,那些效益可W在報(bào)告中被提供,諸如圖5的報(bào)告500。在一些實(shí)施例中,那些效益可W 被提供為對(duì)另一計(jì)算機(jī)程序的輸入,例如W允許所述另一計(jì)算機(jī)程序選擇性地執(zhí)行多個(gè)可 執(zhí)行指令{A}中的一個(gè)或多個(gè)可執(zhí)行指令的向量化。
[0042] 圖7描繪了根