程序轉換方法、處理器及計算機系統的制作方法
【技術領域】
[0001] 本發明實施例涉及計算機技術,尤其涉及一種程序轉換方法、處理器及計算機系 統。
【背景技術】
[0002] 隨著計算機及多媒體技術的發展,用戶對計算機的處理性能的要求越來越高。這 使得計算機中除包括中央處理器(Central Processing Unit,簡稱CPU)外,還包括圖形處 理器(Graphic Processing Unit,簡稱GPU) 〇
[0003]在計算機中,CPU可接收輸入輸出(Input Output,簡稱10)設備所發送的計算機程 序。該計算機程序可包括:CPU程序和GPU程序。該CPU在讀取該計算機程序后,可運行其中的 CHJ程序,將其中的GPU程序轉發至GPU,由該GPU運行該GPU程序。其中,該計算機程序可以為 用戶編程輸入的程序。該GPU程序中可包括數據本地化程序,使得該GPU執行該GPU程序時, 根據該數據本地化程序進行數據本地化,即將片外存儲資源中該GHJ程序所處理的數據存 儲至該GPU的片上存儲資源上,提高GPU運行該GPU程序時的數據訪存性能,提高GPU的處理 性能。其中,該片外存儲資源包括CPU和GHJ所在芯片外的存儲資源。該片上存儲資源包括 GPU所在芯片上的存儲資源。
[0004] 然而,該計算機程序可以為用戶通過10設備輸入的程序,也就是說,該GPU程序中 的數據本地化程序可以是該用戶通過GHJ編程語言編程獲得。由于該數據本地化與該GPU的 架構相關聯,那么用戶需清楚了解GHJ的架構信息以及GPU編程語言,從而使得GPU程序的開 發復雜度較高。
【發明內容】
[0005] 本發明實施例提供一種程序轉換方法、處理器及計算機系統,以降低GPU程序的開 發復雜度,提升GHJ程序的性能。
[0006] 本發明實施例提供一種程序轉換方法,包括:
[0007] 根據中央處理器CPU程序確定待生成圖像處理器GPU程序對應的數據本地化方式, 數據本地化方式包括:對待生成GHJ程序進行數據本地化采用的算法;
[0008] 根據CPU程序、GPU的存儲資源屬性和待生成GPU程序對應的數據本地化方式生成 GPU程序;GPU的存儲資源屬性為根據GPU的硬件存儲資源確定的。
[0009] 可選的,根據CPU程序確定待生成GPU程序對應的數據本地化方式,包括:
[0010] 根據CPU程序的計算訪存特征確定待生成GPU程序對應的數據本地化方式;計算訪 存特征包括:CPU程序的循環迭代特征。
[0011] 可選的,根據CPU程序的計算訪存特征確定待生成GPU程序對應的數據本地化方式 之前,該方法還可包括:
[0012] 對CPU程序進行語法分析,構成該CPU程序的中間表示;該CPU程序的中間表示可以 包括:逆波蘭記號、四元式或三元式,還可以包括其他形式。
[0013] 根據該CPU程序的中間表示確定該CPU程序的計算訪存特征。
[0014] 可選的,CPU程序的循環迭代特征包括:
[0015] CPU程序的不同循環迭代間是否通信、CPU程序的不同循環迭代處理的數據是否共 享和CPU程序的片外訪存是否連續。
[0016] 可選的,若CPU程序中一個循環迭代處理的數據為CPU程序中另一個循環迭代處理 后的數據,或者,一個循環迭代處理后的數據為另一個循環迭代處理的數據,則CPU程序的 不同循環迭代間存在通信;若一個循環迭代處理的數據不為另一個循環迭代處理后的數 據,且,一個循環迭代處理后的數據不為另一個循環迭代處理的數據,則CPU程序的不同循 環迭代間不存在通信;
[0017] 若CPU程序的一個循環迭代處理的數據與CPU程序中另一個循環迭代處理的數據 有相同的數據,則CHJ程序的不同循環迭代處理的數據存在共享;若一個循環迭代處理的數 據與另一個循環迭代處理的數據沒有相同的數據,則CPU程序的不同循環迭代處理的數據 不存在共享;
[0018] 若CPU程序中不同循環迭代處理數據對應的片外存儲資源上的存儲地址連續,則 CPU程序的片外訪存連續;若CPU程序中不同循環迭代處理數據對應的片外存儲資源上的存 儲地址不連續,則CPU程序的片外訪存不連續。
[0019] 可選的,根據CPU程序的計算訪存特征確定待生成GHJ程序對應的數據本地化方 式,包括:
[0020] 根據CPU程序的計算訪存特征,和預設的計算訪存特征與數據本地化方式的對應 關系,確定CPU程序的計算訪存特征對應的數據本地化方式為待生成GPU程序對應的數據本 地化方式。
[0021 ]可選的,數據本地化方式包括:待生成GPU程序的處理數據的目標存儲資源和待生 成GPU程序的處理數據的目標存儲資源對應的數據本地化方式。
[0022]可選的,待生成GHJ程序的處理數據的目標存儲資源包括:GHJ的片上存儲資源; GHJ的存儲資源屬性包括:GPU的片上存儲資源對應的數據本地化方式;
[0023]根據CPU程序、GPU的存儲資源屬性和待生成GPU程序對應的數據本地化方式生成 GPU程序,包括:
[0024]判斷目標存儲資源對應的數據本地化方式,與,GPU的存儲資源屬性中GPU的片上 存儲資源對應的數據本地化方法是否相同;
[0025]若相同,則確定待生成GPU程序需要進行數據本地化;
[0026] 根據CPU程序和待生成GPU程序對應的數據本地化方式生成GPU程序。
[0027]可選的,GPU的片上存儲資源可包括:寄存器或共享存儲器。
[0028]若GPU的片上存儲資源包括:寄存器;GPU的存儲資源屬性中寄存器對應的數據本 地化方式包括:向量化的數據本地化方式;
[0029]若GPU的片上存儲資源包括:共享存儲器;GPU的存儲資源屬性中共享存儲器對應 的數據本地化方式包括:向量化的數據本地化方式,或者,非向量化的數據本地化方式。 [0030]該程序轉換方法中,在生成GPU程序之前,還通過根據該CPU程序確定的該待生成 GPU程序的目標存儲資源對應的數據本地化方式,和,該GPU的存儲資源屬性中片上存儲資 源對應的數據本地化方式,判斷該待生成GPU程序是否需進行數據本地化,可保證執行該生 成的GPU程序過程中實現數據本地化,降低GPU的訪存壓力,提高GPU的訪存寬帶,更好地保 證GPU程序性能。
[0031] 可選的,根據CHJ程序和待生成GHJ程序對應的數據本地化方式生成GPU程序,包 括:
[0032]根據CPU程序和待生成GPU程序對應的數據本地化方式確定待生成GPU程序的目標 數據與待生成GPU程序的線程的對應關系;其中,待生成GPU程序的目標數據為待生成GPU程 序處理后的數據;
[0033]根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系,和,預設的 每次訪問數據的位置偏移,確定待生成GPU程序的源數據與待生成GPU程序的線程的對應關 系;其中,待生成GHJ程序的源數據為待生成GPU程序需處理的數據;
[0034] 根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系、待生成GPU 程序的源數據與待生成GPU程序的線程的對應關系、CPU程序,生成GPU程序。
[0035] 根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系、待生成GPU 程序的源數據與待生成GPU程序的線程的對應關系,生成GPU程序之前,該方法還包括:
[0036] 判斷待生成GPU程序各線程對應的目標數據中各數據的存儲地址是否超出待生成 GHJ程序的目標數據的存儲地址范圍;
[0037] 判斷待生成GHJ程序各線程對應的源數據中各數據的存儲地址是否超出待生成 GHJ程序的源數據的存儲地址范圍;
[0038] 若待生成GPU程序的各線程對應的目標數據中各數據的存儲地址均未超出待生成 GPU程序的目標數據的存儲地址范圍,且,待生成GPU程序各線程對應的源數據中各數據的 存儲地址均未超出待生成GPU程序的源數據的存儲地址范圍,根據待生成GPU程序的目標數 據與待生成GPU程序的線程的對應關系、待生成GPU程序的源數據與待生成GPU程序的線程 的對應關系和CPU程序,生成GPU程序。
[0039] 可選的,判斷待生成GPU程序各線程對應的目標數據各數據的存儲地址是否超出 待生成GPU程序的目標數據的存儲地址范圍之前,該方法還包括;
[0040] 根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系確定待生成 GHJ程序各線程對應的目標數據中各數據的存儲地址;
[0041] 根據待生成GPU程序各線程對應的目標數據中各數據的存儲地址,和,待生成GPU 程序的最大位置偏移,確定待生成GPU程序的目標數據的存儲地址范圍;
[0042]判斷待生成GPU程序的各線程對應的源數據中各數據的存儲地址是否超出待生成 GHJ程序的源數據的存儲地址范圍之前,該方法還包括:
[0043]根據待生成GPU程序的源數據與待生成GPU程序的線程的對應關系確定待生成GPU 程序各線程對應的源數據中各數據的存儲地址;
[0044]根據待生成GPU程序的源數據中各數據的存儲地址和待生成GPU程序的最大位置 偏移,確定待生成GHJ程序的源數據的存儲地址范圍。
[0045]可選的,該方法還包括:
[0046]若待生成GPU程序各線程對應的部分目標數據的存儲地址超出待生成GPU程序的 目標數據的存儲地址范圍,待生成GPU程序各線程對應的源數據中各數據的存儲地址均未 超出待生成GPU程序的源數據的存儲地址范圍,根據待生成GPU程序的另一部分目標數據與 待生成GPU程序的線程的對應關系、待生成GPU程序的源數據與待生成GPU程序的線程的對 應關系、CPU程序,生成GPU程序。
[0047] 可選的,該方法還可包括:
[0048] 若待生成GPU程序各線程對應的目標數據的存儲地址均未超出待生成GPU程序的 目標數據的存儲地址范圍,而待生成GPU程序各線程對應的部分源數據的存儲地址超出待 生成GPU程序的源數據的存儲地址范圍,根據待生成GPU程序的目標數據與待生成GPU程序 的線程的對應關系、待生成GHJ程序的另一部分源數據與待生成GPU程序的線程的對應關 系、CPU程序中的邊界規則、CPU程序生成GPU程序;其中,邊界規則包括:部分源數據的計算 規則。
[0049] 可選的,該部分源數據的計算規則可以包括:該部分源數據對應的預設值,或者, 該部分源數據與該另一部分源數據的計算關系。
[0050] 可選的,目標存儲資源包括:寄存器;待生成GPU程序的目標數據與待生成GPU程序 的線程的對應關系包括:待生成GPU程序的每個線程的目標數據與每個線程的對應關系;待 生成GPU程序的源數據與待生成GPU程序的線程的對應關系包括:每個線程的源數據與每個 線程的對應關系。
[0051 ]可選的,根據CPU程序和待生成GPU程序對應的數據本地化方式確定待生成GPU程 序的目標數據與待生成GHJ程序的線程的對應關系可以包括:
[0052]確定每個線程的任務粒度、待生成GPU程序的線程組織確定每個線程的目標數據 與每個線程的對應關系;其中,每個線程的任務粒度包括:每個線程處理的循環迭代次數; 待生成GPU程序的線程組織包括:待生成GPU程序中處理每層循環的所需開啟的線程數量; [0053]根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系,和,預設的 每次訪問數據的位置偏移,確定待生成GPU程序的源數據與待生成GPU程序的線程的對應關 系,包括:
[0054]根據每個線程的數據本地化粒度、每個線程的目標數據與每個線程的源數據的對 應關系,和,每次訪問數據的位置偏移,確定每個線程的源數據與每個線程的對應關系;每 個線程的數據本地化粒度包括:每個線程需處理的數據個數。
[0055]可選的,目標存儲資源包括:共享存儲器;待生成GPU程序的目標數據與待生成GPU 程序的線程的對應關系包括:待生成GPU程序的每個工作組的目標數據與每個工作組的對 應關系;待生成GPU程序的源數據與待生成GPU程序的線程的對應關系包括:每個工作組的 源數據與每個工作組的對應關系,和,每個工作組中每個線程的源數據與每個線程的對應 關系。
[0056]可選的,根據CPU程序和待生成GPU程序對應的數據本地化方式確定待生成GPU程 序的目標數據與待生成GHJ程序的線程的對應關系包括:
[0057]根據線程的任務粒度、待生成GPU的線程組織確定每個工作組的目標數據與每個 工作組的對應關系;其中,每個線程的任務粒度包括:每個線程處理的循環迭代次數;待生 成GPU程序的線程組織包括:待生成GPU程序中處理每層循環需開啟的線程數量;
[0058]根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系,和,預設的 每次訪問數據的位置偏移,確定待生成GPU程序的源數據與待生成GPU程序的線程的對應關 系,可以包括:
[0059] 根據每個工作組的目標數據與每個工作組的對應關系、每個工作組的數據本地化 粒度,和,每次訪問數據的位置偏移,確定每個工作組的源數據與每個工作組的對應關系; 每個工作組的數據本地化粒度包括:每個工作組需處理的數據個數;
[0060] 根據每個工作組的源數據與每個工作組的對應關系、每個線程的數據本地化粒 度,和,每次訪問數據的位置偏移,確定每個線程的源數據與每個線程的對應關系;每個線 程的數據本地化粒度包括:每個線程需處理的數據個數。
[0061] 如上所述的程序轉換方法,還針對不同的GPU片上存儲資源采用不同的方式生成 該GPU程序,可保證該生成的GPU程序的準確度,保證該生成的GPU程序的性能。
[0062]本發明實施例還提供一種處理器,包括:
[0063]確定模塊,用于根據中央處理器CPU程序確定待生成圖像處理器GPU程序對應的數 據本地化方式,數據本地化方式包括:對待生成GPU程序進行數據本地化采用的算法;
[0064]生成模塊,用于根據CPU程序、GPU的存儲資源屬性和待生成GPU程序對應的數據本 地化方式生成GPU程序;GPU的存儲資源屬性為根據GPU的硬件存儲資源確定的。
[0065] 可選的,確定模塊,還用于根據CPU程序的計算訪存特征確定待生成GPU程序對應 的數據本地化方式;計算訪存特征包括:CPU程序的循環迭代特征。
[0066] 可選的,CPU程序的循環迭代特征包括:CPU程序的不同循環迭代間是否通信、CPU 程序的不同循環迭代處理的數據是否共享和CPU程序的片外訪存是否連續。
[0067] 可選的,若CPU程序中一個循環迭代處理的數據為CPU程序中另一個循環迭代處理 后的數據,或者,一個循環迭代處理后的數據為另一個循環迭代處理的數據,則CPU程序的 不同循環迭代間存在通信;若一個循環迭代處理的數據不為另一個循環迭代處理后的數 據,且,一個循環迭代處理后的數據不為另一個循環迭代處理的數據,則CPU程序的不同循 環迭代間不存在通信;
[0068] 若CPU程序的一個循環迭代處理的數據與CPU程序中另一個循環迭代處理的數據 有相同的數據,則CHJ程序的不同循環迭代處理的數據存在共享;若一個循環迭代處理的數 據與另一個循環迭代處理的數據沒有相同的數據,則CPU程序的不同循環迭代處理的數據 不存在共享;
[0069]若CPU程序中不同循環迭代處理數據對應的片外存儲資源上的存儲地址連續,則 CPU程序的片外訪存連續;若CPU程序中不同循環迭代處理數據對應的片外存儲資源上的存 儲地址不連續,則CPU程序的片外訪存不連續。
[0070]可選的,確定模塊,還用于根據CPU程序的計算訪存特征,和預設的計算訪存特征 與數據本地化方式的對應關系,確定CPU程序的計算訪存特征對應的數據本地化方式為待 生成GPU程序對應的數據本地化方式。
[0071 ]可選的,數據本地化方式包括:待生成GPU程序的處理數據的目標存儲資源和待生 成GPU程序的處理數據的目標存儲資源對應的數據本地化方式。
[0072]可選的,待生成GHJ程序的處理數據的目標存儲資源包括:GHJ的片上存儲資源; GHJ的存儲資源屬性包括:GPU的片上存儲資源對應的數據本地化方式;
[0073]確定模塊,還用于判斷目標存儲資源對應的數據本地化方式,與,GPU的片上存儲 資源對應的數據本地化方法是否相同;若相同,則確定待生成GPU程序需要進行數據本地 化;
[0074]生成模塊,還用于根據CPU程序和待生成GPU程序對應的數據本地化方式生成GPU 程序。
[0075]可選的,確定模塊,還用于根據CPU程序和待生成GPU程序對應的數據本地化方式 確定待生成GPU程序的目標數據與待生成GPU程序的線程的對應關系;根據待生成GPU程序 的目標數據與待生成GPU程序的線程的對應關系,和,預設的每次訪問數據的位置偏移,確 定待生成GPU程序的源數據與待生成GPU程序的線程的對應關系;其中,待生成GPU程序的目 標數據為待生成GPU程序處理后的數據;待生成GPU程序的源數據為待生成GPU程序需處理 的數據;
[0076]生成模塊,還用于根據待生成GPU程序的目標數據與待生成GPU程序的線程的對應 關系、待生成GPU程序的源數據與待生成GHJ程序的線程的對應關系、CPU程序,生成GHJ程 序。
[0077] 可選的,處理器,還包括:
[0078] 判斷模塊,用于判斷待生成GPU程序各線程對應的目標數據中各數據的存儲地址 是否超出待生成GPU程序的目標數據的存儲地址范圍;判斷待生成GPU程序各線程對應的源 數據中各數據的存儲地址是否超出待生成GHJ程序的源數據的存儲地址范圍;
[0079] 生成模塊,還用于若待生成GPU程序的各線程對應的目標數據中各數據的存儲地 址均未超出待生成GPU程序的目標數據的存儲地址范圍,且,待生成GPU程序各線程對應的 源數據中各數據的存儲地址均未超出待生成GPU程序的源數據的存儲地址范圍,根據待生 成GPU程序的目標數據與待生成GPU程序的線程的對應關系、待生成GPU程序的源數據與待 生成GPU程序的線程的對應關系和CPU程序,生成GPU程序。
[0080] 可選的,確定模塊,還用于根據待生成GPU程序的目標數據與待生成GPU程序的線 程的對應關系確定待生成GPU程序各線程對應的目標數據中各數據的存儲地址;根據待生 成GPU程序各線程對應的目標數據中各數據的存儲地址,和,該待生成GPU程序的最大位置 偏移,確定該待生成GPU程序的目標數據的存儲地址范圍;根據該待生成GPU程序的源數據 與待生成GPU程序的線程的對應關系確定待生成GPU程序各線程對應的源數據中各數據的 存儲地址;根據待生成GPU程序的源數據中各數據的存儲地址和待生成GPU程序的最大位置 偏移,確定待生成GHJ程序的源數據的存儲地址范圍。
[0081 ]可選的,生成模塊,還用于若待生成GPU程序各線程對應的部分目標數據的存儲地 址超出待生成GPU程序的目標數據的存儲地址范圍,待生成GPU程序各線