新四季網

用於通用計算的數據訪問方法、裝置和系統與流程

2024-04-16 14:48:05



1.本技術涉及集成電路技術領域,特別是涉及一種用於通用計算的數據訪問方法、裝置、計算機設備、存儲介質和電腦程式產品。


背景技術:

2.圖形處理晶片gpu(graphics processing unit)包含大量的並行處理單元,可以通過編程,進行單指令多數據流(simd)的並行計算,這使得gpu不僅僅可用於圖形繪製的硬體加速,更多地可以應用到通用的並行計算中,例如圖像的濾波降噪、視頻壓縮、物理仿真、人工智慧、科學計算等。
3.在通用計算中存儲空間的讀寫訪問是個重要的步驟,然而,傳統技術中的讀寫訪問地址往往具有隨機性,且晶片內部的緩存大小有限,這使得通用計算的數據訪問的讀寫訪問操作比較耗時。
4.因此,相關技術中的通用計算過程存在數據訪問效率不高的問題。


技術實現要素:

5.基於此,有必要針對上述技術問題,提供一種能夠提高通用計算過程數據訪問效率的數據訪問方法、裝置、系統、計算機設備、計算機可讀存儲介質和電腦程式產品。
6.第一方面,本技術提供了一種用於通用計算的數據訪問方法,所述方法包括:
7.接收目標線程訪問目標數據發起的第一訪問請求;
8.解析所述第一訪問請求,確定所述目標線程的線程構造信息;所述線程構造信息用於表徵所述目標線程是否為線程構造樣板構造得到的線程;所述線程構造樣板用於將工作組構造為具有多個連續工作項的線程;
9.在所述目標線程為所述線程構造樣板構造得到的線程的情況下,根據所述第一訪問請求對應的索引類型標識,讀取所述目標線程對應的索引參數信息;所述索引參數信息為根據所述目標線程中的首個工作項的工作項索引確定的;
10.轉換所述索引參數信息為存儲器訪問地址,並發送攜帶有所述存儲器訪問地址的第二訪問請求,以訪問所述目標數據。
11.在其中一個實施例中,所述轉換所述索引參數信息為存儲器訪問地址,包括:獲取所述第一訪問請求所對應的地址偏移信息;根據所述地址偏移信息,將所述索引參數信息轉換為所述存儲器訪問地址。
12.在其中一個實施例中,所述根據所述地址偏移信息,將所述索引參數信息轉換為所述存儲器訪問地址,包括:根據所述地址偏移信息和所述索引參數信息,確定首地址偏移信息;獲取所述目標數據的數據格式信息,並根據所述目標數據的數據格式信息和所述首地址偏移信息,生成針對所述目標線程的一維線性首地址;確定所述一維線性首地址為所述存儲器訪問地址。
13.在其中一個實施例中,所述獲取所述目標數據的數據格式信息,包括:根據所述第
一訪問請求中的指令代碼所表徵的請求類型,確定與所述請求類型相應的寄存器;執行對所述寄存器的讀取操作,得到與所述目標數據相應的寄存器信息;其中,所述寄存器信息包括所述目標數據的寬度信息、高度信息或數據格式信息中的至少一種。
14.在其中一個實施例中,所述發送攜帶有所述存儲器訪問地址的第二訪問請求,包括:根據所述第一訪問請求中的指令代碼所表徵的請求類型,確定所述第一訪問請求所請求訪問的存儲單元;發送攜帶有所述存儲器訪問地址的第二訪問請求至所述存儲單元。
15.在其中一個實施例中,所述方法還包括:檢測所述存儲器訪問地址的地址類型信息;所述地址類型信息用於表徵所述存儲器訪問地址為連續地址或離散地址;在所述地址類型信息表徵所述存儲器訪問地址為連續地址的情況下,執行所述發送攜帶有所述存儲器訪問地址的第二訪問請求至所述存儲單元的步驟。
16.在其中一個實施例中,所述根據所述第一訪問請求對應的索引類型標識,讀取所述目標線程對應的索引參數信息,包括:發送索引參數讀取請求至輸入裝載模塊;所述索引參數讀取請求用於指示所述輸入裝載模塊返回與所述目標線程、所述索引類型標識對應的目標索引id;接收所述輸入裝載模塊返回的所述目標索引id,作為所述目標線程對應的索引參數信息;其中,所述輸入裝載模塊預先儲存有與由所述線程構造樣板構造得到的各線程對應的索引id記錄;所述索引id記錄包括各所述索引類型標識對應的索引id。
17.第二方面,本技術還提供了一種用於通用計算的數據訪問裝置,所述裝置包括:
18.接收模塊,用於接收目標線程訪問目標數據發起的第一訪問請求;
19.解析模塊,用於解析所述第一訪問請求,確定所述目標線程的線程構造信息;所述線程構造信息用於表徵所述目標線程是否為線程構造樣板構造得到的線程;所述線程構造樣板用於將工作組構造為具有多個連續工作項的線程;
20.讀取模塊,用於在所述目標線程為所述線程構造樣板構造得到的線程的情況下,根據所述第一訪問請求對應的索引類型標識,讀取所述目標線程對應的索引參數信息;所述索引參數信息為根據所述目標線程中的首個工作項的工作項索引確定的;
21.轉換模塊,用於轉換所述索引參數信息為存儲器訪問地址,並發送攜帶有所述存儲器訪問地址的第二訪問請求,以訪問所述目標數據。
22.第三方面,本技術還提供了一種用於通用計算的數據訪問系統,所述系統包括:
23.執行單元,用於發送目標線程訪問目標數據發起的第一訪問請求至地址索引轉換器;
24.所述地址索引轉換器,用於解析所述第一訪問請求,確定所述目標線程的線程構造信息;所述線程構造信息用於表徵所述目標線程是否為線程構造樣板構造得到的線程;所述線程構造樣板用於將工作組構造為具有多個連續工作項的線程;
25.所述地址索引轉換器,還用於在所述目標線程為所述線程構造樣板構造得到的線程的情況下,根據所述第一訪問請求對應的索引類型標識,發送索引參數讀取請求至輸入裝載模塊;
26.所述輸入裝載模塊,用於響應所述索引參數讀取請求,發送所述目標線程對應的索引參數信息至所述地址索引轉換器;所述索引參數信息為根據所述目標線程中的首個工作項的工作項索引確定的;
27.所述地址索引轉換器,還用於轉換所述索引參數信息為存儲器訪問地址,並發送
load)106和存儲單元108;其中,執行單元102發送目標線程訪問目標數據發起的第一訪問請求至地址索引轉換器104;地址索引轉換器104解析第一訪問請求,確定目標線程的線程構造信息;線程構造信息用於表徵目標線程是否為線程構造樣板構造得到的線程;線程構造樣板用於將工作組構造為具有多個連續工作項的線程;地址索引轉換器104在目標線程為線程構造樣板構造得到的線程的情況下,根據第一訪問請求對應的索引類型標識,發送索引參數讀取請求至輸入裝載模塊106;輸入裝載模塊106響應索引參數讀取請求,發送目標線程對應的索引參數信息至地址索引轉換器104;索引參數信息為根據目標線程中的首個工作項的工作項索引確定的;地址索引轉換器104轉換索引參數信息為存儲器訪問地址,並發送攜帶有存儲器訪問地址的第二訪問請求至存儲單元108,以訪問目標數據。其中,存儲單元可以包括讀寫存儲單元(ls)、只讀存儲單元(tu)或共享內存儲存單元(smc)中的至少一種。
43.為了便於本領域技術人員的理解,在詳細介紹用於通用計算的數據訪問方法之前,在此先對基於線程構造樣板的存儲訪問流程進行簡單說明:
44.如圖2所示,該基於線程構造樣板的存儲訪問流程主要分為兩部分:
45.1、構造階段:主要是通過cs線程構造器(cs thread constructor,cstc),構造出基於線程構造樣板的cs線程,並存儲線程的計算參數;
46.2、執行階段,是執行單元eu(execution unit)通過索引讀寫指令,對存儲空間進行快速的讀寫訪問。其中,該地址索引轉換器根據請求的地址索引,轉換為最終的線程首地址送給後續模塊進行存儲訪問。
47.請參見圖2,整個執行流程為:
48.在構造階段中至少包括:步驟s202,由驅動分析kernel的信息,基於待構造cs線程的工作組的大小,確定與該工作組相匹配的線程構造樣板(如,線性樣板、二維樣板(瓦片樣板)),並通知cs線程構造器。步驟s204,cs線程構造器可以通過與該工作組相匹配的線程構造樣板,將該工作組構造為多個cs線程;各cs線程具有多個連續的工作項;同時,線程構造器可以將各cs線程中的首個工作項的工作項索引作為各cs線程的索引id記錄至輸入裝載模塊中。具體來說,針對任一個cs線程,線程構造器可以將各cs線程中的首個工作項對應的工作組索引id(work group id)、局部索引id(local id)和全局索引id(global id),作為該線程對應的索引id記錄(即工作項參數)儲存至輸入裝載模塊的緩存空間中;由於,基於線程構造樣板的cs線程包括連續的多個工作項;基於此,可以根據cs線程的索引id記錄推算該cs線程中任意工作項對應的工作項索引。步驟s206,編譯器compiler可以根據線程構造樣板的樣板類型,對讀寫訪問進行優化,使用基於線程構造樣板的讀寫指令訪問存儲單元。
49.在執行階段中至少包括:步驟s208,執行單元取指令並執行,向地址索引轉換器模塊發送讀寫請求。步驟s210,地址索引轉換器對讀寫指令進行解析,向輸入裝載模塊請求該線程的索引參數信息。步驟s212,地址索引轉換器收到輸入裝載模塊返回該線程的索引參數信息後,地址索引轉換器統一對地址進行轉換操作,得到線程的首地址作為存儲空間的訪問地址。步驟s214,地址索引轉換器根據讀寫指令的請求類型,向讀寫存儲單元(ls)、只讀存儲單元(tu)或共享內存儲存單元(smc)發送存儲器訪問地址。需要說明的是,下文將會對地址索引轉換器模塊的工作過程進行詳細說明,在此不做過多說明。
50.在一個實施例中,如圖3所示,提供了一種用於通用計算的數據訪問方法,以該方法應用於圖1中的地址索引轉換器為例進行說明,包括以下步驟:
51.步驟s302,接收目標線程訪問目標數據發起的第一訪問請求。
52.其中,目標線程可以是指執行單元在通用計算過程中運行的線程。
53.具體實現中,在執行單元運行目標線程的過程中,執行單元可以通過執行讀寫指令,實現對存儲空間中的目標數據進行讀寫訪問操作。其中,執行單元可以讀取讀寫指令,並執行該讀寫指令,向地址索引轉換器發送訪問目標數據的第一訪問請求,供地址索引轉換器接收該第一訪問請求並進行一系列處理,以實現對存儲空間的讀寫訪問。
54.其中,不同的讀寫指令對應有不同的存儲空間訪問操作,實際應用中,存儲空間訪問操作至少包括以下三種:
55.1、外部顯存(video memory)讀寫操作(如,ls讀寫操作,ls read/write operation):可以通過讀寫存儲單元(ls)訪問,用於輸入數據和輸出結果,gpu內部有支持讀寫操作的高速緩存(cache)暫存部分數據;
56.2、外部顯存的只讀操作(如,tu只讀操作,tu read-only operation),預先通過cpu寫入數據,gpu通過只讀存儲單元(tu)訪問,用於高效率讀入信息,包括紋理、常數等,gpu內部有支持只讀操作的緩存區(cache)來緩存數據;
57.3、gpu內部的共享內存(shared memory,sm)的讀寫操作(如,smc讀寫共享內存操作,smc read/write operation),用於工作組的臨時緩存空間,可以暫存線程的臨時數據和交換同一工作組的不同線程之間數據,通過共享內存儲存單元(smc)進行訪問。
58.實際應用中,目標數據可以包括如下幾種數據類型:
59.1、1d buffer:一維的緩衝區緩存,一般記錄常數、固定格式的數據,常用在讀寫存儲單元、共享內存儲存單元上;
60.2、1d/2d/3d image:一維/二維/三維的圖像,常用在讀寫存儲單元(ls)、只讀存儲單元(tu)上。
61.針對ls讀寫操作:
62.相關技術在執行ls讀寫操作的讀寫指令的過程中,線程的工作項一般通過全局索引(global id)的固定偏移,通過ls單元來實現來訪問存儲空間;例如,下文實例性地提供了一種cs程序代碼:
[0063]「[0064]
int x=get_global_id.x;
ꢀꢀꢀꢀꢀꢀ
//得到全局索引的x分量
[0065]
int y=get_global_id.y;
ꢀꢀꢀꢀꢀꢀ
//得到全局索引的y分量
[0066]
x=x+10;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
//計算全局索引的偏移(+10,-2)
[0067]
y=y

2;
[0068]
int addr=y*u0_width+x;//計算最終的一維線性地址
[0069]」[0070]
其中,u0是一個2d image,其寬度為u0_width,那麼從u0讀取一個數據,其地址是全局索引加上偏移(+10,-2):採用上述讀寫指令,至少需要花費6條eu指令,計算每個工作項的地址偏移,得到u0的一維線性地址,然後才能從中讀取數據u0。
[0071]
然而,本公開採用基於線程構造樣板的讀寫指令可以為:
[0072]
ldu rd[.xyzw],param[x_off][y_off],u#
[0073]
其中,ldu為指令代碼,可以表示從某個數據u#中讀取數據;
[0074]
其中,rd可以表示數據返回到寄存器的目標地址,.xyzw表示最多四個分量(channel);
[0075]
其中,param可以表示cs線程的參數信息,可以為:
[0076]
gid(globalid)可以表示表示使用工作項的全局索引來訪問;
[0077]
lid(localid)可以表示表示使用工作項的局部索引來訪問;
[0078]
其中,x_off,y_off可以表示二維偏移,一般為確定的立即數,-30~+31;
[0079]
其中,u#可以表示讀寫存儲數據的u#標記,硬體將從寄存器中讀取u#的信息,包括存儲類型,基地址,寬度、高度,像素格式等。
[0080]
針對上文中的cs程序代碼,在使用基於線程構造樣板的讀寫指令,需要
[0081]
其中,下面一條ldu指令即可:
[0082]
ldu r0.xyzw,gid[+10][-2],u0
[0083]
類似地,寫入數據到存儲地址的指令格式為
[0084]
stu rd[.xyzw],param[x_off][y_off],u#
[0085]
其中,rd為寫入的數據寄存器地址,其他項目與ldu指令含義一致。例如,假設u5表示一個3d image,該指令將數據r10~r12存儲到地址為(gidx+10,giddy+4,gidz)的3d image中,那麼可以使用一條stu指令就可以完成:
[0086]
stu r10.xyz,gid[10][4],u5
[0087]
針對tu只讀操作,與ls讀寫操作的存儲操作類似,工作項也是經常通過全局索引訪問tu存儲單元,作為kernel(內核)的輸入信息。這樣,tu存儲單元僅僅處理只讀的存儲類型,對此進行特別的優化,稱為紋理數據(texture),在tu存儲單元的cache緩存也僅僅是只讀的數據,所以效率比起ls的讀寫cache要高得多。tu指令和ls類似,也可以通過gid進行快速訪問:基於線程構造樣板的tu只讀指令可以表示為:
[0088]
smp rd[.xyzw],param[x_off][y_off],t#
[0089]
其中,smp為指令代碼,可以表示從某個t#中讀取數據;
[0090]
其中,rd可以表示數據返回到寄存器的目標地址,.xyzw表示最多四個分量(channel);
[0091]
其中,param可以表示cs線程的參數信息,可以為:
[0092]
gid(global id):表示使用工作項的全局索引來訪問;
[0093]
lid(local id):表示使用工作項的局部索引來訪問;
[0094]
其中,x_off,y_off可以表示二維偏移,一般為確定的立即數,-30~+31;
[0095]
其中,t#可以表示只讀數據的t#標記,硬體將從寄存器中讀取t#的信息,包括存儲類型,基地址,寬度、高度,像素格式等。
[0096]
其中,t#的存儲類型可以為1d/2d/3d image,其三維的地址和展開的一維地址與ls定義一致。tu存儲單元不支持寫操作,因此沒有寫指令。
[0097]
針對gpu內部的共享內存的讀寫操作:
[0098]
gpu內部的共享內存(shared memory,sm),也可以通過索引的方式進行訪問。sm主要用於工作組的臨時緩存,可以暫存線程數據和交換同一工作組內部不同線程之間的數
據,是一塊gpu內部的可讀可寫的高速緩存。與外部的存儲訪問不同,sm空間是按照工作組為單位進行分配的,不同工作組的空間不重合,這就使得工作組內部的工作項一般通過局部索引(local id,lid)作為sm的讀寫地址。類似地,定義基於線程構造樣板的sm的讀寫指令表示為:
[0099]
sm_rd rd[.xyzw],param[x_off],fmt
[0100]
其中,sm_rd為指令代碼,可以表示從sm中讀取數據;
[0101]
其中,rd可以表示數據返回到寄存器的目標地址,.xyzw表示最多四個分量(channel);
[0102]
其中,param可以表示cs線程的參數信息,可以為:
[0103]
gid(global id):表示使用工作項的全局索引來訪問;
[0104]
lid(local id):表示使用工作項的局部索引來訪問;
[0105]
其中,x_off可以表示x維偏移,一般為確定的立即數,-30~+31;
[0106]
其中,fmt可以表示每個分量(channel)的數據格式,可能為:
[0107]
0x0:int8,每個分量佔用1byte
[0108]
0x1:int16,每個分量佔用2bytes
[0109]
0x2:int32,每個分量佔用4bytes
[0110]
類似地,寫入數據到sm的指令格式為
[0111]
sm_wr rd[.xyzw],param[x_off],fmt
[0112]
其中,rd為寫入的數據寄存器地址,其他項目與sm_rd含義一致。
[0113]
步驟s304,解析第一訪問請求,確定目標線程的線程構造信息;線程構造信息用於表徵目標線程是否為線程構造樣板構造得到的線程。
[0114]
具體實現中,地址索引轉換器在接收到第一訪問請求後,地址索引轉換器則可以對該第一訪問請求進行解析,得到請求解析結果;地址索引轉換器可以根據該請求解析結果,檢查是否可以對整個目標線程進行連續地址讀寫訪問。
[0115]
在一些實施例中,請參見圖4,地址索引轉換器解析讀寫請求(即第一訪問請求)判斷該cs線程是否採用了樣板模式;其中,地址索引轉換器可以確定目標線程的線程構造信息,在該線程構造信息表徵目標線程為線程構造樣板構造得到的線程的情況下,地址索引轉換器則確定cs線程採用了樣板模式。在目標線程採用樣板模式的情況下,地址索引轉換器則檢測該第一訪問請求所對應的數據訪問指令是否採用了基於線程構造樣板的訪問指令(讀寫指令)。
[0116]
同時,地址索引轉換器還可以獲取第一訪問請求所對應的指令代碼,根據該指令代碼對第一訪問請求進行分類,確定各第一訪問請求的請求類型,可以分類為ls、tu、smc的請求。
[0117]
舉例來說,第一訪問請求所對應的指令代碼為「ldu/stu」,則該第一訪問請求為ls模塊的讀寫請求;第一訪問請求所對應的指令代碼為「smp」,則該第一訪問請求為tu模塊的讀寫請求;第一訪問請求所對應的指令代碼為「sm_rd/sm_wr」,則該第一訪問請求為smc模塊的讀寫請求。
[0118]
步驟s306,在目標線程為線程構造樣板構造得到的線程的情況下,根據第一訪問請求對應的索引類型標識,讀取目標線程對應的索引參數信息。
[0119]
其中,索引類型標識可以用於標識索引參數信息的類型。舉例來說,當索引參數信息包括工作組索引id(work group id)、局部索引id(local id)和全局索引id(global id)等,索引類型標識可以包括wid、lid、gid等。
[0120]
舉例來說,假設數據訪問指令為「sm_rd r4.xyz,lid[+5],int32」,則該數據訪問指令中的索引類型標識為「lid」。
[0121]
具體實現中,在目標線程為線程構造樣板構造得到的線程,且該第一訪問請求所對應的數據訪問指令採用基於線程構造樣板的訪問指令的情況下,地址索引轉換器可以根據該第一訪問請求所對應的數據訪問指令中的索引類型標識,讀取目標線程對應的索引參數信息。
[0122]
在一些實施例中,根據第一訪問請求對應的索引類型標識,讀取目標線程對應的索引參數信息,包括:發送索引參數讀取請求至輸入裝載模塊;索引參數讀取請求用於指示輸入裝載模塊返回與目標線程、索引類型標識對應的目標索引id;接收輸入裝載模塊返回的目標索引id,作為目標線程對應的索引參數信息。
[0123]
具體實現中,請再參見圖4,地址索引轉換器可以發送索引參數讀取請求至輸入裝載模塊,以指示輸入裝載模塊返回與目標線程、索引類型標識(如,gid/lid)對應的目標索引id;接收輸入裝載模塊返回的目標索引id,作為目標線程對應的索引參數信息。
[0124]
舉例來說,假設第一訪問請求對應的數據訪問指令為「sm_rd r4.xyz,lid[+5],int32」,則該數據訪問指令中的索引類型標識為「lid」;當地址索引轉換器確定該目標線程為線程構造樣板構造得到的線程,且數據訪問指令為採用線程構造樣板的訪問指令的情況下,地址索引轉換器則可以發送索引參數讀取請求至輸入裝載模塊,讀取目標線程對應的局部索引id(local id,lid),作為目標線程對應的索引參數信息。
[0125]
需要說明的是,請再參見圖4,在目標線程不是樣板模式的情況下,或者,數據訪問指令未使用樣板指令的情況下,地址索引轉換器則計算出線程中每個工作項對應的一維線性地址,作為該第一訪問請求的存儲器訪問地址。
[0126]
步驟s308,轉換索引參數信息為存儲器訪問地址,並發送攜帶有存儲器訪問地址的第二訪問請求,以訪問目標數據。
[0127]
具體實現中,在地址索引轉換器獲取到該目標線程對應的索引參數信息後,地址索引轉換器則可以轉換為線程首地址,作為存儲器訪問地址;然後,地址索引轉換器發送攜帶有存儲器訪問地址的第二訪問請求至與該目標數據的訪問類型相對應的存儲單元,以實現訪問該目標數據。
[0128]
在一些實施例中,地址索引轉換器在轉換索引參數信息為存儲器訪問地址的過程中,地址索引轉換器可以第一訪問請求所對應的地址偏移信息;根據地址偏移信息,將索引參數信息轉換為存儲器訪問地址。其中,地址索引轉換器可以根據地址偏移信息和索引參數信息,確定首地址偏移信息;然後,地址索引轉換器獲取目標數據的數據格式信息,並根據目標數據的數據格式信息和首地址偏移信息,生成針對目標線程的一維線性首地址;最後,地址索引轉換器確定一維線性首地址為存儲器訪問地址。
[0129]
舉例來說,地址索引轉換器接收到輸入裝載模塊返回的目標線程對應的索引參數信息,該索引參數信息可以是全局索引id(gid)參數即三元組(gid
x
,gidy,gidz),也可以是局部索引id(gid)參數即三元組(lid
x
,lidy,lidz),並且指令上的偏移(即地址偏移信息)為
(x_off,y_off),地址索引轉換器可以按照以下策略計算該線程的一維線性首地址:
[0130]
對於1d buffer/image,若每個數據的數據格式信息為fmt(對於u#、t#可以從寄存器中讀出,對於smc,fmt是定義在指令上),其首地址偏移信息為(gid
x
+x_off,0,0)或者(lid
x
+x_off,0,0),則地址索引轉換器確定針對目標線程的一維線性首地址為:
[0131]
addr_head_gid=fmt*(gid
x
+x_off);或者,
[0132]
addr_head_lid=fmt*(lid
x
+x_off);
[0133]
對於2d image,若每個數據的數據格式信息為fmt,其尺寸為(width,height),(對於u#、t#可以從寄存器中讀出),其首地址偏移信息為:(gid
x
+x_off,gidy+y_off,0)或者(lid
x
+x_off,lidy+y_off,0);則地址索引轉換器確定針對目標線程的的一維線性首地址為:
[0134]
addr_head_gid=fmt*[(gidy+y_off)*width+(gid
x
+x_off)];或者,
[0135]
addr_head_lid=fmt*[(lidy+y_off)*width+(lid
x
+x_off)]
[0136]
對於3d image,若每個數據的數據格式信息為fmt,其尺寸為(width,height,depth),(對於u#、t#可以從寄存器中讀出),那麼其首地址偏移為:(gid
x
+x_off,gidy+y_off,gidz)或者(lid
x
+x_off,lidy+y_off,lidz);其展開的一維線性首地址為:
[0137]
addr_head_gid=fmt*[gidz*(height*width)+(gidy+y_off)*width+(gid
x
[0138]
+x_off)];或者,
[0139]
addr_head_lid=fmt*[lidz*(height*width)+(lidy+y_off)*width+(lid
x
+
[0140]
x_off)]。
[0141]
地址索引轉換器確定針對目標線程的一維線性首地址後,地址索引轉換器則可以發送攜帶有存儲器訪問地址的第二訪問請求至與該目標數據的訪問類型相對應的存儲單元,以實現訪問該目標數據。其中,地址索引轉換器根據第一訪問請求所對應的指令代碼所表徵的請求類型,確定第一訪問請求所請求訪問的存儲單元。
[0142]
舉例來說,第一訪問請求所對應的指令代碼為「ldu/stu」,則該第一訪問請求所請求訪問的存儲單元為ls模塊;第一訪問請求所對應的指令代碼為「smp」,則該第一訪問請求所請求訪問的存儲單元為tu模塊;第一訪問請求所對應的指令代碼為「sm_rd/sm_wr」,則該第一訪問請求所請求訪問的存儲單元為smc模塊。
[0143]
再例如,假設某一ldu指令為:
[0144]
ldu r0.xyzw,gid[+10][-2],u0
[0145]
執行單元執行該ldu指令的過程中,向該地址索引轉換器發送該ldu指令對應的第一訪問請求;地址索引轉換器接收並解析該第一訪問請求,確定目標線程為基於線程構造模板的線程,且該ldu指令使用基於線程構造模板的指令,地址索引轉換器可以基於該第一訪問請求的線程索引標識「gid」,從輸入裝載模塊的存儲空間中讀取該目標線程的globalid(全局索引id),作為該目標線程對應的索引參數信息;然後,地址索引轉換器可以將該目標線程的globalid和該第一訪問請求對應的地址偏移信息(+10,-2)採用上述的地址轉換方式進行相加,得到該一維線性地址讀取u0的數據:addr_1d=(gidy-2)*u0_width+(gidx+10),返回的數據將存入到寄存器r0~r3(4個channel)。
[0146]
請參見圖5,如圖5所示,cs線程訪問該2d image,它的尺寸為(u0_width,u0_height)。每個cs線程使用8x4x1的瓦片樣板(tile pattern)模式,共有12個cs線程(wave0
~wave11),訪問地址為全局索引加上偏移(+10,-2)。其中落在image外部的cs區域訪問將出現地址越界,那麼將返回到全0的數據(空白區域510),而落在image區域內部的地址可以正常讀寫(斜線區域520)。
[0147]
再例如,假設共享內存(sm)數據讀取指令為:
[0148]
sm_rd r4.xyz,lid[+5],int32
[0149]
執行單元執行該共享內存數據讀取指令的過程中,向該地址索引轉換器發送該共享內存數據讀取指令對應的第一訪問請求;地址索引轉換器接收並解析該第一訪問請求,確定目標線程為基於線程構造模板的線程,且該共享內存數據讀取指令使用基於線程構造模板的指令,地址索引轉換器可以基於該第一訪問請求的線程索引標識「lid」,從輸入裝載模塊的存儲空間中讀取該目標線程的localid(局部索引id),作為該目標線程對應的索引參數信息;然後,地址索引轉換器可以將該目標線程的globalid和該第一訪問請求對應的地址偏移信息(+5)採用上述的地址轉換方式進行相加,得到該一維線性地址。需要注意的是,共享內存數據讀取指令中的int32佔用4bytes,那麼其bytes的地址為:4*(lidx+5),讀出的數據將存入到寄存器r4~r7中(3個channel)。
[0150]
請參見圖6,如圖6所示,cs線程訪問該sm的1d buffer,它的長度為b_width。每個cs線程使用32x1x1的線性樣板(linear pattern)模式,共有4個cs線程(wave0~wave3),訪問地址為局部索引加上偏移(+5)。wave3的地址可能在buffer外部,讀取buffer將越界,得到0數值。
[0151]
上述用於通用計算的數據訪問方法中,通過接收目標線程訪問目標數據發起的第一訪問請求,並解析第一訪問請求,確定目標線程的線程構造信息;線程構造信息用於表徵目標線程是否為線程構造樣板構造得到的線程;線程構造樣板用於將工作組構造為具有多個連續工作項的線程;在目標線程為線程構造樣板構造得到的線程的情況下,通過根據第一訪問請求對應的索引類型標識,讀取目標線程對應的索引參數信息;索引參數信息為根據目標線程中的首個工作項的工作項索引確定的;轉換索引參數信息為存儲器訪問地址,並發送攜帶有存儲器訪問地址的第二訪問請求;如此,可以實現在檢測出工作項的訪問地址空間是連續的情況下,可以通過利用線程中的首個工作項的地址作為該線程的一維線性地址,從而可以在後續利用工作項地址的連續性,快速讀寫整個線程的數據,大幅度地提高了內存的訪問效率,並有效地減少了計算地址的指令數目。
[0152]
在另一個實施例中,方法還包括:檢測存儲器訪問地址的地址類型信息;地址類型信息用於表徵存儲器訪問地址為連續地址或離散地址;在地址類型信息表徵存儲器訪問地址為連續地址的情況下,執行發送攜帶有存儲器訪問地址的第二訪問請求至存儲單元的步驟。
[0153]
具體實現中,請參見圖7,地址索引轉換器可以檢測存儲器訪問地址的地址類型信息,得到連續地址檢測結果,並根據該連續地址檢測結果,確定該存儲器訪問地址為連續地址或離散地址;實際應用中,需要在接口上增加1bit cont信息,該cont信息示該存儲器訪問地址是連續地址(0x1)還是離散地址(0x0)。在地址類型信息表徵存儲器訪問地址為連續地址的情況下,地址索引轉換器則送出一個該目標線程對應的一維線性首地址;若檢測到存儲器訪問地址為離散地址(0x0),地址索引轉換器則根據當前線程的simd情況,以8個工作項一組,依次送出32或者64個工作項各自對應的一維線性地址;請參見圖7,存儲器訪問
地址為離散地址的情況下,對於simd32的cs線程,地址索引轉換器需要循環4次才能完全送出存儲器訪問地址,對於simd64的cs線程,地址索引轉換器需要循環8次才能完全送出存儲器訪問地址。存儲單元將按照存儲器訪問地址是連續地址還是離散地址,分別執行相應的讀寫操作。
[0154]
本實施例的技術方案,通過在送出存儲器訪問地址之前檢測存儲器訪問地址為連續地址或離散地址,得到連續地址檢測結果;並基於該存儲器訪問地址的連續地址檢測結果,有效且快速地按照各存儲器訪問地址相適應的送出策略發送第二訪問請求至存儲單元。
[0155]
在另一個實施例中,獲取目標數據的數據格式信息,包括:根據所述第一訪問請求中的指令代碼所表徵的請求類型,確定與請求類型相應的寄存器;執行對寄存器的讀取操作,得到與目標數據相應的寄存器信息。
[0156]
其中,寄存器信息包括目標數據的寬度信息、高度信息或數據格式信息中的至少一種。
[0157]
具體實現中,地址索引轉換器在獲取目標數據的數據格式信息的過程中,可以根據第一訪問請求中的指令代碼所表徵的請求類型,確定與請求類型相應的寄存器;然後,地址索引轉換器執行對寄存器的讀取操作,得到與目標數據相應的寄存器信息;
[0158]
舉例來說,當地址索引轉換器確定第一訪問請求中的指令代碼為「ldu/stu」時,地址索引轉換器確定該第一訪問請求的請求類型為ls模塊的讀寫請求,地址索引轉換器確定該ls模塊的讀寫請求相應的寄存器為u#寄存器;地址索引轉換器執行對該u#寄存器的讀取操作,得到與目標數據相應的寄存器信息;
[0159]
當地址索引轉換器確定第一訪問請求中的指令代碼為「smp」時,地址索引轉換器確定該第一訪問請求的請求類型為tu模塊的只讀請求,地址索引轉換器確定該tu模塊的只讀請求相應的寄存器為t#寄存器;地址索引轉換器執行對該t#寄存器的讀取操作,得到與目標數據相應的寄存器信息。
[0160]
需要說明的是,第一訪問請求中的指令代碼為「sm_rd/sm_wr」,地址索引轉換器確定該第一訪問請求的請求類型為smc的讀寫請求;由於smc的數據格式fmt定義在指令上,地址索引轉換器無需讀取寄存器信息。
[0161]
在一個實施例中,如圖1所示,提供了一種用於通用計算的數據訪問系統,系統包括:
[0162]
執行單元,用於發送目標線程訪問目標數據發起的第一訪問請求至地址索引轉換器;
[0163]
地址索引轉換器,用於解析第一訪問請求,確定目標線程的線程構造信息;線程構造信息用於表徵目標線程是否為線程構造樣板構造得到的線程;線程構造樣板用於將工作組構造為具有多個連續工作項的線程;
[0164]
地址索引轉換器,還用於在目標線程為線程構造樣板構造得到的線程的情況下,根據第一訪問請求對應的索引類型標識,發送索引參數讀取請求至輸入裝載模塊;
[0165]
輸入裝載模塊,用於響應索引參數讀取請求,發送目標線程對應的索引參數信息至地址索引轉換器;索引參數信息為根據目標線程中的首個工作項的工作項索引確定的;
[0166]
地址索引轉換器,還用於轉換索引參數信息為存儲器訪問地址,並發送攜帶有存
儲器訪問地址的第二訪問請求至存儲單元,以訪問目標數據。
[0167]
需要說明的是,對上述一種用於通用計算的數據訪問系統的具體限定可以參見上文對一種用於通用計算的數據訪問方法的具體限定,在此不再贅述。
[0168]
應該理解的是,雖然如上所述的各實施例所涉及的流程圖中的各個步驟按照箭頭的指示依次顯示,但是這些步驟並不是必然按照箭頭指示的順序依次執行。除非本文中有明確的說明,這些步驟的執行並沒有嚴格的順序限制,這些步驟可以以其它的順序執行。而且,如上所述的各實施例所涉及的流程圖中的至少一部分步驟可以包括多個步驟或者多個階段,這些步驟或者階段並不必然是在同一時刻執行完成,而是可以在不同的時刻執行,這些步驟或者階段的執行順序也不必然是依次進行,而是可以與其它步驟或者其它步驟中的步驟或者階段的至少一部分輪流或者交替地執行。
[0169]
基於同樣的發明構思,本技術實施例還提供了一種用於實現上述所涉及的一種用於通用計算的數據訪問方法的一種用於通用計算的數據訪問裝置。該裝置所提供的解決問題的實現方案與上述方法中所記載的實現方案相似,故下面所提供的一個或多個一種用於通用計算的數據訪問裝置實施例中的具體限定可以參見上文中對於一種用於通用計算的數據訪問方法的限定,在此不再贅述。
[0170]
在一個實施例中,如圖8所示,提供了一種用於通用計算的數據訪問裝置,包括:
[0171]
接收模塊810,用於接收目標線程訪問目標數據發起的第一訪問請求;
[0172]
解析模塊820,用於解析第一訪問請求,確定目標線程的線程構造信息;線程構造信息用於表徵目標線程是否為線程構造樣板構造得到的線程;線程構造樣板用於將工作組構造為具有多個連續工作項的線程;
[0173]
讀取模塊830,用於在目標線程為線程構造樣板構造得到的線程的情況下,根據第一訪問請求對應的索引類型標識,讀取目標線程對應的索引參數信息;索引參數信息為根據目標線程中的首個工作項的工作項索引確定的;
[0174]
轉換模塊840,用於轉換索引參數信息為存儲器訪問地址,並發送攜帶有存儲器訪問地址的第二訪問請求,以訪問目標數據。
[0175]
在其中一個實施例中,所述轉換模塊840,具體用於獲取所述第一訪問請求所對應的地址偏移信息;根據所述地址偏移信息,將所述索引參數信息轉換為所述存儲器訪問地址。
[0176]
在其中一個實施例中,所述轉換模塊840,具體用於根據所述地址偏移信息和所述索引參數信息,確定首地址偏移信息;獲取所述目標數據的數據格式信息,並根據所述目標數據的數據格式信息和所述首地址偏移信息,生成針對所述目標線程的一維線性首地址;確定所述一維線性首地址為所述存儲器訪問地址。
[0177]
在其中一個實施例中,所述轉換模塊840,具體用於根據所述第一訪問請求中的指令代碼所表徵的請求類型,確定與所述請求類型相應的寄存器;執行對所述寄存器的讀取操作,得到與所述目標數據相應的寄存器信息;其中,所述寄存器信息包括所述目標數據的寬度信息、高度信息或數據格式信息中的至少一種。
[0178]
在其中一個實施例中,所述轉換模塊840,具體用於根據所述第一訪問請求中的指令代碼所表徵的請求類型,確定所述第一訪問請求所請求訪問的存儲單元;發送攜帶有所述存儲器訪問地址的第二訪問請求至所述存儲單元。
[0179]
在其中一個實施例中,所述裝置還用於檢測所述存儲器訪問地址的地址類型信息;所述地址類型信息用於表徵所述存儲器訪問地址為連續地址或離散地址;在所述地址類型信息表徵所述存儲器訪問地址為連續地址的情況下,執行所述發送攜帶有所述存儲器訪問地址的第二訪問請求至所述存儲單元的步驟。
[0180]
在其中一個實施例中,所述讀取模塊830,具體用於發送索引參數讀取請求至輸入裝載模塊;所述索引參數讀取請求用於指示所述輸入裝載模塊返回與所述目標線程、所述索引類型標識對應的目標索引id;接收所述輸入裝載模塊返回的所述目標索引id,作為所述目標線程對應的索引參數信息;其中,所述輸入裝載模塊預先儲存有與由所述線程構造樣板構造得到的各線程對應的索引id記錄;所述索引id記錄包括各所述索引類型標識對應的索引id。
[0181]
上述一種用於通用計算的數據訪問裝置中的各個模塊可全部或部分通過軟體、硬體及其組合來實現。上述各模塊可以硬體形式內嵌於或獨立於計算機設備中的處理器中,也可以以軟體形式存儲於計算機設備中的存儲器中,以便於處理器調用執行以上各個模塊對應的操作。
[0182]
需要說明的是,本技術所涉及的用戶信息(包括但不限於用戶設備信息、用戶個人信息等)和數據(包括但不限於用於分析的數據、存儲的數據、展示的數據等),均為經用戶授權或者經過各方充分授權的信息和數據。
[0183]
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過電腦程式來指令相關的硬體來完成,所述的電腦程式可存儲於一非易失性計算機可讀取存儲介質中,該電腦程式在執行時,可包括如上述各方法的實施例的流程。其中,本技術所提供的各實施例中所使用的對存儲器、資料庫或其它介質的任何引用,均可包括非易失性和易失性存儲器中的至少一種。非易失性存儲器可包括只讀存儲器(read-only memory,rom)、磁帶、軟盤、快閃記憶體、光存儲器、高密度嵌入式非易失性存儲器、阻變存儲器(reram)、磁變存儲器(magnetoresistive random access memory,mram)、鐵電存儲器(ferroelectric random access memory,fram)、相變存儲器(phase change memory,pcm)、石墨烯存儲器等。易失性存儲器可包括隨機存取存儲器(random access memory,ram)或外部高速緩衝存儲器等。作為說明而非局限,ram可以是多種形式,比如靜態隨機存取存儲器(static random access memory,sram)或動態隨機存取存儲器(dynamic random access memory,dram)等。本技術所提供的各實施例中所涉及的資料庫可包括關係型資料庫和非關係型資料庫中至少一種。非關係型資料庫可包括基於區塊鏈的分布式資料庫等,不限於此。本技術所提供的各實施例中所涉及的處理器可為通用處理器、中央處理器、圖形處理器、數位訊號處理器、可編程邏輯器、基於量子計算的數據處理邏輯器等,不限於此。
[0184]
以上實施例的各技術特徵可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術特徵所有可能的組合都進行描述,然而,只要這些技術特徵的組合不存在矛盾,都應當認為是本說明書記載的範圍。
[0185]
以上所述實施例僅表達了本技術的幾種實施方式,其描述較為具體和詳細,但並不能因此而理解為對本技術專利範圍的限制。應當指出的是,對於本領域的普通技術人員來說,在不脫離本技術構思的前提下,還可以做出若干變形和改進,這些都屬於本技術的保護範圍。因此,本技術的保護範圍應以所附權利要求為準。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀