TWI783401B - 記憶體管理方法和相關產品 - Google Patents
記憶體管理方法和相關產品 Download PDFInfo
- Publication number
- TWI783401B TWI783401B TW110108324A TW110108324A TWI783401B TW I783401 B TWI783401 B TW I783401B TW 110108324 A TW110108324 A TW 110108324A TW 110108324 A TW110108324 A TW 110108324A TW I783401 B TWI783401 B TW I783401B
- Authority
- TW
- Taiwan
- Prior art keywords
- task
- processing device
- cache
- cache block
- pool
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申請實施例公開了一種記憶體管理方法和相關產品,該方法包括:第一處理設備為第一任務分配快取池的第一快取區塊;所述第一處理設備在確定第二處理設備需要按次序執行第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,其中,所述第二快取區塊中的至少一部分包含於所述第一快取區塊。本申請實施例中,第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,該第一任務和該第二任務可以複用一部分快取區塊;能夠提高記憶體利用率。
Description
本公開涉及計算機領域,尤其涉及一種記憶體管理方法和相關產品。
在由中央處理器(Central Processing Unit,CPU)和加速設備構成的異構加速系統中,加速設備上的記憶體管理策略會極大影響整個系統的性能和效率。加速設備是指CPU以外用於加速計算的設備,例如圖形處理器(Graphics Processing Unit,GPU)、網路處理器(Neural-network Processing Unit,NPU)、現場可程式化邏輯閘陣列(Field-Programmable Gate Array,FPGA)等。由於目前採用的記憶體管理策略記憶體利用率較低,因此需要研究記憶體利用率更高的記憶體管理策略。
本申請實施例公開了一種記憶體管理方法和相關產品。
第一方面,本申請實施例提供了一種記憶體管理方法,該方法包括:第一處理設備為第一任務分配快取(Cache)池的第一快取區塊;所述第一處理設備在確定第二處理設備需要按次序執行第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,其中,所述第二快取區塊中的至少一部分包含於所述第一快取區塊。
第一處理設備確定第二處理設備需要按次序執行第二任務和第一任務的情況是指該第一處理設備確定該第二處理設備不會並行執行該第一任務和該第二任務。也就是說,第二處理設備不會同時執行該第一任務和該第二任務。應理解,第二處理設備按次序執行第二任務和第一任務的情況下,該第二處理設備執行該第一任務和該第二任務不可能同時佔用同一快取區塊。因此,第一處理設備在為第一任務分配快取池的第一快取區塊,可以為第二任務分配第二快取區塊,即該第一任務和該第二任務可以複用(multiplex)一部分快取區塊。
本申請實施例中,第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,該第一任務和該第二任務可以複用一部分快取區塊;能夠提高記憶體利用率。
在一個可能的實現方式中,所述第一處理設備為第一任務分配快取池的第一快取區塊之後,所述方法還包括:所述第一處理設備響應於將所述第一任務發送至所述第二處理設備,將所述第一快取區塊重新放入所述快取池。
所述第一處理設備將所述第一任務發送至所述第二處理設備可以是指所述第一處理設調用第二處理設備執行所述第一任務,也可以指將所述第一任務提交至第二處理設備處理的某個任務佇列。所述第一處理設備在將所述第一任務發送至所述第二處理設備之後,可立即將所述第一快取區塊重新放入所述快取池。
在該實現方式中,第一處理設備可及時將第一快取區塊重新放入快取池,以便於複用該第一快取池。
在一個可能的實現方式中,所述第一處理設備為第一任務分配快取池的第一快取區塊之後,所述方法還包括:所述第一處理設備記錄所述第一快取區塊對應的所述第一任務位於的第一操作佇列;所述確定第二處理設備需要按次序執行第二任務和所述第一任務包括:所述第一處理設備基於記錄的所述第一任務位於的所述第一操作佇列,確定所述第一任務和所述第二任務位於的操作佇列相同。
可選的,所述第一處理設備響應於將所述第一任務發送至所述第二處理設備之後,記錄所述第一快取區塊對應的所述第一任務位於的第一操作佇列。可選的,所述第一處理設備將所述第一快取區塊重新放入所述快取池的操作和記錄所述第一快取區塊對應的所述第一任務位於的第一操作佇列的操作可視為同時執行。也就是說,第一處理設備將第一快取區塊重新放入快取池的操作和記錄該第一快取區塊對應的第一任務位於的第一操作佇列的操作可以是綁定到一起的。所述第一處理設備在為所述第二任務分
配快取區塊之前,已知所述第二任務位於的操作佇列。因此,第一處理設備基於記錄的第一任務位於的第一操作佇列,可以確定該第一任務和第二任務位於的操作佇列是否相同。
在該實現方式中,第一處理設備基於記錄的第一任務位於的第一操作佇列,可準確、快速地確定該第一任務和第二任務位於的操作佇列相同。
在一個可能的實現方式中,所述為所述第二任務分配所述快取池的第二快取區塊包括:所述第一處理設備在所述第二處理設備執行所述第一任務的過程中,為所述第二任務分配所述快取池的所述第二快取區塊。
在該實現方式中,第一處理設備和第二處理設備並行工作,工作效率高。
在一個可能的實現方式中,所述為所述第二任務分配所述快取池的第二快取區塊之前,所述方法還包括:所述第一處理設備從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊;所述第一處理設備在確定第二處理設備需要按次序執行第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,包括:所述第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
在該實現方式中,第一處理設備基於至少一個候選快取
區塊當前分配的任務與第二任務之間的執行順序關係,為該第二任務分配從該至少一個候選快取區塊中確定的第二快取區塊;以便於該第二任務複用已分配的快取區塊,能夠提高記憶體利用率。
在一個可能的實現方式中,所述第一處理設備從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊,包括:所述第一處理設備從所述快取池中搜尋滿足所述第二任務所需快取大小的至少一個候選快取區塊;所述第一處理設備從所述至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。所述至少一個候選快取區塊可以均為當前分配有任務的快取區塊;也可以既包括當前分配有任務的快取區塊還包括當前未分配有任務的快取區塊。
在該實現方式中,優先從至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊,可快速搜尋到當前分配有任務且滿足第二任務所需快取大小的至少一個候選快取區塊。
在一個可能的實現方式中,所述第一處理設備從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊,包括:所述第一處理設備從所述快取池中的當前分配有任務的快取區塊中搜尋滿足所述第二任務所需快取大小的至少一個候選快取區塊。
在該實現方式中,第一處理設備直接從快取池中的當前分配有任務的快取區塊中搜尋滿足第二任務所需快取大小的快取區塊,進而將當前分配有任務的快取區塊再次分配給該第二任務;可以提高記憶體利用率。
在一個可能的實現方式中,所述第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊,包括:第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係以及所述至少一個候選快取區塊的大小,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係以及所述至少一個候選快取區塊的大小,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊可以是指:所述第一處理設備確定所述至少一個候選快取區塊當前分配的任務與所述第二任務按次序執行的情況下,基於所述至少一個候選快取區塊的大小為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
在該實現方式中,為第二任務分配從當前分配有任務的至少一個候選快取區塊中確定的第二快取區塊,可以複用當前分配有任務的快取區塊,提高記憶體複用率。
在一個可能的實現方式中,所述方法還包括:所述第一處理設備確定所述至少一個候選快取區塊中不包括滿足所述第二任務需求的快取區塊的情況下,從所述快取池中包括的當前未分配有任務的至少一個快取區塊中確定分配給所述第二任務的目標快
取區塊。
在該實現方式中,通過從快取池中包括的當前未分配有任務的至少一個快取區塊中確定分配給第二任務的目標快取區塊,以便於該第二任務能夠成功被執行。
在一個可能的實現方式中,所述方法還包括:所述第一處理設備在所述快取池中未搜尋到滿足所述第二任務需求的快取區塊的情況下,擴充所述快取池;所述第一處理設備從擴充後的所述快取池中搜尋分配給所述第二任務的目標快取區塊。
在該實現方式中,從擴充後的快取池中搜尋滿足第二任務需求的快取區塊,能夠快速地滿足為第二任務分配滿足其需求的快取區塊。
第二方面,本申請實施例提供了一種數據處理裝置,該數據處理裝置包括:記憶體分配單元,用於為第一任務分配快取池的第一快取區塊;處理單元,用於確定第二處理設備需要按次序執行第二任務和所述第一任務的情況;所述記憶體分配單元,還用於在所述處理單元確定所述第二處理設備需要按次序執行所述第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,其中,所述第二快取區塊中的至少一部分包含於所述第一快取區塊。
所述處理單元和所述記憶體分配單元可以是同一個單元,也可以是兩個獨立的單元。在一些可能的實施方式中,處理單元為處理器,例如CPU,記憶體分配單元為一個硬體。在一些可能的
實施方式中,處理單元為處理器,例如CPU,記憶體分配單元的功能由處理器運行的軟體或程式實現。也就是說,處理單元的功能和記憶體分配單元的功能均由處理器實現。
在一個可能的實現方式中,所述處理單元,還用於將所述第一任務發送至所述第二處理設備;所述記憶體分配單元,還用於響應於將所述第一任務發送至所述第二處理設備,將所述第一快取區塊重新放入所述快取池。
在一個可能的實現方式中,所述處理單元,還用於記錄所述第一快取區塊對應的所述第一任務位於的第一操作佇列;所述處理單元,用於基於記錄的所述第一任務位於的所述第一操作佇列,確定所述第一任務和所述第二任務位於的操作佇列相同。
在一個可能的實現方式中,所述記憶體分配單元,還用於在所述第二處理設備執行所述第一任務的過程中,為所述第二任務分配所述快取池的所述第二快取區塊。
在一個可能的實現方式中,所述記憶體分配單元,還用於從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊;所述記憶體分配單元,用於在處理單元基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係確定所述第二處理設備需要按次序執行所述第二任務和所述第一任務情況下,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
在一個可能的實現方式中,所述記憶體分配單元,用於從
所述快取池中的當前分配有任務的快取區塊中搜尋滿足所述第二任務所需快取大小的所述至少一個候選快取區塊。
在一個可能的實現方式中,所述記憶體分配單元,用於從所述快取池中搜尋滿足所述第二任務所需快取大小的至少一個候選快取區塊;從所述至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。
在一個可能的實現方式中,所述記憶體分配單元,用於在所述處理單元基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係確定所述第二處理設備需要按次序執行所述第二任務和所述第一任務情況下,基於所述至少一個候選快取區塊的大小為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
在一個可能的實現方式中,所述記憶體處理單元,還用於在處理單元確定所述至少一個候選快取區塊中不包括滿足所述第二任務需求的快取區塊的情況下,從所述快取池中包括的當前未分配有任務的至少一個快取區塊中確定分配給所述第二任務的目標快取區塊。
在一個可能的實現方式中,所述記憶體處理單元,還用於在所述快取池中未搜尋到滿足所述第二任務需求的快取區塊的情況下,擴充所述快取池;從擴充後的所述快取池中搜尋分配給所述第二任務的目標快取區塊。
關於第二方面或各種可能的實現方式所帶來的技術效果,
可參考對於第一方面或相應的實現方式的技術效果的介紹。
第三方面,本申請實施例提供了一種電子設備,該電子設備包括:記憶體和第一處理器,其中,所述記憶體用於儲存指令,所述第一處理器用於執行所述記憶體儲存的指令,使得所述第一處理器執行如第一方面以及任一種可能的實現方式的方法。
在一個可能的實現方式中,所述電子設備還包括第二處理器,所述第二處理器用於利用所述第一處理器分配的快取區塊執行所述第一處理器發送的任務。示例性的,第一處理器為CPU,第二處理器為GPU。
第四方面,本申請實施例提供了一種電子設備,該電子設備包括:第一處理設備、記憶體以及第二處理設備,其中,所述記憶體用於儲存指令和數據,所述第一處理器用於執行所述記憶體儲存的指令,使得所述第一處理器執行如第一方面以及任一種可能的實現方式的方法,所述第二處理設備用於利用所述第一處理設備分配的快取區塊執行所述第一處理器發送的任務。示例性的,第一處理設備為CPU,第二處理設備為GPU。
第五方面,本申請實施例提供了一種晶片,該晶片包括數據介面和第一方面所述的第一處理設備,其中,所述第一處理設備用於執行第一方面或第一方面的任意可能實現方式中的方法。
第六方面,本申請實施例提供了一種計算機可讀儲存媒體,該計算機儲存媒體儲存有計算機程式,該計算機程式包括程式指令,該程式指令當被處理器執行時使該處理器執行第一方面以
及任一種可選的實現方式的方法。
第七方面,本申請實施例提供了一種計算機程式產品,該計算機程式產品包括程式指令,所述程式指令當被處理器執行時使所述處理器執行第一方面以及任一種可選的實現方式的方法。
101:第一處理設備
102:記憶體分配器
103:第二處理設備
104:設備記憶體
201:第一處理設備為第一任務分配快取池的第一快取區塊
202:第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,為第二任務分配快取池的第二快取區塊
301:第一處理設備為第一任務分配快取池的第一快取區塊
302:第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列
303:第一處理設備在基於記錄的第一任務位於的第一操作佇列確定第一任務和第二任務位於的操作佇列相同的情況下,為第二任務分配快取池的第二快取區塊
401:第一處理設備為第一任務分配快取池的第一快取區塊
402:第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列
403:是否搜尋到滿足第二任務所需快取大小的至少一個候選快取區塊
404:是否搜尋到當前分配有任務的至少一個候選快取區塊
405:第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,從至少一個候選快取區塊中確定為第二任務分配的第二快取區塊
406:第一處理設備從快取池中包括的當前未分配有任務的至少一個候選快取區塊中確定分配給第二任務的第三快取區塊
407:第一處理設備為第二任務分配第三快取區塊
408:第一處理設備擴充快取池,並從擴充後的快取池中搜尋分配給第二任務的第四快取區塊
409:第一處理設備為第二任務分配第四快取區塊
410:第一處理設備清空快取池
501:第一處理設備為第一任務分配快取池的第一快取區塊
502:第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列
503:是否搜尋到當前分配有任務且滿足第二任務需求的候選快取區塊
504:第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊
505:是否搜尋到當前未分配有任務且滿足第二任務需求的快取區塊
506:第一處理設備從搜尋到的當前未分配有任務且滿足第二任務需求的快取區塊中確定分配給第二任務的第三快取區塊
507:第一處理設備擴充快取池,並從擴充後的快取池中搜尋分配給第二任務的第四快取區塊
701:第一處理設備為第三任務分配快取池中的第五快取區塊
702:第一處理設備將第三任務提交至第二處理設備的操作佇列
703:定期檢查第三任務是否被完成
704:第一處理設備將第五快取區塊重新放入快取池
705:第一處理設備為第四任務分配快取池中的第六快取區塊
706:第一處理設備將第四任務提交至第二處理設備的操作佇列
901:記憶體分配單元
902:處理單元
1001:第一處理器
1002:第二處理器
1003:記憶體
圖1為本申請實施例提供的一種數據處理裝置的結構示意圖。
圖2為本申請實施例提供的一種記憶體管理方法流程圖。
圖3為本申請實施例提供的另一種記憶體管理方法流程圖。
圖4為本申請實施例提供的另一種記憶體管理方法流程圖。
圖5為本申請實施例提供的另一種記憶體管理方法流程圖。
圖6為本申請實施例提供的一種記憶體管理方法的時序圖。
圖7為本申請實施例提供的另一種記憶體管理方法流程圖。
圖8為本申請實施例提供的另一種記憶體管理方法的時序圖。
圖9為本申請實施例提供的一種數據處理裝置的結構示意圖。
圖10為本申請實施例提供的另一種數據處理裝置的結構示意圖。
本申請的說明書實施例和申請專利範圍及附圖中的術語“第一”、“第二”、和“第三”等是用於區別類似的對象,而不必用於
描述特定的順序或先後次序。此外,術語“包括”和“具有”以及他們的任何變形,意圖在於覆蓋不排他的包含,例如,包含了一系列步驟或單元。方法、系統、產品或設備不必限於清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對於這些過程、方法、產品或設備固有的其它步驟或單元。
如背景技術所述,在異構加速系統中當前採用的記憶體管理策略的記憶體利用率通常較低,因此需要研究記憶體利用率更高的記憶體管理策略。本申請實施例提供了一種記憶體利用率較高的記憶體管理方法,適用於具有第一處理設備(例如CPU)和第二處理設備(對應於加速設備)的數據處理裝置(對應於異構加速系統)。下面先介紹本申請實施例提供的記憶體管理方法所適用的數據處理裝置的結構,以便更方便的描述本申請實施例提供的記憶體管理方法。
圖1為本申請實施例提供的一種數據處理裝置的結構示意圖。如圖1所示,該數據處理裝置包括:第一處理設備101、記憶體分配器102、第二處理設備103以及設備記憶體104,其中,該第一處理設備101和記憶體分配器102獨立設置或者集成在同一設備,第二處理設備103與第一處理設備101為不同類型的處理設備,設備記憶體104可以為第二處理設備103的一部分,或者獨立於第二處理設備103設置,本公開實施例對此不做限定。在一些例子中,第一處理設備101對應於處理單元,記憶體分配器102對應於記憶體分配單元。第一處理設備101可以是CPU或
者其他類型的處理器。在一些實施例中,第一處理設備101可以為主處理設備,例如CPU;第二處理設備103為加速設備,例如GPU。第二處理設備103可以是GPU、NPU、FPGA、數位訊號處理器(digital signal processor,DSP)、專用積體電路(application specific integrated circuit,ASIC)等不同於第一處理設備101的處理器或者處理裝置。在一些可能的實施方式中,第一處理設備101為CPU,記憶體分配單元為與CPU相互獨立的硬體。在一些可能的實施方式中,第一處理設備101為CPU,記憶體分配器102的功能由第一處理設備101運行的軟體或程式實現。也就是說,在一些可能的實施方式中,記憶體分配器102對應的實體硬體為第一處理設備101。設備記憶體104可以為第二處理設備103可使用的記憶體。示例性的,第二處理設備103為GPU,設備記憶體104為第二處理設備103的顯示記憶體。在一些實施例中,設備記憶體104為第二處理設備103的一部分。
下面分別介紹數據處理裝置在實施本申請實施例提供的記憶體管理方法時,第一處理設備101、記憶體分配器102、第二處理設備103以及設備記憶體104的功能。
第一處理設備(例如CPU)101,用於向第二處理設備103提交任務,以及控制記憶體分配器102分配和/或釋放快取池中的快取,即通過記憶體分配器102管理第二處理設備103的設備記憶體104。第一處理設備101向第二處理設備103提交任務可以是指第一處理設備101將任務添加至需要第二處理設備103處理的
操作佇列;也可以是指將任務發送給第二處理設備103,例如發送一個指示第二處理設備103執行某個任務的指令;還可以是指將任務添加至第一處理設備101需要調用第二處理設備103的介面完成的操作佇列;還可以是指以其他方式通知第二處理設備103執行任務。第一處理設備101,還可用於調用第二處理設備103的介面執行任務。示例性的,操作佇列為統一計算設備架構(compute unified device architecture,CUDA)中的cudaStream。同一個cudaStream上的任務按提交的順序執行,不同cudaStream上的任務沒有先後順序,可以併發執行。示例性的,操作佇列為開放運算語言(Open Computing Language,OpenCL)中的cl_command_queue。OpenCL是一個為異構平臺編寫程式的框架,此異構平臺可包括CPU,GPU或其他類型的處理器。示例性的,操作佇列為C++AMP中的accelerator_view。C++AMP是微軟Visual Studio和C++編程語言的新擴展,用於幫助開發人員充分適應現在和未來的高度並行和異構計算環境。
記憶體分配器102負責對設備記憶體104的管理。記憶體分配器102可以是一個實體硬體。或者,記憶體分配器102的功能可以由第一處理設備101運行的軟體或者程式實現。
第二處理設備103用於通過設備記憶體104讀寫數據,以及執行第一處理設備101提交的任務或者被第一處理設備101調用至少一個介面來完成任務。第二處理設備103可以理解為除CPU之外的加速設備,例如GPU、NPU、ASIC、FPGA等。
設備記憶體104是指第二處理設備103上的儲存設備(對應於記憶體空間),被第二處理設備103所使用,例如GPU(對應於第二處理設備103)的顯示記憶體。
在一些實施例中,記憶體分配器102中設置一個快取池,用於預先分配和快取設備記憶體。這個快取池可能是一整區塊的設備記憶體,也可能由多區塊大小任意的設備記憶體組合而成。第二處理設備103在執行任務需要使用設備記憶體時,記憶體分配器102可直接從快取池中分配快取給第二處理設備103,第二處理設備103不需要使用分配給它的快取後,記憶體分配器102將快取重新放入快取池中,即將快取歸還快取池。在一些實施例中,第一處理設備101為CPU,第二處理設備103為GPU,設備記憶體104為第二處理設備103上的顯示記憶體;在包括CPU和GPU的異構計算系統中,CPU負責任務(例如計算任務或者圖像處理任務等)的準備和發起,GPU負責任務的實際執行。CPU發起任務前需要指定GPU執行任務所使用的顯示記憶體。CPU對顯示記憶體的分配和釋放由記憶體分配器102實際完成。記憶體分配器102實際負責了對GPU上顯示記憶體的管理。GPU執行任務時直接使用CPU通過記憶體分配器102分配的部分顯示記憶體。
下面結合圖2來描述數據處理裝置執行本申請實施例提供的記憶體管理方法時,各部件執行的操作。圖2為本申請實施例提供的一種記憶體管理方法流程圖。如圖2所示,該記憶體管理方法包括:
201、第一處理設備為第一任務分配快取池的第一快取區塊。
第一處理設備可以是CPU或者其他類型的處理器。在一些實施例中,第一處理設備為第一任務分配快取池的第一快取區塊可以是第一處理設備通過記憶體分配器為第一任務分配快取池的第一快取區塊;其中,記憶體分配器的功能由第一處理設備運行的軟體或者程式實現。第一任務可以是圖像處理任務、計算任務等需要第二處理設備(例如GPU)執行的任務或者需要調用第二處理設備執行的任務。第一快取區塊可以為快取池中任一個快取區塊。快取池可以理解為記憶體分配器內部設有的快取設備記憶體(例如顯示記憶體)的池子。舉例來說,記憶體分配器管理的顯示記憶體快取在一個池子(即快取池)裡面,第二處理設備需要顯示記憶體時記憶體分配器從池子中分配,分配給該第二處理設備的顯示記憶體用完後不等待該第二處理設備完成任務,就釋放該顯示記憶體。這樣,利用快取池,可以消除設備記憶體分配和釋放過程中的設備同步。設備同步可以理解為第一處理設備(例如CPU)停下執行程式,等待第二處理設備(對應於加速設備)完成任務。在一些實施例中,第一處理設備為第一任務分配快取池的第一快取區塊可以是指:優先從快取池中分配滿足第一任務需求的快取區塊;若該快取池中不存在滿足該第一任務需求的快取區塊,則調用cudaMalloc從設備記憶體中分配更多的記憶體,擴充快取池。cudaMalloc是CUDA中分配顯示記憶體的介面。
在一些實施例中,第一任務可以是某個計算任務或圖像處理任務或其他類型的深度學習任務。在一些實施例中,第一處理設備在執行步驟201之前,可執行如下操作:第一處理設備可以將一個較大的任務進行拆分,得到第一任務。本申請實施例中的數據處理裝置可以是一個異構計算系統。異構計算系統是在析取計算任務並行性類型的基礎上,將具有相同類型的代碼段劃分到同一子任務中,然後根據不同並行性類型將各子任務分配到最適合執行它的計算資源(例如第二處理設備)上加以執行,達到使計算任務總的執行時間為最小。這樣,第一任務可以理解為第一處理設備拆分一個較大的任務得到的需要第二處理設備執行的子任務或者調用第二處理設備執行的子任務。或者,第一任務為第一處理設備確定需要執行的任務本身,本公開實施例對此不做限定。
在一些實施例中,第一處理設備在執行步驟201之後,可執行如下操作:第一處理設備響應於將第一任務發送至第二處理設備,將第一快取區塊重新放入(也稱為歸還)快取池。第一處理設備將第一任務發送至第二處理設備可以是指第一處理設備將任務添加至需要第二處理設備處理的操作佇列;也可以是指發送一個指示第二處理設備執行某個任務的指令;還可以是指將任務添加至第一處理設備需要調用第二處理設備的介面完成的操作佇列;還可以是指以其他方式通知第二處理設備執行任務,本公開實施例對此不做限定。
在一些實施例中,第一處理設備在將第一任務發送至第
二處理設備之後,可立即將第一快取區塊重新放入快取池,而無需等待第二處理設備使用第一快取區塊執行完畢第一任務。在本公開實施例中,第一處理設備可及時將第一快取區塊重新放入快取池,以便於複用該第一快取區塊。
在一些實施例中,第一處理設備或記憶體分配器可以為快取池中的各個快取區塊設置標識,以表明快取區塊的當前狀態。作為一個例子,第一處理設備為第一任務分配快取池的第一快取區塊可以是指該第一處理設備將該快取池的該第一快取區塊分配給第一任務,並將該第一快取區塊的狀態設置為不可用,表明該第一快取區塊不能分配給其他任務;將第一快取區塊重新放入(也稱為歸還)快取池可以是指將該第一快取區塊的狀態設置為可用,表明該第一快取區塊可以分配給其他任務。本公開實施例還可以通過其他方式指示各個快取區塊當前是否可用,例如,第一處理設備將第一快取區塊分配給第一任務,可以指將該第一快取區塊從快取池包含的快取資源中移除,並且將第一快取區塊重新放入快取池,可以指將第一快取區塊重新添加到快取池包含的快取資源中。
202、第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,為第二任務分配快取池的第二快取區塊。
第二快取區塊中的至少一部分包含於第一快取區塊。第二任務可以是圖像處理任務、計算任務等需要第二處理設備(例如GPU)執行的任務或者需要調用第二處理設備執行的任務。
第一處理設備確定第二處理設備需要按次序執行第二任務和第一任務是指該第一處理設備確定該第二處理設備不會並行執行該第一任務和該第二任務。也就是說,第二處理設備不會同時執行該第一任務和該第二任務。該第一任務和第二任務可以是相同或不同類型的任務,例如可以是同一個任務的不同子任務,或者是不同任務的子任務,等等,本公開實施例對此不做限定。應理解,第二處理設備按次序執行第二任務和第一任務的情況下,該第二處理設備執行該第一任務和該第二任務不可能同時使用快取區塊。因此,第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,可以為第二任務分配第二快取區塊,即該第一任務和該第二任務可以複用一部分快取區塊。後續再詳述第一處理設備確定第二處理設備需要按次序執行第二任務和第一任務的實現方式。
在一些實施例中,第一處理設備的記憶體分配和第二處理設備的任務處理可以並行執行,從而提高處理效率。舉例來說,第一處理設備在第二處理設備執行第一任務的過程中,為第二任務分配快取池的第二快取區塊。
本申請實施例中,第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,該第一任務和該第二任務可以複用一部分快取區塊;能夠提高記憶體利用率。
下面介紹確定第二處理設備需要按次序執行第二任務和第一任務的可選示例。
第一處理設備在將第一快取區塊重新放入快取池之後或者在將第一快取區塊重新放入快取池的過程中,記錄第一快取區塊對應的第一任務所在的第一操作佇列;在為第二任務分配快取區塊的過程中,基於記錄的第一任務所在的第一操作佇列,確定第一任務和第二任務位於的操作佇列相同。第一操作佇列可以是需要第二處理設備執行的操作佇列或者是第二任務所在的操作佇列。舉例來說,第一處理設備將任務提交至第二處理設備的第一操作佇列,該第二處理設備按照各任務被提交至該第一操作佇列的先後順序依次執行該第一操作佇列中的任務。第一操作佇列可以是第一處理設備需要調用第二處理設備的介面完成的操作佇列。舉例來說,第一處理設備將任務添加至其需要調用第二處理設備的介面完成的操作佇列,並按照各任務被添加至該操作佇列的先後順序依次調用第二處理設備的介面執行各任務。
在一些實施例中,第一處理設備將第一快取區塊重新放入快取池的操作和記錄第一快取區塊對應的第一任務所在的第一操作佇列的操作可以是同時或以任意先後順序執行的,例如,在將第一快取區塊重新放入快取池後,記錄第一快取區塊的本次任務分配信息,該任務分配信息包含第一任務所在的操作佇列的信息。再例如,第一處理設備記錄第一快取區塊對應的第一任務所在的第一操作佇列,並緊接著將第一快取區塊重新放入快取池。
然後,在為第二任務分配快取區塊的過程中,第一處理設備基於記錄的第一任務所在的第一操作佇列,例如,通過查詢第一
快取區塊的任務分配信息,可以確定該第一任務和第二任務位於的操作佇列是否相同,即待分配的第二任務與第一快取區塊已分配的第一任務屬相同的操作佇列。這樣,同一操作佇列中的不同任務是按照特定順序依次執行的,第一任務和第二任務位於同一操作佇列,表明第一任務和第二任務不會同時執行。
圖3為本申請實施例提供的另一種記憶體管理方法流程圖。其中,與圖2所示實施例中的相同之處的描述將簡略帶過。
301、第一處理設備為第一任務分配快取池的第一快取區塊。
302、第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列。
在一些實施例中,第一處理設備可記錄重新放入快取池的每個快取區塊對應的任務位於的操作佇列。也就是說,第一處理設備可記錄有快取池中當前分配有任務的各快取區塊對應的操作佇列。一個快取區塊對應的操作佇列為該快取區塊分配的任務位於的操作佇列。
在一些實施例中,第一處理設備在將第一快取區塊重新放入快取池之前,可釋放該第一快取區塊。舉例來說,快取池中的快取區塊為第二處理設備的顯示記憶體,第一處理設備在將第一快取區塊重新放入快取池之前,通過調用記憶體分配器的介面釋放該第一快取區塊。cudaFree介面為CUDA中釋放顯示記憶體的介面。在一些實施例中,釋放第一快取區塊可以是指將該第一快取
區塊放入快取池,但是該第一快取區塊不能被分配,例如將該第一快取區塊的狀態設置為不可用;將第一快取區塊重新放入快取池可以是指該第一快取區塊能夠被分配,例如將該第一快取區塊的狀態設置為可用。
303、第一處理設備在基於記錄的第一任務位於的第一操作佇列確定第一任務和第二任務位於的操作佇列相同的情況下,為第二任務分配快取池的第二快取區塊。
步驟303為步驟202的一種可能的實現方式。第二快取區塊中的至少一部分包含於第一快取區塊。
在一些實施例中,第一處理設備在為第二任務分配快取池的第二快取區塊之前,可從快取池中搜尋當前分配有任務的至少一個候選快取區塊;步驟303的一種實現方式如下:基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊。
第一處理設備從快取池中搜尋當前分配有任務的至少一個候選快取區塊可以是指:第一處理設備從快取池中搜尋滿足第二任務所需快取大小的至少一個候選快取區塊;第一處理設備從至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。示例性的,第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊可以是指:從至少
一個候選快取區塊中選擇當前分配的任務與第二任務按次序執行的一個或多個目標快取區塊;為第二任務分配從一個或多個目標快取區塊中確定的第二快取區塊。舉例來說,第一處理設備從快取池中搜尋到滿足第二任務所需快取大小的10個候選快取區塊;從該10個候選快取區塊中選擇當前分配的任務與第二任務按次序執行的候選快取區塊,得到目標快取區塊;為該第二任務分配從該目標快取區塊中確定的第二快取區塊。在本申請實施例中,候選快取區塊滿足第二任務所需快取大小的快取區塊,候選快取區塊不僅滿足第二任務所需快取大小,並且當前分配有任務。
本申請實施例中,基於記錄的第一任務位於的第一操作佇列,可準確、快速地確定該第一任務和第二任務位於的操作佇列相同,進而為該第二任務分配第二快取區塊;能夠提高記憶體利用率。
圖4為本申請實施例提供的另一種記憶體管理方法流程圖。其中,與圖2所示實施例中的相同之處的描述將簡略帶過。
401、第一處理設備為第一任務分配快取池的第一快取區塊。
402、第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列。
403、第一處理設備從快取池中搜尋滿足第二任務所需快取大小的至少一個候選快取區塊。
若搜尋到滿足第二任務所需快取大小的至少一個候選快
取區塊,執行步驟404;若未搜尋到滿足第二任務所需快取大小的至少一個候選快取區塊,執行步驟408。
404、第一處理設備從至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。
若搜尋到分配有任務的至少一個候選快取區塊,執行步驟405;若未搜尋到分配有任務的候選快取區塊,執行步驟406。
405、第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,從至少一個候選快取區塊中確定為第二任務分配的第二快取區塊。
示例性的,步驟405的一種可能的實現方式如下:從至少一個候選快取區塊中選擇當前分配的任務與第二任務按次序執行的候選快取區塊,得到一個或多個目標快取區塊(如上述第一快取區塊);從一個或多個目標快取區塊中確定為第二任務分配的第二快取區塊。步驟405對應於圖2中的步驟202。
示例性的,步驟405的一種可能的實現方式如下:第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係以及至少一個候選快取區塊的大小,從至少一個候選快取區塊中確定為第二任務分配的第二快取區塊。舉例來說,從至少一個候選快取區塊中選擇當前分配的任務與第二任務按次序執行的候選快取區塊,得到一個或多個目標快取區塊(如上述第一快取區塊);從一個或多個目標快取區塊中選取滿足第二任務所需快取大小的第二快取區塊,並為第二任務分配第二快取
區塊,其中,作為一個例子,如果滿足第二任務所需快取大小的目標快取區塊有多個,則可以從滿足第二任務的需求的目標快取區塊中選取最小的目標快取區塊作為第二快取區塊,但本公開實施例對此不做限定。
406、第一處理設備從快取池中包括的當前未分配有任務的至少一個候選快取區塊中確定分配給第二任務的第三快取區塊。
407、第一處理設備為第二任務分配第三快取區塊。
408、第一處理設備擴充快取池,並從擴充後的快取池中搜尋分配給第二任務的第四快取區塊。
第四快取區塊可以為滿足第二任務所需快取大小的快取區塊。舉例來說,如果快取池中不存在滿足第二任務需求的快取區塊,則調用cudaMalloc介面從設備記憶體分配更多的顯示記憶體,擴充快取池。cudaMalloc介面是CUDA中分配顯示記憶體的介面。滿足第二任務需求是指滿足第二任務所需快取大小。
409、第一處理設備為第二任務分配第四快取區塊。
這樣,就完成了對第二任務的快取分配。在一些實施例中,該方法還可以進一步包括410。
410、第一處理設備清空快取池。
在一些實施例中,第一處理設備不需要調用第二處理設備執行任務時,可將快取池中的快取歸還第二處理設備的設備記憶體。舉例來說,第一處理設備調用cudaFree介面將快取池中的顯示記憶體歸還給GPU(即第二處理設備),即清空快取池。
本申請實施例中,第一處理設備先確定滿足第二任務所需快取大小的至少一個候選快取區塊,再從該至少一個候選快取區塊中優先選擇當前分配有任務且分配的任務與第二任務按次序執行的至少一個候選快取區塊;能夠快速地為第二任務分配滿足其需求的快取區塊,並能夠提高記憶體利用率。
圖5為本申請實施例提供的另一種記憶體管理方法流程圖。
501、第一處理設備為第一任務分配快取池的第一快取區塊。
502、第一處理設備將第一快取區塊重新放入快取池,並記錄第一快取區塊對應的第一任務位於的第一操作佇列。
503、第一處理設備從快取池中是否搜尋到當前分配有任務且滿足第二任務需求的候選快取區塊。
若搜尋到至少一個當前分配有任務且滿足第二任務需求的候選快取區塊,執行步驟504;若未搜尋到當前分配有任務且滿足第二任務需求的候選快取區塊,執行步驟505。
504、第一處理設備基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係,為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊。
步驟504的實現方式可與步驟405的實現方式相同。
505、第一處理設備從快取池中是否搜尋到當前未分配有任務且滿足第二任務需求的快取區塊。
若第一處理設備從快取池中搜尋到當前未分配有任務且滿足第二任務需求的快取區塊,執行步驟506;若第一處理設備從快取池中未搜尋到當前未分配有任務且滿足第二任務需求的快取區塊,執行步驟507。
506、第一處理設備從搜尋到的當前未分配有任務且滿足第二任務需求的快取區塊中確定分配給第二任務的第三快取區塊。
507、第一處理設備擴充快取池,並從擴充後的快取池中搜尋分配給第二任務的第四快取區塊。
本申請實施例中,優先搜尋從當前分配有任務且滿足第二任務需求的快取區塊中為第二任務分配快取區塊,既能提高搜尋速度,又能提高記憶體複用率。
下面結合圖6中的記憶體管理方法的時序圖來進一步描述圖2至圖5中的記憶體管理方法。圖6為本申請實施例提供的一種記憶體管理方法的時序圖,對應於圖2至圖5中的記憶體管理方法。如圖6所示,第一處理設備依次執行如下操作:分配1、提交任務1(對應於第一任務)、釋放1、分配2、提交任務2(對應於第二任務)以及釋放2;第二處理設備依次執行如下操作:執行任務1和執行任務2。其中,分配1表示第一處理設備為任務1分配第一快取區塊,分配2表示第一處理設備為任務2分配第二快取區塊;提交任務1表示第一處理設備將該任務1提交至第二處理設備的操作佇列,提交任務2表示第一處理設備將任務2提交至第二處理設備的操作佇列;釋放1表示第一處理設備控制記
憶體分配器釋放第一快取區塊以及將該第一快取區塊重新放入快取池,釋放2表示第一處理設備控制記憶體分配器釋放第二快取區塊以及將該第二快取區塊重新放入快取池;執行任務1表示第二處理設備執行該任務1,執行任務2表示第二處理設備執行任務2。圖6中,第一處理設備執行分配1所分配的第一快取區塊和執行分配2所分配的第二快取區塊相同或者存在重疊。也就是說,第二處理設備執行相同操作佇列中的任務可複用快取區塊。應理解,在一些實施例中,第二處理設備執行第一任務使用的第一快取區塊和執行第二任務使用的第二快取區塊相同。舉例來說,第二處理設備為GPU,GPU執行同一操作佇列的計算任務可複用同一區塊顯示記憶體。如圖6所示,第一處理設備執行提交任務1、釋放1、分配2以及提交任務2的操作時,第二處理設備同時執行任務1;第二處理設備執行任務2時,第一處理設備執行釋放2的操作。可見,第一處理設備不需要等待第二處理設備完成任務1,就執行釋放1、分配2以及提交任務2的操作。也就是說,第一處理設備和第二處理設備不需要進行同步,能夠實現異步計算模式,提高計算性能。
本申請實施例中,第二處理設備可根據任務被執行的先後順序複用快取,第一處理設備和第二處理設備能夠實現異步計算模式;既能提高記憶體的利用率,又能提高計算效率。
圖7為本申請實施例提供的另一種記憶體管理方法流程圖。如圖7所示,該方法包括:
701、第一處理設備為第三任務分配快取池中的第五快取區塊。
步驟701的實現方式可以與步驟301的實現方式類似。
702、第一處理設備將第三任務提交至第二處理設備的操作佇列。
在一些實施例中,第一處理設備將第三任務提交至第二處理設備的操作佇列之後,立即釋放第五緩衝區塊。
703、第一處理設備檢查第三任務是否被完成。
若是,執行步驟704;若否,再次執行步驟703。在一些實施例中,第一處理設備可定期(例如每隔5ms、10ms等)檢查第三任務是否被完成;若檢查到第三任務被完成,則調用記憶體分配器將第五快取區塊重新放入快取池;若否,繼續定期檢查。在一些實施例中,步驟703可替換為:在每次釋放快取區塊(例如第五快取區塊)之前,檢查第三任務是否被完成。在一些實施例中,步驟703可替換為:在每次申請快取區塊(例如第五快取區塊)之前,檢查第三任務是否被完成。應理解,第一處理設備還可以採用其他方式檢查第三任務是否被完成,本申請實施例不作限定。
704、第一處理設備將第五快取區塊重新放入快取池。
705、第一處理設備為第四任務分配快取池中的第六快取區塊。
第五快取區塊和第六快取區塊不存在重疊。
706、第一處理設備將第四任務提交至第二處理設備的操
作佇列。
應理解,第二處理設備佔用第五快取區塊執行第三任務,以及佔用第六快取區塊執行第四任務。
本申請實施例中,第一處理設備定期檢查第二處理設備上的任務是否完成,在任一計算任務完成時釋放該任一計算任務對應的快取,不需要等待第二處理設備上所有的計算任務完成;能夠提高處理效率。
下面結合圖8中的記憶體管理方法的時序圖來進一步描述圖7的記憶體管理方法。圖8為本申請實施例提供的一種記憶體管理方法的時序圖,對應於圖7中的記憶體管理方法。如圖8所示,第一處理設備依次執行如下操作:分配1、提交任務1(對應於第三任務)、釋放1、分配2、提交任務2(對應於第四任務)以及釋放2;第二處理設備依次執行如下操作:執行任務1和執行任務2。圖8中,分配1表示第一處理設備為任務1分配快取池中的第五快取區塊,分配2表示第一處理設備為任務2分配快取池中的第六快取區塊;提交任務1表示第一處理設備將該任務1提交至第二處理設備的操作佇列,提交任務2表示第一處理設備將該任務2提交至第二處理設備的操作佇列;釋放1表示第一處理設備釋放第五快取區塊,釋放2表示第一處理設備釋放第六快取區塊;執行任務1表示第二處理設備執行該任務1,執行任務2表示第二處理設備執行任務2。圖8中,第一處理設備執行分配1所分配的第五快取區塊和執行分配2所分配的第六快取區塊不存在任
何相同的快取。也就是說,第二處理設備執行相同操作佇列中的計算任務不能複用快取區塊。對比針對圖6的時序圖的描述,圖8的時序圖中釋放1的操作為第一處理設備釋放第五快取區塊,圖6的時序圖中釋放1的操作為第一處理設備釋放第一快取區塊以及將該第一快取區塊重新放入快取池;圖8的時序圖中釋放2的操作為第一處理設備釋放第六快取區塊,圖6的時序圖中釋放2的操作為第一處理設備釋放第二快取區塊以及將該第二快取區塊重新放入快取池。圖7的記憶體管理方法中,第一處理設備在將任一計算任務提交至第二處理設備的操作佇列之後,定期檢查該任一計算任務是否被第二處理設備完成,直到該任一計算任務被完成才會將該任一計算任務佔用的記憶體空間重新放入快取池。也就是說,第一處理設備分配給第二處理設備執行某個計算任務的快取區塊,直到該計算任務被完成,該快取區塊才會被重新放入快取池。如圖8所示,第一處理設備執行提交任務1、釋放1、分配2以及任務2的操作時,第二處理設備同時執行任務1;第二處理設備執行任務2時,第一處理設備執行釋放2的操作。可見,第一處理設備不需要等待第二處理設備完成任務1,就執行釋放1、分配2以及提交任務2的操作。也就是說,第一處理設備和第二處理設備不需要進行同步,能夠實現異步計算模式,提高計算性能。
本申請實施例中,第一處理設備和第二處理設備能夠實現異步計算模式,能夠提高記憶體的利用率。
下面介紹可實現前述實施例提供的記憶體管理方法的數據處理裝置的結構。
圖9為本申請實施例提供的一種數據處理裝置的結構示意圖,如圖9所示,該數據處理裝置包括:記憶體分配單元901,用於為第一任務分配快取池的第一快取區塊;處理單元902,用於確定第二處理設備需要按次序執行第二任務和第一任務的情況;記憶體分配單元901,還用於在處理單元確定第二處理設備需要按次序執行第二任務和第一任務的情況下,為第二任務分配快取池的第二快取區塊,其中,第二快取區塊中的至少一部分包含於第一快取區塊。
處理單元和記憶體分配單元可以是同一個單元,也可以是兩個獨立的單元。在一些可能的實施方式中,處理單元為處理器,例如CPU,記憶體分配單元為一個硬體。在一些可能的實施方式中,處理單元為處理器,例如CPU,記憶體分配單元的功能由處理器運行的軟體或程式實現。也就是說,處理單元的功能和記憶體分配單元的功能均由處理器實現。
在一個可能的實現方式中,處理單元902,還用於將第一任務發送至第二處理設備;記憶體分配單元901,還用於響應於將第一任務發送至第二處理設備,將第一快取區塊重新放入快取池。
在一個可能的實現方式中,處理單元902,還用於記錄第
一快取區塊對應的第一任務位於的第一操作佇列;處理單元902,用於基於記錄的第一任務位於的第一操作佇列,確定第一任務和第二任務位於的操作佇列相同。
在一個可能的實現方式中,記憶體分配單元901,還用於在第二處理設備執行第一任務的過程中,為第二任務分配快取池的第二快取區塊。
在一個可能的實現方式中,記憶體分配單元901,還用於從快取池中搜尋當前分配有任務的至少一個候選快取區塊;記憶體分配單元901,用於在處理單元基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係確定第二處理設備需要按次序執行第二任務和第一任務情況下,為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊。
在一個可能的實現方式中,記憶體分配單元901,用於從快取池中搜尋滿足第二任務所需快取大小的至少一個候選快取區塊;從至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。
在一個可能的實現方式中,記憶體分配單元901,用於在處理單元基於至少一個候選快取區塊當前分配的任務與第二任務之間的執行順序關係確定第二處理設備需要按次序執行第二任務和第一任務情況下,基於至少一個候選快取區塊的大小為第二任務分配從至少一個候選快取區塊中確定的第二快取區塊。
在一個可能的實現方式中,記憶體處理單元901,還用於
在處理單元確定至少一個候選快取區塊中不包括滿足第二任務需求的快取區塊的情況下,從快取池中包括的當前未分配有任務的至少一個快取區塊中確定分配給第二任務的目標快取區塊。
在一個可能的實現方式中,記憶體處理單元901,還用於在快取池中未搜尋到滿足第二任務需求的快取區塊的情況下,擴充快取池;從擴充後的快取池中搜尋分配給第二任務的目標快取區塊。
圖10為本申請實施例提供的另一種數據處理裝置的結構示意圖,如圖10所示,該數據處理裝置包括:第一處理器1001、第二處理器1002、記憶體1003;其中,記憶體用於儲存指令和數據,第一處理器用於執行記憶體儲存的指令,使得第一處理器執行上述任一實施例所述的記憶體管理方法,第二處理設備用於利用第一處理設備分配的快取區塊執行第一處理器發送的任務。記憶體1003可包括第二處理器1002使用的設備記憶體以及第一處理器1001的記憶體。示例性的,第一處理設備為CPU,第二處理設備為GPU,記憶體1003包括GPU的顯示記憶體。
在本申請的實施例中還提供一種計算機可讀儲存媒體,計算機可讀儲存媒體儲存有計算機程式,計算機程式被處理器執行時實現上述任一實施例所述的記憶體管理方法。該計算機可讀儲存媒體包括非暫態的計算機可讀儲存媒體。
本申請實施例還提供了一種包含指令的計算機程式產品,當其在計算機上運行時,使得計算機執行前述實施例所提供的記
憶體管理方法。
本申請實施例還提供了一種電子設備,該電子設備包括:記憶體和第一處理器,其中,所述記憶體用於儲存指令,所述第一處理器用於執行所述記憶體儲存的指令,使得所述第一處理器執行上述任一實施例所述的記憶體管理方法。所述電子設備還可包括第二處理器,所述第二處理器用於利用所述第一處理器分配的快取區塊執行所述第一處理器發送的任務。
本申請實施例提供了一種晶片,該晶片包括數據介面和第一方面所述的第一處理設備,其中,所述第一處理設備用於執行上述任一實施例所述的記憶體管理方法。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本申請揭露的技術範圍內,可輕易想到各種等效的修改或替換,這些修改或替換都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應以申請專利範圍的保護範圍為准。
201:第一處理設備為第一任務分配快取池的第一快取區塊
202:第一處理設備在確定第二處理設備需要按次序執行第二任務和第一任務的情況下,為第二任務分配快取池的第二快取區塊
Claims (13)
- 一種記憶體管理方法,包括:第一處理設備為第一任務分配快取池的第一快取區塊,所述快取池用於預先分配和快取第二處理設備在執行任務時需要使用的記憶體;所述第一處理設備在確定所述第二處理設備需要按次序執行第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,其中,所述第二快取區塊中的至少一部分包含於所述第一快取區塊。
- 如請求項1所述的記憶體管理方法,其中,所述第一處理設備為第一任務分配快取池的第一快取區塊之後,所述記憶體管理方法還包括:所述第一處理設備響應於將所述第一任務發送至所述第二處理設備,將所述第一快取區塊重新放入所述快取池。
- 如請求項1所述的記憶體管理方法,其中,所述第一處理設備為第一任務分配快取池的第一快取區塊之後,所述記憶體管理方法還包括:所述第一處理設備記錄所述第一快取區塊對應的所述第一任務位於的第一操作佇列;所述確定第二處理設備需要按次序執行第二任務和所述第一任務包括:所述第一處理設備基於記錄的所述第一任務位於的所述第一 操作佇列,確定所述第一任務和所述第二任務位於的操作佇列相同。
- 如請求項1所述的記憶體管理方法,其中,所述為所述第二任務分配所述快取池的第二快取區塊包括:所述第一處理設備在所述第二處理設備執行所述第一任務的過程中,為所述第二任務分配所述快取池的所述第二快取區塊。
- 如請求項1至4任一項所述的記憶體管理方法,其中,所述為所述第二任務分配所述快取池的第二快取區塊之前,所述記憶體管理方法還包括:所述第一處理設備從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊;所述第一處理設備在確定第二處理設備需要按次序執行第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,包括:所述第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
- 如請求項5所述的記憶體管理方法,其中,所述第一處理設備從所述快取池中搜尋當前分配有任務的至少一個候選快取區塊,包括:所述第一處理設備從所述快取池中搜尋滿足所述第二任務所需快取大小的至少一個候選快取區塊; 所述第一處理設備從所述至少一個候選快取區塊中搜尋當前分配有任務的至少一個候選快取區塊。
- 如請求項5所述的記憶體管理方法,其中,所述第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊,包括:第一處理設備基於所述至少一個候選快取區塊當前分配的任務與所述第二任務之間的執行順序關係以及所述至少一個候選快取區塊的大小,為所述第二任務分配從所述至少一個候選快取區塊中確定的所述第二快取區塊。
- 如請求項5所述的記憶體管理方法,還包括:所述第一處理設備確定所述至少一個候選快取區塊中不包括滿足所述第二任務需求的快取區塊的情況下,從所述快取池中包括的當前未分配有任務的至少一個快取區塊中確定分配給所述第二任務的目標快取區塊。
- 如請求項1至4中任一項所述的記憶體管理方法,還包括:所述第一處理設備在所述快取池中未搜尋到滿足所述第二任務需求的快取區塊的情況下,擴充所述快取池;所述第一處理設備從擴充後的所述快取池中搜尋分配給所述第二任務的目標快取區塊。
- 一種數據處理裝置,包括: 記憶體分配單元,用於為第一任務分配快取池的第一快取區塊,所述快取池用於預先分配和快取第二處理設備在執行任務時需要使用的記憶體;處理單元,用於確定所述第二處理設備需要按次序執行第二任務和所述第一任務的情況;所述記憶體分配單元,還用於在所述處理單元確定所述第二處理設備需要按次序執行所述第二任務和所述第一任務的情況下,為所述第二任務分配所述快取池的第二快取區塊,其中,所述第二快取區塊中的至少一部分包含於所述第一快取區塊。
- 一種電子設備,包括記憶體和第一處理器,其中,所述記憶體用於儲存指令,所述第一處理器用於執行所述記憶體儲存的指令,使得所述第一處理器執行如請求項1至9任一項所述的記憶體管理方法。
- 如請求項11所述的電子設備,其中,所述電子設備還包括第二處理器,所述第二處理器用於利用所述第一處理器分配的快取區塊執行所述第一處理器發送的任務。
- 一種計算機可讀儲存媒體,其中,所述計算機可讀儲存媒體中儲存有計算機程式,所述計算機程式包括程式指令,所述程式指令當被處理器執行時,使所述處理器執行請求項1至9任意一項所述的記憶體管理方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010561183.XA CN111736998A (zh) | 2020-06-18 | 2020-06-18 | 内存管理方法和相关产品 |
CN202010561183.X | 2020-06-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202201231A TW202201231A (zh) | 2022-01-01 |
TWI783401B true TWI783401B (zh) | 2022-11-11 |
Family
ID=72649904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110108324A TWI783401B (zh) | 2020-06-18 | 2021-03-09 | 記憶體管理方法和相關產品 |
Country Status (5)
Country | Link |
---|---|
JP (1) | JP2022539956A (zh) |
KR (1) | KR20220010036A (zh) |
CN (1) | CN111736998A (zh) |
TW (1) | TWI783401B (zh) |
WO (1) | WO2021253875A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736998A (zh) * | 2020-06-18 | 2020-10-02 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200601045A (en) * | 2003-12-24 | 2006-01-01 | Intel Corp | Adaptive caching |
US20130047162A1 (en) * | 2011-08-19 | 2013-02-21 | Canon Kabushiki Kaisha | Efficient cache reuse through application determined scheduling |
CN110308982A (zh) * | 2018-03-20 | 2019-10-08 | 华为技术有限公司 | 一种共享内存复用方法及装置 |
TW202011205A (zh) * | 2018-09-10 | 2020-03-16 | 聯發科技股份有限公司 | 電子設備中執行任務級快取記憶體管理的方法和裝置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109271327B (zh) * | 2017-07-18 | 2020-11-27 | 杭州海康威视数字技术股份有限公司 | 内存管理方法及装置 |
CN108829610B (zh) * | 2018-04-02 | 2020-08-04 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN111736998A (zh) * | 2020-06-18 | 2020-10-02 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
-
2020
- 2020-06-18 CN CN202010561183.XA patent/CN111736998A/zh active Pending
-
2021
- 2021-03-05 JP JP2021570921A patent/JP2022539956A/ja not_active Withdrawn
- 2021-03-05 WO PCT/CN2021/079390 patent/WO2021253875A1/zh active Application Filing
- 2021-03-05 KR KR1020217042198A patent/KR20220010036A/ko active Search and Examination
- 2021-03-09 TW TW110108324A patent/TWI783401B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200601045A (en) * | 2003-12-24 | 2006-01-01 | Intel Corp | Adaptive caching |
US20130047162A1 (en) * | 2011-08-19 | 2013-02-21 | Canon Kabushiki Kaisha | Efficient cache reuse through application determined scheduling |
CN110308982A (zh) * | 2018-03-20 | 2019-10-08 | 华为技术有限公司 | 一种共享内存复用方法及装置 |
TW202011205A (zh) * | 2018-09-10 | 2020-03-16 | 聯發科技股份有限公司 | 電子設備中執行任務級快取記憶體管理的方法和裝置 |
Also Published As
Publication number | Publication date |
---|---|
WO2021253875A1 (zh) | 2021-12-23 |
JP2022539956A (ja) | 2022-09-14 |
TW202201231A (zh) | 2022-01-01 |
KR20220010036A (ko) | 2022-01-25 |
CN111736998A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106371894B (zh) | 一种配置方法、装置和数据处理服务器 | |
US9047196B2 (en) | Usage aware NUMA process scheduling | |
US9311157B2 (en) | Method and apparatus for dynamic resource allocation of processing units on a resource allocation plane having a time axis and a processing unit axis | |
JP3678414B2 (ja) | 多重プロセッサ・システム | |
EP2300910B1 (en) | Scheduler instances in a process | |
US8549524B2 (en) | Task scheduler for cooperative tasks and threads for multiprocessors and multicore systems | |
US20120317389A1 (en) | Allocating Heaps in NUMA Systems | |
US20050125793A1 (en) | Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment | |
US20140022263A1 (en) | Method for urgency-based preemption of a process | |
US9256465B2 (en) | Process device context switching | |
KR20140101384A (ko) | 셰이더 코어에서 셰이더 자원 할당을 위한 정책 | |
US8291426B2 (en) | Memory allocators corresponding to processor resources | |
KR20110075297A (ko) | 병렬도를 고려한 병렬 처리 장치 및 방법 | |
CN110990154B (zh) | 一种大数据应用优化方法、装置及存储介质 | |
KR102338849B1 (ko) | 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 | |
WO2013178245A1 (en) | A graphics processing unit controller, host system, and methods | |
US9122522B2 (en) | Software mechanisms for managing task scheduling on an accelerated processing device (APD) | |
TWI783401B (zh) | 記憶體管理方法和相關產品 | |
TW200925871A (en) | Dynamic logical data channel assignment using time-grouped allocations | |
WO2015180668A1 (en) | Memory pool management method for sharing memory pool among different computing units and related machine readable medium and memory pool management apparatus | |
JP6582367B2 (ja) | 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム | |
US20150186180A1 (en) | Systems and methods for affinity dispatching based on network input/output requests | |
JP5941868B2 (ja) | 仮想計算機システムおよび仮想計算機におけるi/o実施方法 | |
JP4734348B2 (ja) | 共有メモリ型マルチプロセッサにおける非同期遠隔手続き呼び出し方法、非同期遠隔手続き呼び出しプログラムおよび記録媒体 | |
JP4211645B2 (ja) | 専用プロセッサの備わった計算機システム |