本發(fā)明屬于gpu混合精度計(jì)算領(lǐng)域,特別涉及一種面向gpu的混合精度代碼自動生成方法及系統(tǒng)。
背景技術(shù):
1、gpu科學(xué)計(jì)算程序中的不同區(qū)域、不同變量對浮點(diǎn)精度的要求是不同的,采用混合精度計(jì)算方式,在程序中混合使用多種精度格式,充分利用不同數(shù)據(jù)精度敏感性的不同為數(shù)據(jù)分配相應(yīng)的浮點(diǎn)格式,并將部分計(jì)算指令轉(zhuǎn)換為低精度的計(jì)算指令,能夠有效降低計(jì)算與訪存強(qiáng)度,提升計(jì)算速度。然而如何確定程序中不同區(qū)域、不同變量具體需要的浮點(diǎn)精度,以及如何確定不同的混合精度方式帶來的性能提升效果都是困難且耗時(shí)的。因此,如何自動化地在符合誤差條件約束下確定科學(xué)計(jì)算程序中不同變量、不同區(qū)域采用的浮點(diǎn)精度,成為一個(gè)亟待解決的問題。
技術(shù)實(shí)現(xiàn)思路
1、為解決上述技術(shù)問題,本發(fā)明提供一種面向gpu的混合精度代碼自動生成方法,包括如下步驟:
2、步驟s1:設(shè)置待優(yōu)化的源代碼文件位置,設(shè)置高精度類型與低精度類型,設(shè)置搜索最高迭代次數(shù)為m次,設(shè)置誤差界限為eb,設(shè)置最高函數(shù)數(shù)量為nf,設(shè)置搜索個(gè)體數(shù)量為n0,設(shè)置搜索生成個(gè)體數(shù)量為ng,設(shè)置搜索測量個(gè)體數(shù)量為nm,設(shè)置突變概率為u0;
3、步驟s2:從所述源代碼提取函數(shù)簽名、變量名稱、函數(shù)調(diào)用點(diǎn),所述變量名稱是指函數(shù)中類型為浮點(diǎn)數(shù)或浮點(diǎn)數(shù)組的變量的名稱,所述函數(shù)調(diào)用點(diǎn)是指函數(shù)體內(nèi)調(diào)用其他函數(shù)的語句;設(shè)置多個(gè)混合精度參數(shù),所得的全部混合精度參數(shù)構(gòu)成所述源代碼對應(yīng)的混合精度空間,所述混合精度空間中全部混合精度參數(shù)的一組具體取值稱為一個(gè)混合精度配置;
4、步驟s3:逐個(gè)遍歷所有所述函數(shù)簽名,對遍歷到的每個(gè)函數(shù)簽名執(zhí)行測量模塊,根據(jù)測量結(jié)果篩選保留至多nf個(gè)函數(shù);
5、步驟s4:設(shè)置當(dāng)前群體為初始化生成的n0個(gè)所述混合精度配置,設(shè)置歷史最優(yōu)群體為初始化生成的n0個(gè)所述混合精度配置;
6、步驟s5:選取所述當(dāng)前群體中一個(gè)混合精度配置c0,選擇所述歷史最優(yōu)群體中一個(gè)混合精度配置c1,構(gòu)造新的混合精度配置c2,其中對于所述混合精度空間中的每個(gè)混合精度參數(shù)p,依照如下概率分布設(shè)置c2中p的取值:有u0概率為隨機(jī)值,有(1-u0)/2概率為c0中p的取值,有(1-u0)/2概率為c1中p的取值;將c2添加到生成群體中,重復(fù)步驟s5直到生成群體中有ng個(gè)混合精度配置;
7、步驟s6:對所述生成群體執(zhí)行預(yù)測過程篩選保留nm個(gè)混合精度配置,對所述nm個(gè)混合精度配置執(zhí)行測量過程篩選保留n0個(gè)混合精度配置,使用數(shù)據(jù)管理模塊更新所述當(dāng)前群體為所述n0個(gè)混合精度配置;將所述歷史最優(yōu)群體與所述當(dāng)前群體合并按照對應(yīng)性能數(shù)據(jù)排序,更新所述歷史最優(yōu)群體為所述排序后性能數(shù)據(jù)最大的至多n0個(gè)混合精度配置;如果步驟s6結(jié)果未改變所述當(dāng)前群體或者所述測量模塊啟動次數(shù)i滿足i>m,則跳轉(zhuǎn)到步驟s7,否則跳轉(zhuǎn)到步驟s5;
8、步驟s7:選取所述歷史最優(yōu)群體中性能數(shù)據(jù)最大的混合精度配置,使用代碼生成模塊生成對應(yīng)混合精度代碼。
9、有益效果:
10、1、現(xiàn)有的混合精度框架主要依賴于基于變量的誤差分析,例如satire為浮點(diǎn)計(jì)算提供了嚴(yán)格的誤差邊界。fpdetect中使用仿射計(jì)算對舍入誤差進(jìn)行了估計(jì),從而判斷在用戶給定的誤差范圍內(nèi)所需要的精度位數(shù)。herbgrind嘗試找出導(dǎo)致誤差的因果關(guān)系,adapt給出浮點(diǎn)精度敏感度和精度建議,s3fp會識別輸入數(shù)據(jù)中的不穩(wěn)定數(shù)據(jù)。而上述基于變量誤差分析的混精框架無法在gpu科學(xué)計(jì)算程序上取得很好的效果,原因如下,(1)、通過求導(dǎo)進(jìn)行誤差估計(jì),在變量多且迭代次數(shù)高的科學(xué)計(jì)算程序上求導(dǎo)過程時(shí)間空間開銷巨大,對gpu科學(xué)計(jì)算程序的求導(dǎo)過程通常由于顯存不足無法完成;(2)、基于變量的混合精度忽略了程序中多層次的混合精度優(yōu)化方法,無法利用函數(shù)級的粗粒度分析降低搜索過程的復(fù)雜度,無法利用不同數(shù)據(jù)區(qū)域精度要求不同的特點(diǎn)實(shí)現(xiàn)更優(yōu)的混合精度策略。gram是基于gpu的分塊混合精度框架,然而gram完全忽略了變量層面的混合精度機(jī)會,并且沒有對混合精度區(qū)域的位置做準(zhǔn)確分析。本發(fā)明公開了一種多層次的高度自動化的gpu科學(xué)計(jì)算程序混合精度計(jì)算方法,解決了上述問題。
11、2、現(xiàn)有混合精度框架大部分需要用戶修改源代碼,僅能輸出混合精度建議或者中間結(jié)果。本發(fā)明通過自動化的分析、搜索、生成過程,實(shí)現(xiàn)了全流程高度自動化的混合精度源代碼生成。
1.一種面向gpu的混合精度代碼自動生成方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的面向gpu的混合精度代碼自動生成方法,其特征在于,所述步驟s2中的混合精度空間,具體包括:
3.根據(jù)權(quán)利要求2所述的面向gpu的混合精度代碼自動生成方法,其特征在于,所述步驟s3:逐個(gè)遍歷所有所述函數(shù)簽名,對遍歷到的每個(gè)函數(shù)簽名執(zhí)行測量模塊,根據(jù)測量結(jié)果篩選保留至多nf個(gè)函數(shù),具體包括:
4.根據(jù)權(quán)利要求3所述的面向gpu的混合精度代碼自動生成方法,其特征在于,所述步驟s6:對所述生成群體執(zhí)行預(yù)測過程篩選保留nm個(gè)混合精度配置,對所述nm個(gè)混合精度配置執(zhí)行測量過程篩選保留n0個(gè)混合精度配置,使用數(shù)據(jù)管理模塊更新所述當(dāng)前群體為所述n0個(gè)混合精度配置;將所述歷史最優(yōu)群體與所述當(dāng)前群體合并按照對應(yīng)性能數(shù)據(jù)排序,更新所述歷史最優(yōu)群體為所述排序后性能數(shù)據(jù)最大的至多n0個(gè)混合精度配置;如果步驟s6結(jié)果未改變所述當(dāng)前群體或者所述測量模塊啟動次數(shù)i滿足i>m,則跳轉(zhuǎn)到步驟s7,否則跳轉(zhuǎn)到步驟s5,具體包括:
5.一種面向gpu的混合精度代碼自動生成系統(tǒng),其特征在于,包括下述模塊:
6.根據(jù)權(quán)利要求5所述的面向gpu的混合精度代碼自動生成系統(tǒng),其特征在于,所述剪枝模塊中測量模塊,用于將所述混合精度代碼編譯為可執(zhí)行文件,執(zhí)行所述可執(zhí)行文件并解析輸出內(nèi)容得到性能數(shù)據(jù)與誤差數(shù)據(jù)。
7.根據(jù)權(quán)利要求5所述的面向gpu的混合精度代碼自動生成系統(tǒng),其特征在于,所述篩選模塊中的數(shù)據(jù)管理模塊,用于持久化存儲代碼生成模塊與測量模塊的結(jié)果,對于已經(jīng)通過代碼生成模塊與測量模塊得到性能數(shù)據(jù)與誤差數(shù)據(jù)的混合精度配置,能夠在不使用代碼生成模塊與測量模塊的條件下任意次讀取相應(yīng)性能數(shù)據(jù)與誤差數(shù)據(jù)。