直接記憶體存取方法、裝置、專用計算晶片及異構計算系統
本說明書一個或多個實施例涉及電腦技術領域,尤其涉及一種直接記憶體存取方法、裝置、專用計算晶片及異構計算系統。
異構計算是指由通用中央處理器(Central Processing Unit,CPU)進行資料處理整體流程的控制,當需要進行專用計算時,通用CPU調用專用計算晶片進行計算。具體地,通用CPU需要調用直接記憶體存取(Direct Memory Access,DMA)方法(一種通過專用的硬體模組實現記憶體資料的搬移方法),將專用計算的輸入資料從系統記憶體傳輸到設備記憶體。專用計算晶片完成計算後,再把輸出資料傳輸回系統記憶體。由此可以看出,在一次異構計算中,需要分別進行兩次的DMA傳輸:輸入資料的傳輸和輸出資料的傳輸。
具體地,輸入資料的傳輸過程可以為:1)存取DMA描述符所在佇列的指標,以讀取輸入資料的DMA描述符(用於描述輸入資料的位址和長度)。2)存取輸入資料的DMA描述符,以讀取輸入資料的位址和長度。3)根據輸入資料的位址和長度,讀取輸入資料。輸出資料的傳輸過程可以為:1)存取DMA描述符所在佇列的指標,以讀取輸出資料的DMA描述符(用於描述輸出資料的位址和長度)。2)存取輸出資料的DMA描述符,以讀取輸出資料的位址和長度;3)根據輸出資料的位址和長度,寫入輸出資料。綜上,傳統技術中,一次異構計算的過程需要執行六次存取操作。
本說明書一個或多個實施例描述了一種直接記憶體存取方法、裝置、專用計算晶片及異構計算系統,可以減小DMA傳輸中的資料存取次數,從而可以提高異構計算的性能。
第一方面,提供了一種直接記憶體存取方法,包括:
從直接記憶體存取DMA控制塊指標佇列中讀取DMA控制塊指標;
根據所述DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊,所述DMA控制塊的內容包括DMA控制資訊和輸入資料;所述系統記憶體是指用於儲存通用中央處理器CPU使用的資料的儲存空間;
判定所述DMA控制資訊和所述輸入資料的總長度;
根據所述DMA控制塊指標以及所述總長度,將所述DMA控制資訊和所述輸入資料搬移至設備記憶體;所述設備記憶體是指用於儲存專用計算晶片的資料的儲存空間;
對所述輸入資料進行相應的計算,得到輸出資料;
將所述輸出資料寫入所述設備記憶體;
獲取所述輸出資料的長度;
根據所述DMA控制資訊以及所述輸出資料的長度,將所述輸出資料從所述設備記憶體搬移至所述DMA控制塊。
第二方面,提供了一種專用計算晶片,包括:直接記憶體存取DMA長度暫存器、DMA控制塊指標佇列、DMA資料傳輸模組以及專用計算模組;
所述DMA長度暫存器,用於儲存輸入資料的長度以及輸出資料的長度;
所述DMA控制塊指標佇列,用於儲存多個DMA控制塊指標;所述DMA控制塊指標指向系統記憶體中的DMA控制塊;所述DMA控制塊的內容包括DMA控制資訊和輸入資料;
DMA資料傳輸模組,用於根據所述輸入資料的長度、所述DMA控制資訊的長度以及所述DMA控制塊指標,將所述DMA控制資訊以及所述輸入資料從系統記憶體搬移至設備記憶體;還用於根據所述DMA控制資訊以及所述輸出資料的長度,將所述輸出資料從所述設備記憶體搬移至所述系統記憶體;
所述專用計算模組,用於對所述輸入資料進行計算,並得到所述輸出資料。
第三方面,提供了一種異構計算系統,包括:通用中央處理器CPU、系統記憶體、如上述第二方面提供的專用計算晶片和設備記憶體;
所述通用CPU,用於調用所述專用計算晶片進行異構計算;
所述系統記憶體,用於儲存所述通用CPU使用的資料;
所述設備記憶體,用於儲存所述專用計算晶片所使用的資料。
第四方面,提供了一種直接記憶體存取裝置,包括:
讀取單元,用於從直接記憶體存取DMA控制塊指標佇列中讀取DMA控制塊指標;
判定單元,用於根據所述讀取單元讀取的所述DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊,所述DMA控制塊的內容包括DMA控制資訊和輸入資料;所述系統記憶體是指用於儲存通用中央處理器CPU使用的資料的儲存空間;
所述判定單元,還用於判定所述DMA控制資訊和所述輸入資料的總長度;
搬移單元,用於根據所述讀取單元讀取的所述DMA控制塊指標以及所述判定單元判定的所述總長度,將所述DMA控制資訊和所述輸入資料搬移至設備記憶體;所述設備記憶體是指用於儲存專用計算晶片的資料的儲存空間;
計算單元,用於對所述輸入資料進行相應的計算,得到輸出資料;
寫入單元,用於將所述計算單元計算的所述輸出資料寫入所述設備記憶體;
獲取單元,用於獲取所述輸出資料的長度;
所述搬移單元,還用於根據所述DMA控制資訊以及所述獲取單元獲取的所述輸出資料的長度,將所述輸出資料從所述設備記憶體搬移至所述DMA控制塊。
本說明書一個或多個實施例提供的直接記憶體存取方法、裝置、專用計算晶片及異構計算系統,從DMA控制塊指標佇列中讀取DMA控制塊指標。根據DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊。判定DMA控制塊中的DMA控制資訊和輸入資料的總長度。根據DMA控制塊指標以及總長度,將DMA控制資訊和輸入資料搬移至設備記憶體。對輸入資料進行相應的計算,得到輸出資料。將輸出資料寫入設備記憶體,並獲取輸出資料的長度。根據DMA控制資訊以及輸出資料的長度,將輸出資料從設備記憶體搬移至DMA控制塊。
由此可以看出,本說明書提供的方案,在輸入資料的傳輸過程,執行如下兩次存取操作:第一次,存取DMA控制塊指標佇列,以讀取DMA控制塊指標。第二次,存取DMA控制塊指標,以讀取DMA控制資訊和輸入資料。相比傳統的技術方案,減少了對DMA描述符的存取。在對輸入資料進行相應的計算之後,可以直接根據DMA控制資訊,將輸出資料搬移至DMA控制塊。也即輸出資料的傳輸過程,只執行一次輸出資料的存取,不需要再執行DMA描述符所在佇列的指標以及輸出資料的描述符的存取操作。綜上,相比傳統技術,兩次的DMA傳輸可以減少3次存取操作。這可以大大提升資料的DMA傳輸效率,進而可以提高異構計算的性能。
下面結合附圖,對本說明書提供的方案進行描述。
本說明書一個實施例提供的直接記憶體存取方法可以應用於如圖1所示的異構計算系統中,該異構計算系統可以包括:通用CPU10、系統記憶體20、專用計算晶片30以及設備記憶體40,其中,通用CPU10和專用計算晶片30也可以稱為異構計算系統中的兩個計算單元。
通用CPU10用於實現異構計算的資料處理主要流程的控制。具體包括:a.異構計算輸入資料的預處理和準備。b.調用專用計算晶片進行異構計算。c.查詢異構計算結果(也稱輸出資料)返回。d.進行異構計算輸出資料的後處理和輸出結果。
系統記憶體20用於儲存通用CPU10使用的資料。在一種實現方式中,其可以以DMA控制塊(一種資料結構)的形式來儲存使用的資料,該DMA控制塊在系統記憶體20中佔用一個物理上連續的位址空間。以使用的資料包括輸入資料和輸出資料為例來說,該DMA控制塊的內容可以包括DMA控制資訊、輸入資料和輸出資料。其中,輸入資料所佔用的空間也可以稱為輸入資料塊。同樣,輸出資料所佔用的空間也可以稱為輸出資料塊。具體地,通用CPU10可以在進行異構計算時,根據當前異構計算方法,判定輸入資料的長度和輸出資料的長度。需要說明的是,在本說明書中,對一次特定的異構計算,其對應的輸入資料以及輸入資料的長度和輸出資料的長度通常是判定的。之後可以構造出DMA控制資訊,具體的構造過程後續進行說明。由此,就得到了DMA控制塊的部分內容(DMA控制資訊和輸入資料)。在得到DMA控制塊的部分內容之後,通用CPU10可以將該部分內容寫入系統記憶體20的一個物理上連續的位址空間內。可以理解的是,由於輸出資料的長度也是判定的,所以,在上述部分內容之後通常會連續地預留上述長度的位址空間,以用於寫入輸出資料。系統記憶體20中寫入部分內容的位址空間與預留的位址空間就構成了上述DMA控制塊。總之,針對一次異構計算,在系統記憶體20中就可以構成一個DMA控制塊。
需要說明的是,上述DMA控制資訊可以包括:輸入資料的偏移位址、輸出資料的偏移位址以及計算完成標誌。其中,輸入資料的偏移位址可以佔用32個bit位元(即4個位元組),其可以是指輸入資料所佔用的空間(或者輸入資料塊)相對DMA控制塊起始位址的偏移量。具體地,根據DMA控制塊起始位址以及該偏移位址,可以判定輸入資料在系統記憶體20中的實際位址。輸出資料的偏移位址的定義與輸入資料的偏移位址的定義相同。計算完成標誌可以佔用1個bit位元(擴展為4個位元組),其可以是在異構計算前被通用CPU10清0。在異構計算完成後,專用計算晶片30將該標誌位元改寫為1。CPU10通過循環該計算完成標誌,確認異構計算是否完成。
專用計算晶片30用於配合通用CPU完成專用計算(如,矩陣乘以及大數模乘等)功能。該專用計算晶片30例如可以為現場可程式設計閘陣列(Field-Programmable Gate Array,FPGA)晶片,專用積體電路(Application Specific
Integrated Circuit,ASIC)晶片,圖形處理器(Graphics
Processing Unit,GPU)晶片等。通用CPU10計算效率較低,使用專用計算晶片30進行計算,性價比更高。
設備記憶體40用於儲存專用計算晶片30的資料。具體地,當開始進行異構計算時,專用計算晶片30可以從設備記憶體40中讀取輸入資料。當異構計算完成時,可以將輸出資料寫入設備記憶體40。
圖1中,專用計算晶片30具體可以包括:DMA長度暫存器31、DMA控制塊指標佇列32、DMA資料傳輸模組 33以及專用計算模組34。
DMA長度暫存器31用於儲存輸入資料的長度以及輸出資料的長度。通常對於一次特定的異構計算,輸入資料的長度以及輸出資料的長度是固定的。也即通用CPU10可以根據當前所執行的異構計算方法來判定上述長度。
DMA控制塊指標佇列32用於儲存多個DMA控制塊指標,該DMA控制塊指標指向系統記憶體20中的DMA控制塊,其可以佔用32bit位元。具體地,在系統記憶體20中每構成一個DMA控制塊,通用CPU10就可以向DMA控制塊指標佇列32寫入與該DMA控制塊對應的DMA控制塊指標。由於針對一次異構計算就可以構成一個DMA控制塊,所以DMA控制塊指標也是與一次異構計算相對應的。當異構處理系統中有多個進程處理任務時,DMA控制塊指標佇列32中的多個DMA控制塊指標就可以被同時讀取,由此可以實現多次異構計算可以並行進行,這可以大大提高異構計算的效率。需要說明的是,此處的多次異構計算屬於同一類型,如,均為加密計算等。
DMA資料傳輸模組33用於根據輸入資料的長度、DMA控制資訊的長度以及DMA控制塊指標,將DMA控制資訊以及輸入資料從系統記憶體20搬移至設備記憶體40;還用於根據DMA控制資訊以及輸出資料的長度,將輸出資料從設備記憶體40搬移至系統記憶體20。
專用計算模組34用於實現專用計算功能。具體地,用於對輸入資料進行計算,並得到輸出資料。
如前所述,圖1中的通用CPU10可以調用專用計算晶片30進行異構計算。為了提高異構計算的性能,本說明書對直接記憶體存取方法進行了改進。在執行本說明書提供的用於異構計算的直接記憶體存取方法之前,可以先執行如下步驟:
1)通用CPU10根據當前異構計算方法,判定輸入資料的長度和輸出資料的長度,並把輸入資料的長度和輸出資料的長度寫入DMA長度暫存器31。
2)通用CPU10準備異構計算的輸入資料,並構造DMA控制資訊。由上述內容可知,DMA控制資訊可以包括:輸入資料的偏移位址、輸出資料的偏移位址以及計算完成標誌。當DMA控制塊中的內容按照DMA控制資訊、輸入資料以及輸出資料存放時,對輸入資料的偏移位址,可以根據DMA控制資訊的長度來判定。由於DMA控制資訊的長度=輸入資料的偏移位址的長度+輸出資料的偏移位址的長度+計算完成標誌的長度=4+4+4=12。因此,輸入資料的偏移位址可以為:12(此處為10進制表示方法)。對輸出資料的偏移位址,可以根據DMA控制資訊與輸入資料的總長度來判定。假設輸入資料的長度為100個位元組,那麼輸出資料的偏移位址為:12+100=112(此處為10進制表示方法)。在完成上述構造過程之後,可以將DMA控制資訊以及輸入資料寫入系統記憶體20的一個物理上連續的位址空間內,並將計算完成標誌清0。
可以理解的是,由於輸出資料的長度也是判定的,所以,在完成上述寫入過程之後可以連續地預留上述長度的位址空間,以用於寫入輸出資料。系統記憶體20中寫入資料的位址空間與預留的位址空間就構成了一個DMA控制塊。
3)通用CPU10向DMA控制塊指標佇列32中寫入DMA控制塊指標,該DMA控制塊指標指向構成的DMA控制塊的起始位址。
需要說明的是,針對多次異構計算,當該多次異構計算屬於同一類型(如,均為加密計算)時,上述步驟1)可以只執行一次,而步驟2)和步驟3)則可以是根據異構計算的次數迴圈多次執行的。
可以理解的是,在DMA控制塊指標佇列32中寫入DMA控制塊指標之後,就可以執行本說明書提供的用於異構計算的直接記憶體存取方法。
圖2為本說明書一個實施例提供的直接記憶體存取方法流程圖。所述方法的執行主體可以為圖1中的專用計算晶片30。如圖2所示,所述方法具體可以包括:
步驟210,從DMA控制塊指標佇列中讀取DMA控制塊指標。
此處的DMA控制塊指標指向DMA控制塊的起始位址,從而根據該指標可以直接對DMA控制塊的內容進行存取,由此可以減少對系統記憶體20的存取次數,從而可以降低DMA傳輸延遲。
具體地,專用計算晶片30可以循環檢查DMA控制塊指標佇列32是否為空。如果不為空,則可以從佇列的頭部讀取DMA控制塊指標。本說明書提供的DMA控制塊指標佇列32由於可以同時存放多個DMA控制塊指標,所以可以更加方便的支持DMA非同步作業,更加方便的支援多進程各自獨立進行DMA操作,提高了DMA的傳輸效率。
步驟220,根據DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊。
以圖1為例來說,當讀取DMA控制塊指標A時,可以判定DMA控制塊A;當讀取DMA控制塊指標B時,可以判定DMA控制塊B。可以理解的是,在該步驟中讀取到的DMA控制塊的內容只包括DMA控制資訊和輸入資料。
步驟230,判定DMA控制資訊和輸入資料的總長度。
根據上述內容可知,本說明書中的DMA控制資訊可以包括:輸入資料的偏移位址、輸出資料的偏移位址以及計算完成標誌,且其具有固定長度。該固定長度為上述三者的長度之和。在DMA控制資訊的長度固定時,上述總長度的判定過程可以為:從DMA長度暫存器31中讀取輸入資料的長度。根據固定長度以及輸入資料的長度,判定總長度。
步驟240,根據DMA控制塊指標以及總長度,將DMA控制資訊和輸入資料搬移至設備記憶體。
此處可以是由DMA資料傳輸模組33根據DMA控制塊指標以及總長度,將DMA控制資訊和輸入資料搬移至設備記憶體40。
在一種實現方式中,在執行上述搬移操作之前,可以先在設備記憶體40中劃分一塊物理上連續的位址空間。之後,可以根據DMA控制塊指標以及總長度,從對應的DMA控制塊中讀取DMA控制資訊和輸入資料。此處,由於DMA控制塊在系統記憶體20中佔用物理上連續的位址空間,所以上述讀取的操作也可以理解為是一種連讀的讀取操作。將DMA控制資訊和輸入資料寫入設備記憶體40中預先劃分的物理上連續的位址空間。可以理解的是,在執行上述寫入操作之後,DMA控制資訊和輸入資料在設備記憶體40中的起始位址是判定的。
步驟250,對輸入資料進行相應的計算,得到輸出資料。
此處,可以是調用專用計算模組34對輸入資料進行相應的計算。具體地,可以根據步驟240中判定的起始位址以及DMA控制資訊中輸入資料的偏移位址,判定輸入資料在設備記憶體40的實際位址。之後,可以根據該實際位址,從設備記憶體40中讀取該資料登錄,並調用專用計算模組34對輸入資料進行相應的計算。
步驟260,將輸出資料寫入設備記憶體。
具體地,可以根據步驟240中判定的起始位址以及DMA控制資訊中輸出資料的偏移位址,判定輸出資料在設備記憶體40的實際位址。之後,可以將輸出資料寫入設備記憶體40中該實際位址對應的儲存空間。
步驟270,獲取輸出資料的長度。
如,可以是從DMA長度暫存器31中讀取輸出資料的長度。
步驟280,根據DMA控制資訊以及輸出資料的長度,將輸出資料從設備記憶體搬移至DMA控制塊。
具體地,可以是根據DMA控制資訊中的輸出資料的偏移位址以及輸出資料的長度,將輸出資料從設備記憶體40搬移至DMA控制塊。該搬移過程具體可以為:獲取DMA控制資訊和輸入資料在設備記憶體40的起始位址。根據偏移位址以及起始位址,判定輸出資料在設備記憶體40的第一實際位址。根據偏移位址以及DMA控制塊指標,判定輸出資料在DMA控制塊的第二實際位址。根據第一實際位址以及輸出資料的長度,從設備記憶體40中讀取輸出資料。將輸出資料寫入DMA控制塊中第二實際位址對應的位置。因為DMA控制塊位於系統記憶體20中,所以該寫入的步驟也可以為:將輸出資料寫入系統記憶體20中第二實際位址對應的位置。
在執行完成步驟280之後,專用計算晶片30可以對DMA控制資訊中的計算完成標誌進行改寫,如,可以將計算完成標誌改寫為1。通用CPU10可以循環計算完成標誌,當計算完成標誌為1時,表示該異構計算完成,可以使用系統記憶體20中的輸出資料。
綜上,本說明書實施例提供的直接記憶體存取方法,可以避免單獨的輸出資料的DMA傳輸對系統記憶體的存取,利用從系統記憶體中獲取輸入資料的同時獲取了輸出資料的偏移位址。從而在異構計算完成後,直接根據該偏移位址進行輸出資料的搬移。避免了通用CPU在其中的操作,減少了整個異構計算的延遲。此外,本說明書提供的DMA塊指標佇列每次只需要寫入一個32bit的DMA塊指標,資料量很小,直接對應一個通用CPU的原子寫操作,提高了多進程進行併發操作的效率。
與上述直接記憶體存取方法對應地,本說明書一個實施例還提供的一種直接記憶體存取裝置,如圖3所示,該裝置可以包括:
讀取單元301,用於從直接記憶體存取DMA控制塊指標佇列中讀取DMA控制塊指標。
判定單元302,用於根據讀取單元301讀取的DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊,該DMA控制塊的內容包括DMA控制資訊和輸入資料。上述系統記憶體是指用於儲存通用中央處理器CPU使用的資料的儲存空間。
判定單元302,還用於判定DMA控制資訊和輸入資料的總長度。
可選地,DMA控制資訊可以具有固定長度。判定單元302具體可以用於:
從DMA長度暫存器中讀取輸入資料的長度。該輸入資料的長度是由通用CPU根據當前所執行的異構計算方法判定的。
根據固定長度以及輸入資料的長度,判定總長度。
搬移單元303,用於根據讀取單元301讀取的DMA控制塊指標以及判定單元32判定的總長度,將DMA控制資訊和輸入資料搬移至設備記憶體。該設備記憶體是指用於儲存專用計算晶片的資料的儲存空間。
此處的搬移單元303可以由圖1中的DMA資料傳輸模組33實現。
計算單元304,用於對輸入資料進行相應的計算,得到輸出資料。
此處的計算單元304可以由圖1中的專用計算模組34實現。
寫入單元305,用於將計算單元304計算的輸出資料寫入設備記憶體。
獲取單元306,用於獲取輸出資料的長度。
搬移單元303,還用於根據DMA控制資訊以及獲取單元306獲取的輸出資料的長度,將輸出資料從設備記憶體搬移至DMA控制塊。
可選地,上述DMA控制資訊可以包括輸出資料的偏移位址。
搬移單元303具體可以用於:
根據輸出資料的偏移位址以及輸出資料的長度,將輸出資料從設備記憶體搬移至DMA控制塊。
本說明書上述實施例裝置的各功能模組的功能,可以通過上述方法實施例的各步驟來實現,因此,本說明書一個實施例提供的裝置的具體工作過程,在此不復贅述。
本說明書一個實施例提供的直接記憶體存取裝置,讀取單元301從直接記憶體存取DMA控制塊指標佇列中讀取DMA控制塊指標。判定單元302根據DMA控制塊指標,在系統記憶體中判定對應的DMA控制塊。判定單元302,還用於判定DMA控制資訊和輸入資料的總長度。搬移單元303根據DMA控制塊指標以及總長度,將DMA控制資訊和輸入資料搬移至設備記憶體。計算單元304對輸入資料進行相應的計算,得到輸出資料。寫入單元305將輸出資料寫入設備記憶體。獲取單元306獲取輸出資料的長度。搬移單元303根據DMA控制資訊以及輸出資料的長度,將輸出資料從設備記憶體搬移至DMA控制塊。由此,以提高異構計算的性能。
需要說明的是,本說明書實施例提供的直接記憶體存取裝置可以為圖1中專用計算晶片30中的一個模組或者單元。
本領域技術人員應該可以意識到,在上述一個或多個示例中,本說明書所描述的功能可以用硬體、軟體、韌體或它們的任意組合來實現。當使用軟體實現時,可以將這些功能儲存在電腦可讀媒體中或者作為電腦可讀媒體上的一個或多個指令或代碼進行傳輸。
以上所述的具體實施方式,對本說明書的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本說明書的具體實施方式而已,並不用於限定本說明書的保護範圍,凡在本說明書的技術方案的基礎之上,所做的任何修改、等同替換、改進等,均應包括在本說明書的保護範圍之內。
10‧‧‧通用CPU
20‧‧‧系統記憶體
30‧‧‧專用計算晶片
31‧‧‧DMA長度暫存器
32‧‧‧DMA控制塊指標佇列
33‧‧‧DMA資料傳輸模組
34‧‧‧專用計算模組
40‧‧‧設備記憶體
210、220、230、240、250、260、270、280‧‧‧步驟
301‧‧‧讀取單元
302‧‧‧判定單元
303‧‧‧搬移單元
304‧‧‧計算單元
305‧‧‧寫入單元
306‧‧‧獲取單元
為了更清楚地說明本說明書實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本說明書的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
圖1為本說明書提供的異構計算系統結構示意圖;
圖2為本說明書一個實施例提供的直接記憶體存取方法流程圖;
圖3為本說明書一個實施例提供的直接記憶體存取裝置示意圖。