一種確定內(nèi)存單元類型的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種確定內(nèi)存單元類型的方法及裝置。
【背景技術(shù)】
[0002]在目前的一些編程框架下,例如統(tǒng)一計算設(shè)備架構(gòu)(Compute Unified DeviceArchitecture, CUDA)或開放運(yùn)算語言(Open Computing Language, OpenCL),需要程序員根據(jù)經(jīng)驗(yàn)確定內(nèi)存單元的類型,即內(nèi)存單元屬于全局存儲器還是屬于局部存儲器。而完全依賴程序員的主觀經(jīng)驗(yàn),極容易出現(xiàn)誤判。
[0003]所以,如何減小對內(nèi)存單元類型的誤判,成為目前亟待解決的問題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例提供了一種確定內(nèi)存單元類型的方法及裝置,目的在于解決如何減小對內(nèi)存單元類型的誤判的問題。
[0005]為了實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了以下技術(shù)方案:
[0006]本發(fā)明實(shí)施例的第一方面提供了一種確定內(nèi)存單元類型的方法,包括:
[0007]判斷在多線程訪問模式下,內(nèi)存單元被合并訪問的幾率是否大于第一閾值,以及在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,是否存在存儲體沖突;
[0008]如果內(nèi)存單元滿足第一條件,則將所述內(nèi)存單元的存儲類型確定為全局存儲,所述第一條件包括:在多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率大于第一閾值,或者,在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,存在存儲體沖突;
[0009]如果所述內(nèi)存單元滿足第二條件,則將所述內(nèi)存單元的存儲類型確定為局部存儲,所述第二條件包括:在所述多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率小于所述第一閾值,并且,在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,不存在存儲體沖突。
[0010]在本發(fā)明實(shí)施例的第一方面的第一種實(shí)現(xiàn)方式中,確定在所述多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率包括:
[0011 ] 統(tǒng)計在半線程束中、所述內(nèi)存單元被訪問的次數(shù)以及被合并訪問的次數(shù);
[0012]將所述被合并訪問的次數(shù)與所述被訪問的次數(shù)的比值作為所述被合并訪問的幾率;
[0013]判斷在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,是否存在存儲體沖突的過程包括:
[0014]統(tǒng)計在所述半線程束中、在所述內(nèi)存單元被訪問的過程中,存儲體沖突發(fā)生的次數(shù),如果所述存儲體沖突發(fā)生的次數(shù)不為零,則確定存在存儲體沖突,否則,則確定不存在存儲體沖突。
[0015]在本發(fā)明實(shí)施例的第一方面的第二種實(shí)現(xiàn)方式中,在將所述內(nèi)存單元的存儲類型確定為全局存儲或局部存儲之后,還包括:
[0016]生成分析代碼,所述分析代碼用于記錄所述內(nèi)存單元后續(xù)被訪問的情況,所述后續(xù)被訪問的情況至少包括以下一項:后續(xù)被合并訪問的次數(shù)、后續(xù)被訪問的次數(shù)。
[0017]在本發(fā)明實(shí)施例的第一方面的第三種實(shí)現(xiàn)方式中,還包括:
[0018]在將所述內(nèi)存單元的存儲類型確定為全局存儲的情況下,統(tǒng)計所述分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)以及被合并訪問的次數(shù);
[0019]當(dāng)所述分析代碼中記錄的內(nèi)存單元被訪問的次數(shù)大于第二閾值且被合并訪問的百分比小于第三閾值時,將所述內(nèi)存單元的類型更改為局部存儲,所述被合并訪問的百分比為所述被合并訪問的次數(shù)與所述被訪問的次數(shù)的比值;
[0020]在將所述內(nèi)存單元的存儲類型確定為局部存儲的情況下,統(tǒng)計所述分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)以及存儲體沖突發(fā)生的次數(shù);
[0021]當(dāng)分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)大于所述第二閾值且存儲體沖突發(fā)生的百分比大于第四閾值時,將所述內(nèi)存單元的類型更改為全局存儲,所述存儲體沖突發(fā)生的百分比為所述存儲體沖突發(fā)生的次數(shù)與所述被訪問的次數(shù)的比值。
[0022]在本發(fā)明實(shí)施例的第一方面的第四種實(shí)現(xiàn)方式中,所述內(nèi)存單元的初始類型包括:
[0023]預(yù)先定義的空類型。
[0024]本發(fā)明實(shí)施例的第二方面提供了一種確定內(nèi)存單元類型的裝置,包括:
[0025]判斷模塊,用于判斷在多線程訪問模式下,內(nèi)存單元被合并訪問的幾率是否大于第一閾值,以及在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,是否存在存儲體沖突;
[0026]第一確定模塊,用于如果內(nèi)存單元滿足第一條件,則將所述內(nèi)存單元的存儲類型確定為全局存儲,所述第一條件包括:在多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率大于第一閾值,或者,在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,存在存儲體沖突;如果所述內(nèi)存單元滿足第二條件,則將所述內(nèi)存單元的存儲類型確定為局部存儲,所述第二條件包括:在所述多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率小于所述第一閾值,并且,在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,不存在存儲體沖突。
[0027]在本發(fā)明實(shí)施例的第二方面的第一種實(shí)現(xiàn)方式中,所述判斷模塊確定在所述多線程訪問模式下,所述內(nèi)存單元被合并訪問的幾率包括:
[0028]所述判斷模塊統(tǒng)計在半線程束中、所述內(nèi)存單元被訪問的次數(shù)以及被合并訪問的次數(shù),將所述被合并訪問的次數(shù)與所述被訪問的次數(shù)的比值作為所述被合并訪問的幾率;
[0029]所述判斷模塊判斷在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,存在存儲體沖突的過程包括:
[0030]所述判斷模塊統(tǒng)計在所述半線程束中、在所述內(nèi)存單元被訪問的過程中,存儲體沖突發(fā)生的次數(shù),如果所述存儲體沖突發(fā)生的次數(shù)不為零,則確定存在存儲體沖突,否則,則確定不存在存儲體沖突。
[0031]在本發(fā)明實(shí)施例的第二方面的第二種實(shí)現(xiàn)方式中,還包括:
[0032]代碼生成模塊,用于在將所述內(nèi)存單元的存儲類型確定為全局存儲或局部存儲之后,生成分析代碼,所述分析代碼用于記錄所述內(nèi)存單元后續(xù)被訪問的情況,所述后續(xù)被訪問的情況至少包括以下一項:后續(xù)被合并訪問的次數(shù)、后續(xù)被訪問的次數(shù)。
[0033]在本發(fā)明實(shí)施例的第二方面的第三種實(shí)現(xiàn)方式中,還包括:
[0034]存儲類型更改模塊,用于在將所述內(nèi)存單元的存儲類型確定為全局存儲的情況下,統(tǒng)計所述分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)以及被合并訪問的次數(shù),當(dāng)所述分析代碼中記錄的內(nèi)存單元被訪問的次數(shù)大于第二閾值且被合并訪問的百分比小于第三閾值時,將所述內(nèi)存單元的類型更改為局部存儲,所述被合并訪問的百分比為所述被合并訪問的次數(shù)與所述被訪問的次數(shù)的比值;
[0035]在將所述內(nèi)存單元的存儲類型確定為局部存儲的情況下,統(tǒng)計所述分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)以及存儲體沖突發(fā)生的次數(shù),當(dāng)分析代碼中記錄的所述內(nèi)存單元被訪問的次數(shù)大于所述第二閾值且存儲體沖突發(fā)生的百分比大于第四閾值時,將所述內(nèi)存單元的類型更改為全局存儲,所述存儲體沖突發(fā)生的百分比為所述存儲體沖突發(fā)生的次數(shù)與所述被訪問的次數(shù)的比值。
[0036]在本發(fā)明實(shí)施例的第二方面的第四種實(shí)現(xiàn)方式中,還包括:
[0037]第二確定模塊,用于在所述判斷模塊判斷在多線程訪問模式下,內(nèi)存單元被合并訪問的幾率是否大于第一閾值,以及在所述多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,是否存在存儲體沖突之前,確定內(nèi)存單元的類型為預(yù)先定義的空類型。本發(fā)明實(shí)施例提供的確定內(nèi)存單元類型的方法及裝置,將在多線程訪問模式下,內(nèi)存單元被合并訪問的幾率,以及在多線程訪問模式下,在所述內(nèi)存單元被訪問的過程中,是否存在存儲體沖突,作為確定內(nèi)存單元類型的依據(jù),因?yàn)閮?nèi)存單元被合并訪問的幾率以及是否存在存儲體沖突均為內(nèi)存單元在多線程訪問模式下產(chǎn)生的客觀參數(shù),而不依賴程序員的主觀經(jīng)驗(yàn),所以,以客觀參數(shù)作為依據(jù)確定內(nèi)存單元的類型,能夠減小誤判。
【附圖說明】
[0038]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1為本發(fā)明實(shí)施例公開的一種確定內(nèi)存單元類型的方法的流程圖;
[0040]圖2為本發(fā)明實(shí)施例公開的又一種確定內(nèi)存單元類型的方法的流程圖;
[0041]圖3為本發(fā)明實(shí)施例公開的一種確定內(nèi)存單元類型的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0042]本發(fā)明實(shí)施例公開了一種確定內(nèi)存單元類型的方法,可以應(yīng)用于圖形處理器(Graphic Processing Unit, GPU)應(yīng)用程序通過OpenCL/CUDA編譯平臺在通用計算圖形處理器(General Purpose Computing on Graphics Processing Units, GPGPU)上運(yùn)行的場旦
ο
[0043]本發(fā)明實(shí)施例所述的方法,在內(nèi)存單元滿足第一條件時,將所述內(nèi)存單元的存儲類型確定為全局存儲,如果所述內(nèi)存單元滿足第二條件,則將所述內(nèi)存單元的存儲類型確定為局部存儲,其中,所述第一條件