執(zhí)行的指令,而不是與執(zhí)行單元內(nèi)的內(nèi)部程序代碼相對應。
[0028]參照圖2,然后,加速器所提供的加速至少部分源自多個線程203_1至203_Υ的并行執(zhí)行,這與單個線程201_1的執(zhí)行相對。換言之,在實施例中,加速器所提供的加速不僅通過調(diào)用專用執(zhí)行單元而且通過它們并行執(zhí)行多個線程來實現(xiàn)。在實施例中,例如,加速由多指令多數(shù)據(jù)(MMD)加速器通過專用執(zhí)行單元提供,而執(zhí)行主線程201_1所在的CPU核與具有通用執(zhí)行單元的單指令機器(諸如單指令單數(shù)據(jù)(SISD)和/或單指令多數(shù)據(jù)(SIMD))相對應。
[0029]將多個微線程203_1至203_Υ散播到不同于主線程201_1的ISA的指令集架構(gòu)(ISA)比將多個微指令散播到與主線程相同的ISA更常見。在加速器ISA不同于主線程ISA(例如,GPU)的典型情況下,加速器和主線程在不同的并且隔離的程序存儲器區(qū)域和數(shù)據(jù)存儲器區(qū)域之外執(zhí)行。簡言之,通用CPU核和加速器是各自具有其自身的對應程序代碼和數(shù)據(jù)域的不同的隔離機器。
[0030]對比之下,在其中微線程203_1至203_Y在與主線程201_1相同的ISA上執(zhí)行的情況中,加速器和主線程/通用CPU核之間的顯著更緊密的關(guān)聯(lián)是可能的。例如,參照圖2和圖3,加速器的微線程203_1至203_Υ可在與主線程201_1相同的程序存儲器空間301之外操作。另一種可能性是微線程203_1至203_Υ可使用不僅來自與主線程201_1相同的數(shù)據(jù)存儲器空間302而且可能來自相同的寄存器空間303的數(shù)據(jù)。也就是,加速器可以可想象地至少利用處理主線程201_1的通用CPU指令執(zhí)行流水線的數(shù)據(jù)寄存器303。
[0031]為了支持多線程加速器的調(diào)用,其中與通用CPU相比ISA不改變,應當建立某些語義定義。這些包括用于以下內(nèi)容的定義:i)初始微線程架構(gòu)狀態(tài);ii)微架構(gòu)狀態(tài)的維護;iii)線程調(diào)度;以及iv)最終微線程架構(gòu)狀態(tài)。應當定義用于異常、中斷和違規(guī)的其他語義定義。以下接著討論這些定義中的每個定義。
[0032]微線程初始化、維護、調(diào)度和總結(jié)
[0033]微線程架構(gòu)狀態(tài)的初始化與其中啟動每個微線程的環(huán)境相對應。在其中加速器和通用CPU核緊密關(guān)聯(lián)的實施例中,可以以與子例程由在通用CPU核上作為典型/標準線程來執(zhí)行的主程序調(diào)用的方式相同或類似的方式啟動微線程。這樣,通用CPU核ISA所支持的應用二進制接口(ABI)或嵌入式ABI (EABI)的某些(如果不是全部)方面用于啟動微線程。這樣,主線程調(diào)用加速器的方式和主線程調(diào)用在通用CPU核上執(zhí)行的典型子例程的方式之間存在相似性。
[0034]ABI或EABI本質(zhì)上定義如何進行從第一例程到第二子例程的函數(shù)調(diào)用。ABI或EABI的一部分(以下,簡稱“ABI”)指定用于嵌入式軟件程序的文件格式、數(shù)據(jù)類型、寄存器使用、??蚣芙M織和函數(shù)參數(shù)傳遞的標準慣例。所考慮的另一個因素是通過定義,線程具有其自身的“上下文”,其中上下文與指令、數(shù)據(jù)和控制寄存器和/或存儲器空間內(nèi)的特定值相對應。除非其與在完全相同的數(shù)據(jù)上操作的完全相同的程序相對應,兩個不同的線程被期望在其執(zhí)行過程中具有不同的上下文。在此意義上,加速器的多個微線程可被視為具有其自身對應的上下文的獨立線程。
[0035]這樣,在實施例中,通用CPU核線程對多線程加速器的調(diào)用包括將主線程的上下文的多個實例傳遞到多個加速器線程中的每一個加速器線程,其中與主線程的ISA的ABI相一致地執(zhí)行主線程的上下文的每次傳遞。在一種極端情況下,加速器具有其自身的相關(guān)聯(lián)的寄存器330,包括用于每個單獨微線程的專用寄存器空間,并且主線程的上下文的副本被多次復制331到每個微線程的專用加速器寄存器空間330。在這種情況下,通用CPU核包括用于將主線程的上下文的不同副本復制331到加速器的專用寄存器空間330中的第一邏輯電路310。
[0036]根據(jù)這種相同的方法,當加速器執(zhí)行其任務時,主線程的上下文可后續(xù)被“切換出”通用CPU核。這樣,例如另一個程序的另一個線程可將其上下文切換到通用CPU核中并且在加速器執(zhí)行期間代替其執(zhí)行。
[0037]在另一種極端情況下,加速器的多個微線程中的每個微線程僅可訪問主線程的上下文,因為其位于主CPU核的寄存器空間340中。在這種情況下,主線程的上下文可或可不被切換出主CPU核,取決于設(shè)計者偏好,不管主線程的上下文對加速器微線程是永久地可用還是僅初始地可用。在后一種情況中主線程的上下文可被切換出,如上所述。
[0038]在其中微線程在通用CPU核的寄存器空間303之外操作的情況中,就在加速器代碼的實際調(diào)用之前,主線程執(zhí)行一個或多個分配指令以便在主CPU核寄存器空間303內(nèi)為每個微線程分配棧區(qū)域和主線程的上下文的副本。所分配的棧為每個微線程保留空間以便進行其自身的函數(shù)調(diào)用。
[0039]相對于分配主線程的上下文,加速器的每個微線程在寄存器內(nèi)具有其自身的主線程上下文的副本(為了繪圖簡單,未示出這些副本和加速器和寄存器空間303之間的耦合)。因此,再次,通用CPU核包括用于存儲主線程的上下文的多個副本的邏輯電路310 (盡管在這種情況下不同的副本存儲在通用CPU核的寄存器空間303中)。技術(shù)上講,寄存器空間303對應于執(zhí)行主線程的指令執(zhí)行流水線所使用的操作數(shù)和控制寄存器空間。在此,邏輯電路310可以是用于執(zhí)行分配指令(aloe)的邏輯電路。
[0040]在另一種中間方法中,主線程的上下文被復制到加速器微線程所引用的中間緩沖器或存儲區(qū)域(例如,備用寄存器和/或存儲器空間(未在圖3中示出))。在這種情況下,在其上下文已經(jīng)被寫入中間緩沖器之后,主線程的上下文可被切換出通用CPU核。
[0041]在進一步的實施例中,由于效率,可由邏輯電路310使得主線程的上下文的部分對微線程可用。例如,根據(jù)一種方法,如果加速器不使用具有特定類型的寄存器空間(諸如SMD寄存器空間)的內(nèi)容,不使得該寄存器類型的上下文對微線程可用(例如,不對微代碼提供SMD上下文)。
[0042]在另一個或相關(guān)實施例中,微線程僅從邏輯電路310提供,具有可由ABI標識和/或使用的上下文。在此,相關(guān)的是理解通過ABI進行函數(shù)調(diào)用的動態(tài)。通常,函數(shù)調(diào)用僅將少量“輸入”參數(shù)傳遞到其調(diào)用的子例程。子例程然后執(zhí)行其操作而無需對調(diào)用線程數(shù)據(jù)的任何進一步引用。這樣,僅僅用于將輸入?yún)?shù)傳遞到所調(diào)用的例程的有限寄存器空間集合實際上由ABI利用。因此,ABI可設(shè)置限制或以其他方式標識比調(diào)用線程的整個上下文更小的寄存器子集。
[0043]沿著類似的思路,當主線程調(diào)用加速器及其多個微線程時,主線程的被傳遞到微線程的上下文信息僅與ABI所允許的上下文信息的有限子集相對應。在支持多個不同的ABI的ISA的情況下,寄存器子集可與一個、多于一個或全部ABI相對應,可被選擇為可被傳遞到微線程的允許的上下文集合。這樣,通用CPU核或者重新使用用于為了調(diào)用加速器的目的實現(xiàn)通用CPU核所處理的線程之間的典型子例程函數(shù)調(diào)用的邏輯電路,或者已經(jīng)添加用于實現(xiàn)與ABI —致的加速器的調(diào)用的邏輯電