背景技術(shù):
移動(dòng)和無(wú)線技術(shù)在過(guò)去幾年中已經(jīng)歷了爆炸式增長(zhǎng)。這種增長(zhǎng)是由更好的通信、硬件和更可靠的協(xié)議推動(dòng)的。無(wú)線服務(wù)提供商現(xiàn)在能夠?yàn)槠淇蛻?hù)提供不斷擴(kuò)大的特征和服務(wù)陣容,并向用戶(hù)提供前所未有的對(duì)信息、資源和通信的接入水平。為了跟上這些增強(qiáng)功能,移動(dòng)電子設(shè)備(例如,蜂窩電話、手表、耳機(jī)、遙控器等)已經(jīng)變得比以往更復(fù)雜,并且現(xiàn)在通常包括多個(gè)處理器、片上系統(tǒng)(soc)和允許移動(dòng)設(shè)備用戶(hù)在其移動(dòng)設(shè)備上執(zhí)行復(fù)雜和功率密集的應(yīng)用程序(例如,視頻流式傳輸、視頻處理等)的其它資源。
由于這些和其它改進(jìn),智能電話和平板電腦的普及性已增長(zhǎng),并且正在替代膝上型電腦和臺(tái)式機(jī)作為許多用戶(hù)的選擇平臺(tái)。隨著移動(dòng)設(shè)備的普及性繼續(xù)增長(zhǎng),更好地利用移動(dòng)設(shè)備的多處理能力的、改進(jìn)的處理解決方案對(duì)消費(fèi)者來(lái)說(shuō)將是令人期望的。
技術(shù)實(shí)現(xiàn)要素:
各個(gè)實(shí)施例包括在計(jì)算設(shè)備中執(zhí)行任務(wù)的方法,所述方法可以包括:經(jīng)由所述計(jì)算設(shè)備的任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù)序列;開(kāi)始執(zhí)行所述任務(wù)序列中的第一任務(wù);以及設(shè)置寄存器的值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行,而不將控制轉(zhuǎn)移到所述計(jì)算設(shè)備的運(yùn)行時(shí)系統(tǒng)。在實(shí)施例中,經(jīng)由所述計(jì)算設(shè)備的所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列可以包括:經(jīng)由基于硬件的任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列。在另一實(shí)施例中,所述基于硬件的任務(wù)依賴(lài)性控制器可以是在執(zhí)行所述任務(wù)序列的多個(gè)處理器核心之間共享的硬件組件。
在另一實(shí)施例中,經(jīng)由所述計(jì)算設(shè)備的所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列可以包括:所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù),所述任務(wù)依賴(lài)于一個(gè)前驅(qū)任務(wù)、具有一個(gè)依賴(lài)性后繼任務(wù)、或依賴(lài)于一個(gè)前驅(qū)任務(wù)并且具有一個(gè)依賴(lài)性后繼任務(wù)。在另一實(shí)施例中,設(shè)置所述寄存器的所述值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行可以包括:設(shè)置程序計(jì)數(shù)器和專(zhuān)用處理器前端寄存器的其中之一。在另一實(shí)施例中,經(jīng)由所述計(jì)算設(shè)備的所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列可以包括:所述任務(wù)依賴(lài)性控制器將記錄添加到在硬件中實(shí)現(xiàn)的表。在另一實(shí)施例中,所述計(jì)算設(shè)備的控制器可以包括:將標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)以及所述后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到映射(map)結(jié)構(gòu)的任務(wù)依賴(lài)性控制器。在另一實(shí)施例中,所述任務(wù)依賴(lài)性控制器將所述記錄添加到所述映射結(jié)構(gòu)可以包括:所述任務(wù)依賴(lài)性控制器將所述記錄添加到關(guān)聯(lián)映射結(jié)構(gòu)和直接映射結(jié)構(gòu)的其中之一。
另外的實(shí)施例可以包括計(jì)算設(shè)備,所述計(jì)算設(shè)備包括處理器,所述處理器被配置有處理器可執(zhí)行指令以執(zhí)行可以包括以下各項(xiàng)的操作:經(jīng)由任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù)序列;開(kāi)始執(zhí)行所述任務(wù)序列中的第一任務(wù);以及設(shè)置寄存器的值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行,而不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng)。在實(shí)施例中,所述任務(wù)依賴(lài)性控制器是基于硬件的任務(wù)依賴(lài)性控制器。在另一實(shí)施例中,所述基于硬件的任務(wù)依賴(lài)性控制器是在執(zhí)行所述任務(wù)序列的多個(gè)處理器核心之間共享的。
在另一實(shí)施例中,所述處理器可以被配置有處理器可執(zhí)行指令,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù),所述任務(wù)依賴(lài)于一個(gè)前驅(qū)任務(wù)、具有一個(gè)依賴(lài)性后繼任務(wù)、或具有這兩者。在另一實(shí)施例中,所述處理器可以被配置有處理器可執(zhí)行指令,以使得設(shè)置所述寄存器的所述值包括:設(shè)置程序計(jì)數(shù)器和專(zhuān)用處理器前端寄存器的其中之一,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行。在另一實(shí)施例中,所述處理器可以被配置有處理器可執(zhí)行指令,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:所述任務(wù)依賴(lài)性控制器將記錄添加到在硬件中實(shí)現(xiàn)的表。在另一實(shí)施例中,所述處理器可以被配置有處理器可執(zhí)行指令,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:使所述任務(wù)依賴(lài)性控制器將標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)以及所述后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到從包括關(guān)聯(lián)映射結(jié)構(gòu)和直接映射結(jié)構(gòu)的組中選擇的映射結(jié)構(gòu)。
另外的實(shí)施例包括其上存儲(chǔ)有處理器可執(zhí)行軟件指令的非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述處理器可執(zhí)行軟件指令被配置為使計(jì)算設(shè)備處理器執(zhí)行包括以下各項(xiàng)的操作:經(jīng)由任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù)序列;開(kāi)始執(zhí)行所述任務(wù)序列中的第一任務(wù);以及設(shè)置寄存器的值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行,而不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng)。在實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:經(jīng)由基于硬件的任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列。在另一實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得經(jīng)由所述基于硬件的任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:經(jīng)由由執(zhí)行所述任務(wù)序列的多個(gè)處理器核心共享的硬件組件標(biāo)識(shí)所述任務(wù)序列。
在另一實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù),所述任務(wù)依賴(lài)于一個(gè)前驅(qū)任務(wù)、具有一個(gè)依賴(lài)性后繼任務(wù)、或依賴(lài)于一個(gè)前驅(qū)任務(wù)并且具有一個(gè)依賴(lài)性后繼任務(wù)。在另一實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得設(shè)置所述寄存器的所述值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行包括:設(shè)置程序計(jì)數(shù)器和專(zhuān)用處理器前端寄存器的其中之一。在另一實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:將記錄添加到在硬件中實(shí)現(xiàn)的表。在另一實(shí)施例中,所存儲(chǔ)的處理器可執(zhí)行軟件指令可以被配置為使處理器執(zhí)行操作,以使得經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列包括:將標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)以及所述后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到關(guān)聯(lián)映射結(jié)構(gòu)和直接映射結(jié)構(gòu)的其中之一。
另外的實(shí)施例可以包括計(jì)算設(shè)備,所述計(jì)算設(shè)備包括:用于經(jīng)由任務(wù)依賴(lài)性控制器標(biāo)識(shí)任務(wù)序列的模塊;用于開(kāi)始執(zhí)行所述任務(wù)序列中的第一任務(wù)的模塊;以及用于設(shè)置寄存器的值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行,而不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng)的模塊。在實(shí)施例中,用于經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊可以包括:用于經(jīng)由基于硬件的任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊。在另一實(shí)施例中,用于經(jīng)由所述基于硬件的任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊可以包括:用于經(jīng)由由執(zhí)行所述任務(wù)序列的多個(gè)處理器核心共享的硬件組件標(biāo)識(shí)所述任務(wù)序列的模塊。
在另一實(shí)施例中,用于經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊可以包括:用于標(biāo)識(shí)依賴(lài)于一個(gè)前驅(qū)任務(wù)、具有一個(gè)依賴(lài)性后繼任務(wù)、或兩者的任務(wù)的模塊。在另一實(shí)施例中,用于設(shè)置所述寄存器的值,從而使所述任務(wù)序列中的每個(gè)剩余任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行的模塊可以包括:用于設(shè)置程序計(jì)數(shù)器和專(zhuān)用處理器前端寄存器的其中之一的模塊。在另一實(shí)施例中,用于經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊可以包括:用于將記錄添加到在硬件中實(shí)現(xiàn)的表的模塊。在另一實(shí)施例中,用于經(jīng)由所述任務(wù)依賴(lài)性控制器標(biāo)識(shí)所述任務(wù)序列的模塊可以包括:用于將標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)以及所述后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到映射結(jié)構(gòu)的模塊。在另一實(shí)施例中,用于將所述記錄添加到所述映射結(jié)構(gòu)的模塊可以包括:用于將所述記錄添加到關(guān)聯(lián)映射結(jié)構(gòu)和直接映射結(jié)構(gòu)的其中之一的模塊。
附圖說(shuō)明
并入本文并且構(gòu)成本說(shuō)明書(shū)的一部分的附圖示出了本發(fā)明的示例性實(shí)施例,并且連同上文給出的概括描述和下文給出的詳細(xì)描述一起用于解釋本發(fā)明的特征。
圖1是示出在計(jì)算設(shè)備中執(zhí)行多個(gè)任務(wù)的現(xiàn)有技術(shù)方法的序列圖。
圖2是示出在被配置為使用現(xiàn)有技術(shù)方法執(zhí)行任務(wù)的計(jì)算設(shè)備中的操作和信息流的框圖。
圖3是示出在計(jì)算設(shè)備中執(zhí)行多個(gè)任務(wù)的實(shí)施例方法的序列圖。
圖4-6是示出被配置為使用實(shí)施例方法執(zhí)行任務(wù)的計(jì)算設(shè)備中的操作和信息流的框圖。
圖7是示出根據(jù)實(shí)施例的執(zhí)行任務(wù)的方法的過(guò)程流程圖。
圖8是示出根據(jù)實(shí)施例的更新依賴(lài)性表的任務(wù)依賴(lài)性控制器方法的過(guò)程流程圖。
圖9是適用于實(shí)現(xiàn)各個(gè)實(shí)施例的示例性片上系統(tǒng)的架構(gòu)圖。
圖10是適用于與各個(gè)實(shí)施例一起使用的示例性膝上型計(jì)算機(jī)的框圖。
圖11是適用于與各個(gè)實(shí)施例一起使用的示例性智能電話的框圖。
圖12是適用于與各個(gè)實(shí)施例一起使用的示例性服務(wù)器計(jì)算機(jī)的框圖。
具體實(shí)施方式
將參考附圖詳細(xì)描述各個(gè)實(shí)施例。盡可能地,貫穿附圖將使用相同的附圖標(biāo)記來(lái)指代相同或相似的部分。對(duì)特定示例和實(shí)施方式的引用是出于說(shuō)明性目的,并且并不旨在限制本發(fā)明或權(quán)利要求的范圍。
為了便于參考,下文參照“任務(wù)”和“任務(wù)并行編程模型”描述各個(gè)實(shí)施例。然而,應(yīng)當(dāng)理解,參照“任務(wù)”描述的任何操作也可以由包括受阻的任何并發(fā)編程系統(tǒng)中的線程或任何其它結(jié)構(gòu)、構(gòu)造或表示來(lái)執(zhí)行。因此,除非在權(quán)利要求中明確敘述,否則本申請(qǐng)中不應(yīng)使用任何內(nèi)容來(lái)將權(quán)利要求局限于任務(wù)、線程、任務(wù)并行編程或任何其它系統(tǒng)或技術(shù)。
總而言之,各個(gè)實(shí)施例包括利用由現(xiàn)代多處理器架構(gòu)支持的并發(fā)性和并行性來(lái)生成和執(zhí)行應(yīng)用程序以便實(shí)現(xiàn)快速響應(yīng)時(shí)間、高性能和高用戶(hù)界面響應(yīng)性的方法以及被配置為執(zhí)行所述方法的計(jì)算設(shè)備。計(jì)算設(shè)備(例如,移動(dòng)計(jì)算設(shè)備等)可以被配置為生成和執(zhí)行任務(wù)序列,并且使用任務(wù)依賴(lài)性控制器來(lái)加速控制流從一個(gè)任務(wù)轉(zhuǎn)移到另一個(gè)任務(wù)。任務(wù)依賴(lài)性控制器可以在硬件中實(shí)現(xiàn)并由設(shè)備的多個(gè)核心和/或處理器共享。在實(shí)施例中,設(shè)備處理器和/或任務(wù)依賴(lài)性控制器可以被配置為標(biāo)識(shí)任務(wù)序列,將每個(gè)標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)和后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到基于硬件的表,并且設(shè)置選擇寄存器的值(例如,程序計(jì)數(shù)器、專(zhuān)用處理器前端寄存器等),從而標(biāo)識(shí)任務(wù)序列中的每個(gè)任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后自動(dòng)執(zhí)行(即,不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng))。因此,任務(wù)依賴(lài)性控制器可以用于獨(dú)立于運(yùn)行時(shí)系統(tǒng)和/或在不執(zhí)行常規(guī)解決方案所需的相對(duì)慢和基于存儲(chǔ)器的任務(wù)間、線程間或進(jìn)程間通信的情況下在不同處理器/核心上執(zhí)行的任務(wù)之間轉(zhuǎn)移控制。
換句話說(shuō),任務(wù)依賴(lài)性控制器允許計(jì)算設(shè)備放棄用于調(diào)度、執(zhí)行、進(jìn)行和/或管理任務(wù)序列的標(biāo)準(zhǔn)或常規(guī)操作。結(jié)果,根據(jù)各個(gè)實(shí)施例實(shí)現(xiàn)和使用任務(wù)依賴(lài)性控制器和基于硬件的表減少了與并行執(zhí)行任務(wù)序列相關(guān)聯(lián)的性能延遲,減少或消除起因于錯(cuò)誤的分支預(yù)測(cè)的指令高速緩存污染,消除在由于錯(cuò)誤預(yù)測(cè)的控制流轉(zhuǎn)移而等待要提取的指令時(shí)在處理器流水線中浪費(fèi)的處理器或cpu周期,和/或允許計(jì)算設(shè)備避免針對(duì)錯(cuò)誤預(yù)測(cè)的控制流路徑執(zhí)行操作。出于這些和其它原因,在根據(jù)各個(gè)實(shí)施例配置的計(jì)算設(shè)備中包括和使用任務(wù)依賴(lài)性控制器和基于硬件的表改進(jìn)了設(shè)備的效率、性能和功耗特性。
出于上述原因,各個(gè)實(shí)施例改進(jìn)了計(jì)算設(shè)備的運(yùn)轉(zhuǎn)。對(duì)計(jì)算設(shè)備的功能、功能性和/或運(yùn)轉(zhuǎn)的其它改進(jìn)將從下文提供的實(shí)施例的詳細(xì)描述中顯而易見(jiàn)。
術(shù)語(yǔ)“計(jì)算系統(tǒng)”和“計(jì)算設(shè)備”在本文中通用地用于指代以下項(xiàng)中的任何一個(gè)或全部:服務(wù)器、個(gè)人計(jì)算機(jī)和移動(dòng)計(jì)算設(shè)備,諸如蜂窩電話、智能電話、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)、上網(wǎng)本、超極本、掌上計(jì)算機(jī)、個(gè)人數(shù)據(jù)助理(pda)、無(wú)線電子郵件接收機(jī)、支持多媒體互聯(lián)網(wǎng)的蜂窩電話、全球定位系統(tǒng)(gps)接收機(jī)、無(wú)線游戲控制器以及包括可編程處理器的類(lèi)似個(gè)人電子設(shè)備。雖然各個(gè)實(shí)施例在具有有限的處理功率和電池壽命的移動(dòng)計(jì)算設(shè)備(例如智能電話)中特別有用,但是實(shí)施例在包括可編程處理器的任何計(jì)算設(shè)備中通常是有用的。
術(shù)語(yǔ)“片上系統(tǒng)”(soc)在本文中用于指代包含集成在單個(gè)襯底上的多個(gè)資源和/或處理器的單個(gè)集成電路(ic)芯片。單個(gè)soc可能包含用于數(shù)字、模擬、混合信號(hào)和射頻功能的電路。單個(gè)soc還可以包括任何數(shù)量的通用和/或?qū)S锰幚砥?數(shù)字信號(hào)處理器、調(diào)制解調(diào)器處理器、視頻處理器等)、存儲(chǔ)器塊(例如,rom、ram、閃存等)和資源(例如,定時(shí)器、電壓調(diào)節(jié)器、振蕩器等)。soc還可以包括用于控制集成的資源和處理器以及用于控制外圍設(shè)備的軟件。
術(shù)語(yǔ)“系統(tǒng)級(jí)封裝”(sip)在本文中可以用于指代在兩個(gè)或更多個(gè)ic芯片或襯底上包含多個(gè)資源、計(jì)算單元、核心和/或處理器的單個(gè)模塊或封裝。例如,sip可以包括在其上以垂直配置堆疊多個(gè)ic芯片或半導(dǎo)體管芯的單個(gè)襯底。類(lèi)似地,sip可以包括在其上將多個(gè)ic或半導(dǎo)體管芯封裝到統(tǒng)一襯底中的一個(gè)或多個(gè)多芯片模塊(mcm)。sip還可以包括經(jīng)由高速通信電路耦合在一起并緊密接近地封裝(諸如在單個(gè)主板上或在單個(gè)移動(dòng)計(jì)算設(shè)備中)的多個(gè)獨(dú)立soc。soc的接近性有助于高速通信以及存儲(chǔ)和資源的共享。
術(shù)語(yǔ)“多核處理器”在本文中用于指代包含被配置為讀取和執(zhí)行程序指令的兩個(gè)或更多個(gè)獨(dú)立處理核心(例如,cpu核心、ip核、gpu核心等)的單個(gè)集成電路(ic)芯片或芯片封裝。soc可以包括多個(gè)多核處理器,并且soc中的每個(gè)處理器可以被稱(chēng)為核心。術(shù)語(yǔ)“多處理器”在本文中用于指代包括被配置為讀取和執(zhí)行程序指令的兩個(gè)或更多個(gè)處理單元的系統(tǒng)或設(shè)備。
術(shù)語(yǔ)“程序計(jì)數(shù)器”、“指令指針”和“指令地址寄存器”在本文中可以互換地使用,并且用于指代由處理器用于標(biāo)識(shí)下一個(gè)執(zhí)行指令的存儲(chǔ)器地址的寄存器的值。換句話說(shuō),程序計(jì)數(shù)器“指向”將由處理器執(zhí)行的下一個(gè)指令。這些指令通常是從存儲(chǔ)器中順序地提取的,并且程序計(jì)數(shù)器在每個(gè)提取操作之后遞增?!翱刂妻D(zhuǎn)移”指令通過(guò)將新值(即,新的存儲(chǔ)器位置)插入到寄存器中來(lái)改變?cè)撔蛄校瑥亩鴱牟煌拇鎯?chǔ)器位置提取下一個(gè)指令。
術(shù)語(yǔ)“運(yùn)行時(shí)系統(tǒng)”在本文中用于指代計(jì)算設(shè)備中的資源的組合,其支持指在該設(shè)備中執(zhí)行應(yīng)用程序。例如,運(yùn)行時(shí)系統(tǒng)可以包括計(jì)算設(shè)備的處理資源、操作系統(tǒng)、庫(kù)模塊、調(diào)度器、進(jìn)程、線程、堆棧、計(jì)數(shù)器和/或其它類(lèi)似組件中的全部或部分。運(yùn)行時(shí)系統(tǒng)可以負(fù)責(zé)將計(jì)算資源分配給應(yīng)用程序,以用于控制所分配的資源和用于執(zhí)行應(yīng)用程序的操作。
并行編程運(yùn)行時(shí)系統(tǒng)是支持并發(fā)/并行執(zhí)行一個(gè)或多個(gè)應(yīng)用程序的全部或部分的運(yùn)行時(shí)系統(tǒng)?,F(xiàn)代并行編程運(yùn)行時(shí)系統(tǒng)允許軟件設(shè)計(jì)者創(chuàng)建更好地利用現(xiàn)代處理器架構(gòu)的并發(fā)性和/或并行性能力的高性能并行應(yīng)用程序。軟件設(shè)計(jì)者可以指定將由并行編程運(yùn)行時(shí)系統(tǒng)(例如程序員指定的c/c++函數(shù))執(zhí)行的應(yīng)用程序的部分。運(yùn)行時(shí)系統(tǒng)可以經(jīng)由進(jìn)程、線程或任務(wù)來(lái)執(zhí)行或運(yùn)行一個(gè)或多個(gè)硬件處理單元(例如,處理器、處理核心等)中的部分。
進(jìn)程可以是計(jì)算設(shè)備中的應(yīng)用程序的軟件表示。可以在短時(shí)間片中在處理器上執(zhí)行進(jìn)程,從而看起來(lái)多個(gè)應(yīng)用程序在相同的處理器上同時(shí)運(yùn)行(例如,通過(guò)使用時(shí)分復(fù)用技術(shù)),例如單核處理器。當(dāng)在時(shí)間片結(jié)束時(shí)從處理器移除進(jìn)程時(shí),與進(jìn)程的當(dāng)前操作狀態(tài)有關(guān)的信息(即,進(jìn)程的操作狀態(tài)數(shù)據(jù))存儲(chǔ)在存儲(chǔ)器中,以此進(jìn)程可以在其返回至處理器上的執(zhí)行時(shí)無(wú)縫地恢復(fù)其操作。
進(jìn)程的操作狀態(tài)數(shù)據(jù)可以包括進(jìn)程的地址空間、堆??臻g、虛擬地址空間、寄存器集合映像(例如,程序計(jì)數(shù)器、堆棧指針、指令寄存器、程序狀態(tài)字等)、記賬信息、權(quán)限、訪問(wèn)限制和狀態(tài)信息。狀態(tài)信息可以標(biāo)識(shí)進(jìn)程是處于運(yùn)行狀態(tài)、就緒狀態(tài)或就緒運(yùn)行狀態(tài)還是受阻狀態(tài)。進(jìn)程在其針對(duì)執(zhí)行的所有依賴(lài)性或先決條件得到了滿足(例如,存儲(chǔ)器和資源是可用的等)時(shí)處于就緒運(yùn)行狀態(tài),并且正在等待被指派給下一個(gè)可用的處理單元。進(jìn)程在其過(guò)程由處理單元執(zhí)行時(shí)處于運(yùn)行狀態(tài)。進(jìn)程在其正在等待事件的發(fā)生(例如,輸入/輸出完成事件等)時(shí)處于受阻狀態(tài)。
進(jìn)程可以產(chǎn)生其它進(jìn)程,并且所產(chǎn)生的進(jìn)程(即,子進(jìn)程)可以繼承該產(chǎn)生進(jìn)程(即,父進(jìn)程)的一些權(quán)限和訪問(wèn)限制(即,上下文)。進(jìn)程也可以是包括多個(gè)輕量級(jí)進(jìn)程或線程的重量級(jí)進(jìn)程,這些輕量級(jí)進(jìn)程或線程是與其它進(jìn)程/線程共享其上下文(例如,地址空間、堆棧、權(quán)限和/或訪問(wèn)限制等)中的全部或部分的進(jìn)程。因此,單個(gè)進(jìn)程可以包括共享單個(gè)上下文(例如,處理器、進(jìn)程或應(yīng)用程序的上下文)、具有對(duì)單個(gè)上下文的訪問(wèn)和/或在單個(gè)上下文內(nèi)操作的多個(gè)線程。
多處理器系統(tǒng)可以被配置為并發(fā)或并行地執(zhí)行多個(gè)線程以改進(jìn)進(jìn)程的整體執(zhí)行時(shí)間。另外,計(jì)算系統(tǒng)中的應(yīng)用程序、操作系統(tǒng)、運(yùn)行時(shí)系統(tǒng)、調(diào)度器或另一組件可以被配置為基于各種因素或考慮來(lái)創(chuàng)建、銷(xiāo)毀、維護(hù)、管理、調(diào)度或執(zhí)行線程。例如,為了提高并行性,系統(tǒng)可以被配置為為可以與另一操作序列并發(fā)執(zhí)行的每個(gè)操作序列創(chuàng)建線程。
維護(hù)大量空閑線程或頻繁銷(xiāo)毀和創(chuàng)建新線程的應(yīng)用程序通常對(duì)計(jì)算設(shè)備的響應(yīng)性、性能或功耗特性具有顯著的負(fù)面或用戶(hù)可察覺(jué)的影響。因此,應(yīng)用程序可以實(shí)現(xiàn)或使用提供足夠的并行水平的任務(wù)并行編程模型或解決方案,而不需要?jiǎng)?chuàng)建或維護(hù)大量的線程。這種解決方案允許計(jì)算系統(tǒng)將應(yīng)用程序的計(jì)算劃分成任務(wù),將任務(wù)指派給維護(hù)近乎恒定數(shù)量的線程的線程池(例如,每個(gè)處理單元一個(gè)線程),并且經(jīng)由線程池的線程執(zhí)行所指派的任務(wù)。計(jì)算系統(tǒng)的進(jìn)程調(diào)度器或運(yùn)行時(shí)系統(tǒng)可以調(diào)度任務(wù)以便在處理單元上執(zhí)行,其類(lèi)似于可以如何調(diào)度進(jìn)程和線程以便執(zhí)行。
任務(wù)可以包括可以經(jīng)由線程在處理單元中執(zhí)行的任何過(guò)程、工作單元或操作序列。任務(wù)可以包括標(biāo)識(shí)任務(wù)是啟動(dòng)、就緒、受阻還是完成的狀態(tài)信息。任務(wù)在其已被指派給線程池時(shí)處于啟動(dòng)狀態(tài),并且正在等待前驅(qū)任務(wù)完成執(zhí)行和/或等待執(zhí)行的其它依賴(lài)性或先決條件得到滿足。任務(wù)在其針對(duì)執(zhí)行的所有依賴(lài)性或先決條件得到了滿足(例如,所有其前驅(qū)已完成執(zhí)行)時(shí)處于就緒狀態(tài),并且正在等待被指派給下一個(gè)可用的線程。任務(wù)在其(或其相關(guān)聯(lián)的線程)正在等待依賴(lài)性被解析、資源變?yōu)榭捎?、系統(tǒng)調(diào)用以返回、對(duì)系統(tǒng)請(qǐng)求的響應(yīng)時(shí)處于受阻狀態(tài)。任務(wù)可以在其過(guò)程已經(jīng)由線程執(zhí)行之后或在被取消之后被標(biāo)記為完成。
任務(wù)可以依賴(lài)于其它任務(wù),并且每個(gè)任務(wù)可以在其所依賴(lài)的所有任務(wù)(前驅(qū)任務(wù))一完成執(zhí)行時(shí)就執(zhí)行。例如,如果任務(wù)c依賴(lài)于任務(wù)a和b,則任務(wù)c可以在任務(wù)a和b一完成執(zhí)行時(shí)就進(jìn)入“就緒”狀態(tài)。隨后,運(yùn)行時(shí)系統(tǒng)或任務(wù)調(diào)度器可以將下一個(gè)可用線程指派給準(zhǔn)備好執(zhí)行的下一個(gè)任務(wù)(在這種情況下為任務(wù)c)。
通常,存在任務(wù)序列(或鏈),其中序列中的每個(gè)任務(wù)依賴(lài)于僅一個(gè)前驅(qū)任務(wù)。例如,任務(wù)c可以?xún)H依賴(lài)于任務(wù)b,任務(wù)b可以?xún)H依賴(lài)于任務(wù)a。運(yùn)行時(shí)系統(tǒng)可以在不執(zhí)行復(fù)雜調(diào)度操作的情況下順序地執(zhí)行該任務(wù)鏈(即,a→b→c)。也就是說(shuō),由于任務(wù)b僅依賴(lài)于任務(wù)a,所以設(shè)備處理器可以在任務(wù)a完成執(zhí)行后立即自動(dòng)地開(kāi)始執(zhí)行任務(wù)b的過(guò)程,而不會(huì)導(dǎo)致系統(tǒng)運(yùn)轉(zhuǎn)不正常。
圖1示出了用于在計(jì)算設(shè)備中執(zhí)行任務(wù)a、b和c的序列的現(xiàn)有技術(shù)方法100。在框102中,計(jì)算設(shè)備的處理核心可以執(zhí)行任務(wù)a的過(guò)程到完成(即,直到任務(wù)a被標(biāo)記為“完成7”)。在框104中,計(jì)算設(shè)備的運(yùn)行時(shí)系統(tǒng)可以執(zhí)行控制流操作的各種調(diào)度或轉(zhuǎn)移,其可以包括確定任務(wù)b的依賴(lài)性是否已被解析。在框106中,處理核心可以執(zhí)行任務(wù)b的過(guò)程到完成。在框108中,運(yùn)行時(shí)系統(tǒng)可以執(zhí)行控制流操作的附加調(diào)度或轉(zhuǎn)移,例如確定任務(wù)c的依賴(lài)性是否已被解析。在框110中,處理核心可以執(zhí)行任務(wù)c的過(guò)程到完成。
常規(guī)解決方案不會(huì)智能地標(biāo)識(shí)任務(wù)的序列或鏈,并且因此需要在每次任務(wù)開(kāi)始或完成執(zhí)行時(shí)執(zhí)行多個(gè)相對(duì)復(fù)雜且功率密集的調(diào)度和“控制流的轉(zhuǎn)移”操作。例如,在正常操作期間,常規(guī)運(yùn)行時(shí)系統(tǒng)可以啟動(dòng)任務(wù)a,開(kāi)始執(zhí)行任務(wù)a的過(guò)程,確定任務(wù)a已經(jīng)完成執(zhí)行,加載任務(wù)b,確定任務(wù)b依賴(lài)性是否被解析(例如,通過(guò)確定是否所有任務(wù)b的前驅(qū)任務(wù)已完成執(zhí)行等),響應(yīng)與確定任務(wù)b依賴(lài)性已被解析而將任務(wù)b標(biāo)記為“就緒”,將任務(wù)b添加到就緒隊(duì)列中,并指派線程來(lái)執(zhí)行就緒隊(duì)列中的下一個(gè)任務(wù)。雖然在存在多個(gè)或復(fù)雜的任務(wù)依賴(lài)性時(shí)這些操作可能是必要的,但是針對(duì)上述的任務(wù)的序列或鏈執(zhí)行這些操作是對(duì)計(jì)算設(shè)備的存儲(chǔ)器、電池和處理器資源的低效使用。
圖2示出了在計(jì)算設(shè)備中執(zhí)行任務(wù)a和b的現(xiàn)有技術(shù)方法200。在圖2中所示的示例中,任務(wù)a在時(shí)間1經(jīng)由計(jì)算設(shè)備的處理核心開(kāi)始執(zhí)行其過(guò)程。在時(shí)間5,任務(wù)a完成執(zhí)行其過(guò)程,并向計(jì)算設(shè)備的運(yùn)行時(shí)間控制器發(fā)送第一信號(hào)(s1)。運(yùn)行時(shí)控制器可以是計(jì)算設(shè)備的運(yùn)行時(shí)系統(tǒng)的一部分,并且負(fù)責(zé)確定任務(wù)依賴(lài)性是否已被解析。第一信號(hào)(s1)可以包括任務(wù)標(biāo)識(shí)符(taskid)和指示任務(wù)a的執(zhí)行已完成的消息。響應(yīng)于接收到第一信號(hào)(及其消息),運(yùn)行時(shí)控制器可以執(zhí)行第一計(jì)算(c1),使用第一計(jì)算(c1)來(lái)標(biāo)識(shí)作為任務(wù)a完成其執(zhí)行的結(jié)果進(jìn)入就緒狀態(tài)的任務(wù),并標(biāo)識(shí)最適合在核心中執(zhí)行的就緒任務(wù)。在所示示例中,運(yùn)行時(shí)控制器將任務(wù)b標(biāo)識(shí)為最適合在核心中執(zhí)行的任務(wù)。
響應(yīng)于將任務(wù)b標(biāo)識(shí)為最適合于在處理核心中執(zhí)行,運(yùn)行時(shí)間控制器可以向處理核心發(fā)送第二信號(hào)(s2)。第二信號(hào)(s2)可以包括與任務(wù)b相關(guān)聯(lián)的任務(wù)標(biāo)識(shí)符和程序計(jì)數(shù)器。在時(shí)間7,任務(wù)b經(jīng)由計(jì)算設(shè)備的處理核心開(kāi)始執(zhí)行其過(guò)程。在時(shí)間9,任務(wù)b完成執(zhí)行其過(guò)程。
核心的從發(fā)起信號(hào)s1到接收信號(hào)s2的往返延遲(即,時(shí)間5與時(shí)間7之間的時(shí)段)構(gòu)成降低核心的性能的執(zhí)行開(kāi)銷(xiāo)(executionoverhead)。除了該往返延遲之外,由于上述任何或所有原因(例如,浪費(fèi)的cpu周期、指令高速緩存污染等),方法200可能對(duì)性能和功耗特性具有負(fù)面影響。
各個(gè)實(shí)施例通過(guò)以下方式來(lái)克服現(xiàn)有解決方案的限制:配置計(jì)算設(shè)備以智能地標(biāo)識(shí)任務(wù)鏈,其中在任務(wù)鏈中,每個(gè)任務(wù)依賴(lài)于一個(gè)前驅(qū)任務(wù)和/或具有一個(gè)依賴(lài)性后繼任務(wù),以及當(dāng)執(zhí)行包括在標(biāo)識(shí)的鏈中的任務(wù)時(shí)放棄執(zhí)行調(diào)度或“控制流的轉(zhuǎn)移”操作。這加速了在鏈中的任務(wù)之間的控制流的轉(zhuǎn)移(例如,從任務(wù)a到任務(wù)b),結(jié)果提高了在計(jì)算設(shè)備中執(zhí)行任務(wù)并行程序的性能和能效。這還通過(guò)允許計(jì)算設(shè)備更快且更有效地執(zhí)行應(yīng)用程序來(lái)改進(jìn)計(jì)算設(shè)備的運(yùn)轉(zhuǎn)。
圖3示出了在根據(jù)各個(gè)實(shí)施例配置的計(jì)算設(shè)備中執(zhí)行任務(wù)序列(即,任務(wù)a、b和c)的方法300。在框302中,計(jì)算設(shè)備的處理核心可以執(zhí)行任務(wù)a的過(guò)程到完成。幾乎立即在任務(wù)a被標(biāo)記為完成之后,處理核心可以在框304中開(kāi)始執(zhí)行任務(wù)b的過(guò)程。這可以在不執(zhí)行相對(duì)復(fù)雜且功率密集的調(diào)度和/或控制流操作(例如,圖1a中所示的框104的操作等)的轉(zhuǎn)移的情況下實(shí)現(xiàn)。類(lèi)似地,在框306中,處理核心可以在任務(wù)b被標(biāo)記為完成之后幾乎立即開(kāi)始執(zhí)行任務(wù)c的過(guò)程。通過(guò)消除運(yùn)行時(shí)系統(tǒng)的調(diào)度和控制操作的轉(zhuǎn)移(例如,圖1a中所示的框104和108的操作),各個(gè)實(shí)施例改進(jìn)了計(jì)算設(shè)備的性能和功耗特性。
舉另一示例,考慮任務(wù)鏈a→b→…→y→z。實(shí)施例計(jì)算設(shè)備可以如下控制任務(wù)流:
start_pc(a)→…end_pc(a)→
start_pc(b)→…end_pc(b)→
…
start_pc(y)→…end_pc(y)→
start_pc(z)→…end_pc(z)
也就是說(shuō),實(shí)施例計(jì)算設(shè)備可以為序列(a→b→…→y→z)中的每個(gè)任務(wù)設(shè)置起始程序計(jì)數(shù)器(start_pc)和結(jié)束程序計(jì)數(shù)器(end_pc)的值,從而使運(yùn)行時(shí)系統(tǒng)在其前驅(qū)任務(wù)完成執(zhí)行之后立即執(zhí)行每個(gè)后繼任務(wù)??刂茝囊粋€(gè)任務(wù)流向另一個(gè)任務(wù),而無(wú)需任務(wù)運(yùn)行時(shí)系統(tǒng)確定任務(wù)的依賴(lài)性是否已被解析。這改進(jìn)了計(jì)算設(shè)備的性能和功耗特性。
在實(shí)施例中,計(jì)算設(shè)備可以配備有基于硬件的任務(wù)依賴(lài)性控制器(tdc),并且計(jì)算設(shè)備的指令集架構(gòu)(isa)可以被修改為允許軟件應(yīng)用與任務(wù)依賴(lài)性控制器通信。例如,計(jì)算設(shè)備的指令集架構(gòu)可以被修改為支持以下指令:
(i1)id=task_get_id
//返回唯一的id
(i2)success=task_add_depid_a,id_b,b.pc
//通知tdc依賴(lài)性已針對(duì)任務(wù)a被添加到
//任務(wù)b,并且在注冊(cè)任務(wù)b中的第一指令的程序計(jì)數(shù)器
//可選地返回一值以指示任務(wù)
//依賴(lài)性是否被成功地添加
(i3)task_startid
//通知具有指定id的任務(wù)已開(kāi)始執(zhí)行
(l4)task_finishid
//通知具有指定id的任務(wù)已完成執(zhí)行,并且
//釋放id
在實(shí)施例中,任務(wù)依賴(lài)性控制器可以包括基于硬件的表,該表可以基于運(yùn)行時(shí)系統(tǒng)使用硬件還是軟件來(lái)生成、定義和指派任務(wù)標(biāo)識(shí)符(“任務(wù)id”)而被實(shí)現(xiàn)為關(guān)聯(lián)映射結(jié)構(gòu)或直接映射結(jié)構(gòu)。例如,硬件表可以被實(shí)現(xiàn)為在經(jīng)由硬件定義任務(wù)id的計(jì)算系統(tǒng)中的關(guān)聯(lián)映射結(jié)構(gòu)或直接映射結(jié)構(gòu),以及實(shí)現(xiàn)為在經(jīng)由軟件定義任務(wù)id的計(jì)算系統(tǒng)中的關(guān)聯(lián)映射結(jié)構(gòu)。
關(guān)聯(lián)映射表可以被如下定義:
表1(關(guān)聯(lián)映射)
(c1)valid//該條目有效?
(c2)pred//任務(wù)a的id,如果a→b
(c3)succ//任務(wù)b的id,如果a→b
(c4)succ_pc//任務(wù)b的程序計(jì)數(shù)器,如果a->b
在上述示例中,表1包括有效性參數(shù)(例如,valid)、前驅(qū)參數(shù)(例如,pred)、后繼參數(shù)(例如,succ)和后繼程序計(jì)數(shù)器參數(shù)(例如,succ_pc)。有效性參數(shù)(例如,valid)可以包括指示記錄是否有效的二進(jìn)制或布爾值。前驅(qū)參數(shù)(例如,pred)可以包括標(biāo)識(shí)前驅(qū)任務(wù)的值。后繼參數(shù)(例如,succ)可以包括標(biāo)識(shí)后繼任務(wù)的值。后繼程序計(jì)數(shù)器參數(shù)(例如,succ_pc)可以包括標(biāo)識(shí)包括后繼任務(wù)的開(kāi)始指令的位置或寄存器的值(例如,用于啟動(dòng)后繼任務(wù)、開(kāi)始執(zhí)行后繼任務(wù)的過(guò)程的指令等)。
替代地,任務(wù)依賴(lài)性控制器可以將硬件表實(shí)現(xiàn)為直接映射,并且使用前驅(qū)任務(wù)的“任務(wù)id”作為到直接映射的索引。例如,任務(wù)依賴(lài)性控制器可以包括如下定義的硬件表:
表2(直接映射)
(c1)valid//該條目有效?
(c2)succ//任務(wù)b的id,如果a→b
(c3)succ_pc//任務(wù)b的程序計(jì)數(shù)器,如果a→b
用于訪問(wèn)映射條目的行索引//任務(wù)a的id,如果a→b
計(jì)算設(shè)備的應(yīng)用程序開(kāi)發(fā)者或編譯器可以將任何或所有上述指令集架構(gòu)指令(例如,指令i1-i4)插入在實(shí)現(xiàn)任務(wù)并行編程模型的軟件應(yīng)用的執(zhí)行路徑中。這種軟件應(yīng)用可能包括以下示例源代碼:
(1)a=create_task([]
{id_a=getid();task_startid_a;…task_finishid_a;})
(2)b=create_task([]
{id_b=getid();task_startid_b;…task_finishid_b;})
(3)c=create_task([]
{id_c=getid();task_startid_c;…task_finishid_c;})
(4)add_dependence(a,b)
(5)a.id=task_get_id
(6)b.id=task_get_id
(7)task_add_depa.id,b.id,b.pc
(8)add_dependence(a,b)
(9)c.id=task_get_id
(10)task_add_depb.id,c.id,c.pc
(11)launch(c)
(12)launch(b)
(13)launch(a)
參照上述示例,當(dāng)設(shè)備處理器執(zhí)行操作7(即,“task_add_depa.id,b.id,b.pc”)時(shí),任務(wù)依賴(lài)性控制器針對(duì)該依賴(lài)性關(guān)系生成、添加或分配表(例如,表1)的記錄。這樣的記錄可以包括前驅(qū)任務(wù)的標(biāo)識(shí)符(即,“pred=id_a”)、后繼任務(wù)的標(biāo)識(shí)符(即,“succ=id_b”)和后繼任務(wù)的第一指令的存儲(chǔ)器位置(即,“succ_pc=b.pc”或“succ_pc=0xd00bl05”)。
當(dāng)設(shè)備處理器執(zhí)行指令i3(即,task_startid)以啟動(dòng)任務(wù)(例如,任務(wù)a)時(shí),任務(wù)依賴(lài)性控制器向表查詢(xún)將該任務(wù)標(biāo)識(shí)為前驅(qū)任務(wù)(即,“pred=id_a”)的記錄。隨后,任務(wù)依賴(lài)性控制器可以告知指令預(yù)取器和/或分支預(yù)測(cè)器分支(或執(zhí)行“控制轉(zhuǎn)移”)到由程序計(jì)數(shù)器參數(shù)(succ_pc)標(biāo)識(shí)的位置/指令的意圖。這將使得處理器在完成當(dāng)前任務(wù)(例如,任務(wù)a)的過(guò)程之后執(zhí)行后繼任務(wù)(例如,任務(wù)b)。
在另一實(shí)施例中,后繼程序計(jì)數(shù)器參數(shù)(succ_pc)的值可以被寫(xiě)入處理器前端中的寄存器,從而當(dāng)執(zhí)行或進(jìn)行指令i4(即,task_finishid)時(shí),控制流直接跳轉(zhuǎn)到由該寄存器標(biāo)識(shí)的位置。在實(shí)施例中,計(jì)算設(shè)備可以配備有明確使用并且明確用于這些目的(例如,用于直接控制流跳轉(zhuǎn)到與后繼任務(wù)相關(guān)聯(lián)的存儲(chǔ)器/指令位置)的寄存器。
如果任務(wù)b具有多個(gè)前驅(qū)任務(wù)(例如,a→b和d→b),則設(shè)備處理器在為任務(wù)a執(zhí)行指令i4(即,task_finishid)之后開(kāi)始執(zhí)行任務(wù)b可能在操作上不是正確的。這是因?yàn)槿蝿?wù)b依賴(lài)于其它任務(wù)(例如,任務(wù)d),這些其它任務(wù)在指令i4(即,task_finishid)被執(zhí)行時(shí)可能尚未完成執(zhí)行。為了克服這種情況,當(dāng)依賴(lài)性關(guān)系被添加到表中(例如,經(jīng)由指令i2)時(shí),任務(wù)依賴(lài)性控制器可以查詢(xún)表以確定任何記錄是否將當(dāng)前任務(wù)(例如,任務(wù)b)標(biāo)識(shí)為后繼任務(wù)(例如,“succ=id_b”)。響應(yīng)于確定表包括將當(dāng)前任務(wù)標(biāo)識(shí)為后繼任務(wù)的記錄(例如,“succ=id_b”),任務(wù)依賴(lài)性控制器可以從硬件表中刪除記錄和/或?qū)⒃撚涗浀挠行詤?shù)的值設(shè)置為“false”(例如,“valid=0”)。
類(lèi)似地,如果任務(wù)a具有多個(gè)后繼任務(wù)(例如,a→b和a→d),則以信號(hào)形式通知在指令i4(即,task_finishid)被執(zhí)行之后所有這些前驅(qū)任務(wù)可以開(kāi)始執(zhí)行可能在操作上不是正確的。為了克服這種情況,當(dāng)依賴(lài)性關(guān)系被添加到表(例如,經(jīng)由指令i2)時(shí),任務(wù)依賴(lài)性控制器可以查詢(xún)表以確定任何記錄是否將當(dāng)前任務(wù)標(biāo)識(shí)為其前驅(qū)(例如,“pred=id_a”)。響應(yīng)于確定表包括將當(dāng)前任務(wù)標(biāo)識(shí)為前驅(qū)任務(wù)的記錄(例如,“pred=id_a”),任務(wù)依賴(lài)性控制器可以從硬件表中刪除記錄和/或?qū)⒃撚涗浀挠行詤?shù)設(shè)置為“false”(例如,“valid=0”)。
通過(guò)執(zhí)行上述操作,計(jì)算設(shè)備可以通過(guò)確定每個(gè)任務(wù)是否包括單個(gè)后繼任務(wù)和/或單個(gè)前驅(qū)任務(wù)來(lái)標(biāo)識(shí)任務(wù)鏈。這允許計(jì)算設(shè)備順序地執(zhí)行任務(wù)鏈,并且智能地確定是否在任務(wù)之間轉(zhuǎn)移控制時(shí)放棄執(zhí)行常規(guī)操作。換句話說(shuō),當(dāng)?shù)谝蝗蝿?wù)(例如,任務(wù)a)和第二任務(wù)(例如任務(wù)b)屬于任務(wù)的序列或鏈,計(jì)算設(shè)備可以在從第一任務(wù)轉(zhuǎn)換到第二任務(wù)時(shí)將控制流“短路”,并且當(dāng)?shù)谝蝗蝿?wù)和第二任務(wù)不屬于相同的任務(wù)的序列或鏈時(shí),使用常規(guī)解決方案。這確保軟件應(yīng)用的正確操作,并且改進(jìn)了計(jì)算設(shè)備的性能和功耗特性。
通過(guò)使用在由多個(gè)處理核心共享的硬件中實(shí)現(xiàn)的任務(wù)依賴(lài)性控制器和基于硬件的表(例如,經(jīng)由硬件實(shí)現(xiàn)的表或映射結(jié)構(gòu)),計(jì)算設(shè)備可以改進(jìn)對(duì)于任務(wù)依賴(lài)性控制器的查詢(xún)的性能和效率(即,相對(duì)于常規(guī)解決方案而言,其中在常規(guī)解決方案中,任務(wù)依賴(lài)性控制器主要是在系統(tǒng)的核心中的一個(gè)核心上運(yùn)行的運(yùn)行時(shí)代碼的部分,這要求在不同的核心上運(yùn)行的任務(wù)經(jīng)由共享存儲(chǔ)器進(jìn)行通信)。
圖4示出了根據(jù)實(shí)施例的、在計(jì)算設(shè)備中執(zhí)行任務(wù)a和b的方法400。在圖4中所示的示例中,在時(shí)間1,任務(wù)a經(jīng)由計(jì)算設(shè)備的處理核心開(kāi)始執(zhí)行其過(guò)程。此外在時(shí)間1,任務(wù)a向任務(wù)依賴(lài)性控制器發(fā)送信號(hào)(s3)。該信號(hào)(s3)可包括任務(wù)id和指示任務(wù)a已經(jīng)開(kāi)始執(zhí)行其過(guò)程的消息(例如,單個(gè)比特等)。在發(fā)送信號(hào)(s3)之后,核心可以繼續(xù)執(zhí)行任務(wù)a的過(guò)程,而無(wú)需等待來(lái)自任務(wù)依賴(lài)性控制器的響應(yīng)。
響應(yīng)于接收到信號(hào)s3,任務(wù)依賴(lài)性控制器可以執(zhí)行減少的計(jì)算(c2),諸如在硬件表中的查找,以確定將由核心執(zhí)行的下一任務(wù)的程序計(jì)數(shù)器。任務(wù)依賴(lài)性控制器可以與在處理核心中執(zhí)行任務(wù)a并發(fā)或并行地執(zhí)行減少的計(jì)算(c2)。
在執(zhí)行減少的計(jì)算c2之后,任務(wù)依賴(lài)性控制器可以向核心(或計(jì)算設(shè)備中的另一處理器或核心)發(fā)送另一信號(hào)(s4)。信號(hào)s4可以包括程序計(jì)數(shù)器(例如,經(jīng)由硬件表標(biāo)識(shí)的值)。計(jì)算設(shè)備可以將程序計(jì)數(shù)器值寫(xiě)入到在核心中的“鏈接寄存器”,同時(shí)核心繼續(xù)執(zhí)行任務(wù)a和/或不對(duì)任務(wù)a的過(guò)程的性能具有顯著或負(fù)面的影響。
因此,在圖4中所示的示例中,可以生成、處理和傳送信號(hào)s3和s4,并且可以執(zhí)行減少的計(jì)算c2,而不對(duì)任務(wù)a的過(guò)程的性能具有顯著或負(fù)面的影響。結(jié)果,方法400減少了由核心執(zhí)行的操作的延遲。此外,在核心完成任務(wù)的時(shí)候,核心已具有在鏈接寄存器中可用的、任務(wù)b中的第一個(gè)指令的程序計(jì)數(shù)器。這允許控制流自然地轉(zhuǎn)移回任務(wù)b和允許在任務(wù)a完成其執(zhí)行之后任務(wù)b幾乎立即開(kāi)始執(zhí)行其執(zhí)行。結(jié)果,任務(wù)b在時(shí)間7完成其執(zhí)行(對(duì)比于時(shí)間9,當(dāng)執(zhí)行圖2中所示的方法200時(shí))。
圖5和圖6示出了在被配置為分別使用單個(gè)鏈接寄存器和鏈接陣列的計(jì)算設(shè)備中執(zhí)行任務(wù)a和b的實(shí)施例方法500、600。鏈路陣列可以包括多個(gè)鏈路寄存器,并且可以減少加速依賴(lài)任務(wù)鏈a->b->c->d所需的信令量,并在任務(wù)實(shí)際完成執(zhí)行之前,允許任務(wù)依賴(lài)性控制器在處理整個(gè)鏈之后對(duì)其自身斷電。如圖5所示,當(dāng)任務(wù)依賴(lài)性控制器接收到任務(wù)a已經(jīng)開(kāi)始執(zhí)行的信號(hào)時(shí),任務(wù)依賴(lài)性控制器在硬件表中執(zhí)行一系列查找,以標(biāo)識(shí)任務(wù)b、c、d的下一序列的起始程序計(jì)數(shù)器。隨后,將其已經(jīng)標(biāo)識(shí)為后繼鏈的任務(wù)的程序計(jì)數(shù)器按順序?qū)懭腈溄雨嚵?。在?zhí)行這些操作之后,任務(wù)依賴(lài)性控制器可以進(jìn)入休眠以節(jié)省電力。另一方面,在圖6中所示的示例中,當(dāng)接下來(lái)的任務(wù)開(kāi)始執(zhí)行時(shí)(例如,b.start、c.start等),核心不向任務(wù)依賴(lài)性控制器發(fā)送信號(hào),因?yàn)榭刂屏鞯竭@些任務(wù)的轉(zhuǎn)移已經(jīng)被任務(wù)依賴(lài)性控制器優(yōu)化,如通過(guò)使用鏈接陣列值所指示的,來(lái)轉(zhuǎn)移控制。當(dāng)任務(wù)d開(kāi)始執(zhí)行時(shí),其向任務(wù)依賴(lài)性控制器發(fā)送信號(hào),該任務(wù)依賴(lài)性控制器被該信號(hào)喚醒。
圖7示出了根據(jù)實(shí)施例的、執(zhí)行任務(wù)的方法700。在框702中,計(jì)算設(shè)備的處理器可以經(jīng)由計(jì)算設(shè)備的基于硬件的任務(wù)依賴(lài)性控制器來(lái)標(biāo)識(shí)任務(wù)序列。在框704中,處理器可以開(kāi)始執(zhí)行序列中的第一任務(wù)。在框706中,處理器可以設(shè)置寄存器(例如,程序計(jì)數(shù)器)的值,從而使序列中的每個(gè)任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后執(zhí)行,而不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng)。在一個(gè)實(shí)施例中,處理器可以被配置為在706的操作之后執(zhí)行框704的操作。
圖8示出了將依賴(lài)關(guān)系添加到由計(jì)算設(shè)備的任務(wù)依賴(lài)性控制器維護(hù)的表的方法800。在框802中,計(jì)算設(shè)備的任務(wù)依賴(lài)性控制器可以生成、添加和/或分配表的記錄以標(biāo)識(shí)兩個(gè)任務(wù)之間的依賴(lài)關(guān)系。該記錄可以標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)和后繼任務(wù)的程序計(jì)數(shù)器。在框804中,任務(wù)依賴(lài)性控制器可以遍歷表以確定一個(gè)或多個(gè)任務(wù)是否具有多個(gè)前驅(qū)或多個(gè)后繼。在框806中,響應(yīng)于確定任務(wù)具有多個(gè)前驅(qū)或多個(gè)后繼,任務(wù)依賴(lài)性控制器可以從表中刪除該記錄。
圖9根據(jù)各個(gè)實(shí)施例,示出了可以包括在被配置為執(zhí)行實(shí)現(xiàn)任務(wù)并行編程模型的應(yīng)用程序和/或執(zhí)行任務(wù)的計(jì)算設(shè)備中的示例片上系統(tǒng)(soc)900架構(gòu)。soc900可以包括多個(gè)異構(gòu)處理器,諸如數(shù)字信號(hào)處理器(dsp)902、調(diào)制解調(diào)器處理器904、圖形處理器906和應(yīng)用處理器908。soc900還可以包括連接到一個(gè)或多個(gè)異構(gòu)處理器902、904、906、908的一個(gè)或多個(gè)協(xié)處理器910(矢量協(xié)處理器)。在一個(gè)實(shí)施例中,圖形處理器906可以是圖形處理單元(gpu)。
每個(gè)處理器902、904、906、908、910可以包括一個(gè)或多個(gè)核心(例如,應(yīng)用處理器908中所示的處理核心908a、908b、908c和908d),并且每個(gè)處理器/核心可以獨(dú)立于其它處理器/核心執(zhí)行操作。soc900可以包括執(zhí)行操作系統(tǒng)(例如,freebsd、linux、osx、microsoftwindows10等)的處理器,其可以包括被配置為將諸如線程、進(jìn)程或數(shù)據(jù)流之類(lèi)的指令的序列調(diào)度到一個(gè)或多個(gè)處理核心以便執(zhí)行的調(diào)度器。在一個(gè)實(shí)施例中,應(yīng)用處理器908可以是中央處理單元(cpu)。
soc900還可以包括在硬件中實(shí)現(xiàn)的基于硬件的任務(wù)依賴(lài)性控制器930和基于硬件的表932?;谟布娜蝿?wù)依賴(lài)性控制器930可以由多個(gè)核心(例如,在應(yīng)用處理器908中所示的處理核心908a、908b、908c和908d)和/或由多個(gè)處理器902、904、906、908、910共享。在一些實(shí)施例中,基于硬件的任務(wù)依賴(lài)性控制器930和/或基于硬件的表932可以使用邏輯門(mén)(例如,nand、and、or、xor、aoi、oai等)來(lái)實(shí)現(xiàn),這些邏輯門(mén)通常包括被配置或被安排為實(shí)現(xiàn)布爾函數(shù)的一個(gè)或多個(gè)場(chǎng)效應(yīng)晶體管(fet)。還可以使用包括各種硬件組件(例如繼電器、閥、晶體管、復(fù)用器、寄存器、存儲(chǔ)器、算術(shù)邏輯單元(alu)、處理器等)的邏輯電路來(lái)實(shí)現(xiàn)基于硬件的任務(wù)依賴(lài)性控制器930和/或基于硬件的表932。
任務(wù)依賴(lài)性控制器930可以用于放棄用于調(diào)度標(biāo)識(shí)的任務(wù)序列的標(biāo)準(zhǔn)操作,以便減少與在多個(gè)核心上并行執(zhí)行任務(wù)序列相關(guān)聯(lián)的性能延遲。例如,任務(wù)依賴(lài)性控制器930可以標(biāo)識(shí)任務(wù)序列,將每個(gè)標(biāo)識(shí)前驅(qū)任務(wù)、后繼任務(wù)和后繼任務(wù)的程序計(jì)數(shù)器的記錄添加到基于硬件的表932,并且設(shè)置選擇寄存器(例如,程序計(jì)數(shù)器、專(zhuān)用處理器前端寄存器等)的值,從而所標(biāo)識(shí)序列中的每個(gè)任務(wù)在其前驅(qū)任務(wù)完成執(zhí)行之后自動(dòng)執(zhí)行(即,不將控制轉(zhuǎn)移到運(yùn)行時(shí)系統(tǒng))。這通過(guò)消除常規(guī)解決方案經(jīng)由運(yùn)行時(shí)系統(tǒng)執(zhí)行的一些指令來(lái)改進(jìn)soc900的效率、性能和功耗特征。例如,任務(wù)依賴(lài)性控制器930可以用于在不同處理器/核心上執(zhí)行的任務(wù)之間轉(zhuǎn)移控制,而無(wú)需執(zhí)行傳統(tǒng)解決方案所需的相對(duì)慢和基于存儲(chǔ)器的任務(wù)間、線程間或進(jìn)程間通信。
soc900還可以包括用于管理傳感器數(shù)據(jù)、模數(shù)轉(zhuǎn)換、無(wú)線數(shù)據(jù)傳輸以及用于執(zhí)行其它專(zhuān)門(mén)操作(例如處理編碼的音頻和視頻信號(hào)以在網(wǎng)頁(yè)瀏覽器中呈現(xiàn))的模擬電路和定制電路914。soc900還可以包括系統(tǒng)組件和資源916,諸如電壓調(diào)節(jié)器、振蕩器、鎖相環(huán)、外圍橋接、數(shù)據(jù)控制器、存儲(chǔ)器控制器、系統(tǒng)控制器、訪問(wèn)端口、定時(shí)器和用于支持在計(jì)算設(shè)備上運(yùn)行的處理器和軟件程序的其它類(lèi)似組件。
系統(tǒng)組件和資源916和/或定制電路914可以包括與外圍設(shè)備(例如,照相機(jī)、電子顯示器、無(wú)線通信設(shè)備、外部存儲(chǔ)器芯片等)接口連接的電路。處理器902、904、906、908可以經(jīng)由互連/總線模塊924彼此通信,以及與一個(gè)或多個(gè)存儲(chǔ)器元件912、系統(tǒng)組件和資源916、定制電路914以及任務(wù)依賴(lài)性控制器930通信?;ミB/總線模塊924可以包括可重配置的邏輯門(mén)的陣列和/或?qū)崿F(xiàn)總線架構(gòu)(例如,coreconnect、amba等)??梢杂筛呒?jí)互連(例如高性能片上網(wǎng)絡(luò)(noc))提供通信。
soc900還可以包括用于與soc外部的資源(例如時(shí)鐘918和電壓調(diào)節(jié)器920)通信的輸入/輸出模塊(未示出)。soc外部的資源(例如,時(shí)鐘918、電壓調(diào)節(jié)器920)可以由內(nèi)部soc處理器/核心(例如,dsp902、調(diào)制解調(diào)器處理器904、圖形處理器906、應(yīng)用處理器908等)中的兩個(gè)或更多個(gè)共享。
除了上文討論的soc900之外,各個(gè)實(shí)施例(包括但不限于下文討論的實(shí)施例)可以在各種各樣的計(jì)算系統(tǒng)中實(shí)現(xiàn),計(jì)算系統(tǒng)可以包括單個(gè)處理器、單核處理器、多個(gè)處理器、多核處理器或其任何組合。
各個(gè)實(shí)施例(包括但不限于上文關(guān)于圖3-圖9等討論的實(shí)施例)可以在各種計(jì)算設(shè)備上實(shí)現(xiàn),在圖10-圖12中示出計(jì)算設(shè)備的示例。
計(jì)算設(shè)備將具有圖10中所示的共同的組件,圖10示出了個(gè)人膝上型計(jì)算機(jī)1000。這種個(gè)人計(jì)算機(jī)1000通常包括多核處理器1001,多核處理器1001耦合到易失性存儲(chǔ)器1002和諸如磁盤(pán)驅(qū)動(dòng)器1004之類(lèi)的大容量非易失性存儲(chǔ)器。計(jì)算機(jī)1000還可以包括耦合到處理器1001的壓縮盤(pán)(cd)和/或dvd驅(qū)動(dòng)器1008。個(gè)人膝上型計(jì)算機(jī)1000還可以包括耦合到處理器1001的、用于建立數(shù)據(jù)連接或接收外部存儲(chǔ)器設(shè)備的多個(gè)連接器端口,諸如用于將處理器1001耦合到網(wǎng)絡(luò)的網(wǎng)絡(luò)連接電路。個(gè)人膝上型計(jì)算機(jī)1000可以具有用于發(fā)送和接收電磁輻射的無(wú)線電裝置/天線1010,其連接到耦合到處理器1001的無(wú)線數(shù)據(jù)鏈路。計(jì)算機(jī)1000還可以包括鍵盤(pán)1018、指向鼠標(biāo)板1020和顯示器1022,如在計(jì)算機(jī)領(lǐng)域中所公知的。多核處理器1001可以包括類(lèi)似于上述和圖9中所示的電路和結(jié)構(gòu)。
圖11示出了智能電話1100,其包括耦合到內(nèi)部存儲(chǔ)器1104、顯示器1112和揚(yáng)聲器1114的多核處理器1101。另外,智能電話1100可以包括用于發(fā)送和接收電磁輻射的天線,其可以連接到無(wú)線數(shù)據(jù)鏈路和/或與處理器1101耦合的蜂窩電話收發(fā)機(jī)1108。智能電話1100通常還包括用于接收用戶(hù)輸入的菜單選擇按鈕或搖桿開(kāi)關(guān)1120。典型的智能電話1100還包括聲音編碼/解碼(codec)電路1106,其將從麥克風(fēng)接收的聲音數(shù)字化為適合于無(wú)線傳輸?shù)臄?shù)據(jù)分組,并解碼接收到的聲音數(shù)據(jù)分組以生成被提供給揚(yáng)聲器來(lái)生成聲音的模擬信號(hào)。此外,處理器1101、收發(fā)機(jī)1108和codec1106中的一個(gè)或多個(gè)可以包括數(shù)字信號(hào)處理器(dsp)電路(未單獨(dú)示出)。
各個(gè)實(shí)施例還可以在各種商業(yè)上可用的服務(wù)器設(shè)備中的任何一個(gè)上實(shí)現(xiàn),諸如圖12中所示的服務(wù)器1200。這種服務(wù)器1200通常包括多個(gè)處理器系統(tǒng),該多個(gè)處理器系統(tǒng)中的一個(gè)或多個(gè)可以是或包括多核處理器1201。處理器1201可以耦合到易失性存儲(chǔ)器1202和諸如磁盤(pán)驅(qū)動(dòng)器1203之類(lèi)的大容量非易失性存儲(chǔ)器。服務(wù)器1200還可以包括耦合到處理器1201的軟盤(pán)驅(qū)動(dòng)器、壓縮盤(pán)(cd)或dvd盤(pán)驅(qū)動(dòng)器1204。服務(wù)器1200還可以包括耦合到處理器1201的、用于與網(wǎng)絡(luò)1208(例如耦合到其它廣播系統(tǒng)計(jì)算機(jī)和服務(wù)器的局域網(wǎng))建立數(shù)據(jù)連接的網(wǎng)絡(luò)訪問(wèn)端口1206。
處理器1001、1101、1201可以是任何可編程多核多處理器、微型計(jì)算機(jī)或多個(gè)處理器芯片,其可以由軟件指令(應(yīng)用)配置為執(zhí)行各種功能,包括本文所描述的各個(gè)實(shí)施例的功能和操作??梢蕴峁┒鄠€(gè)處理器,例如專(zhuān)用于無(wú)線通信功能的一個(gè)處理器和專(zhuān)用于運(yùn)行其它應(yīng)用的一個(gè)處理器。通常,應(yīng)用程序可以在其被訪問(wèn)并被加載到處理器1001、1101、1201之前存儲(chǔ)在內(nèi)部存儲(chǔ)器1002、1104、1202中。在一些移動(dòng)計(jì)算設(shè)備中,另外的存儲(chǔ)器芯片(例如,安全數(shù)據(jù)(sd)卡)可以插入到移動(dòng)設(shè)備中并且耦合到處理器1001、1101、1201。內(nèi)部存儲(chǔ)器1002、1104、1202可以是易失性或非易失性存儲(chǔ)器(例如閃存),或兩者的混合。出于本說(shuō)明書(shū)的目的,對(duì)存儲(chǔ)器的一般性參考是指可由處理器1001、1101、1201訪問(wèn)的所有存儲(chǔ)器,包括內(nèi)部存儲(chǔ)器,插入到移動(dòng)設(shè)備中的可移動(dòng)存儲(chǔ)器以及處理器1001、1101、1201自身內(nèi)的存儲(chǔ)器。
用于執(zhí)行各個(gè)實(shí)施例的操作的用于在可編程處理器上執(zhí)行的計(jì)算機(jī)程序代碼或“代碼”可以用諸如c、c++、c#、smalltalk、java、javascript、visualbasic、結(jié)構(gòu)化查詢(xún)語(yǔ)言(例如,transact-sql)、perl之類(lèi)的高級(jí)編程語(yǔ)言或者用各種其它編程語(yǔ)言編寫(xiě)。存儲(chǔ)在如本文所使用的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的程序代碼或程序是指其格式可被處理器理解的機(jī)器語(yǔ)言代碼(例如目標(biāo)代碼)。
計(jì)算設(shè)備可以包括被組織成用戶(hù)空間(其中非特權(quán)代碼運(yùn)行)和內(nèi)核空間(其中特權(quán)代碼運(yùn)行)的操作系統(tǒng)內(nèi)核。這種分離在
如本申請(qǐng)中所使用的,術(shù)語(yǔ)“組件”、“模塊”等旨在包括計(jì)算機(jī)相關(guān)實(shí)體,諸如但不限于硬件、固件、硬件和軟件的組合、軟件或執(zhí)行中的軟件,其被配置為執(zhí)行特定的操作或功能。例如,組件可以是但不限于在處理器上運(yùn)行的進(jìn)程、處理器、對(duì)象、可執(zhí)行程序、執(zhí)行的線程、程序和/或計(jì)算機(jī)上。舉例說(shuō)明,在計(jì)算設(shè)備上運(yùn)行的應(yīng)用和計(jì)算設(shè)備都可以被稱(chēng)為組件。一個(gè)或多個(gè)組件可以駐留在進(jìn)程和/或執(zhí)行的線程內(nèi),并且組件可以被定位在一個(gè)處理器或核心上,和/或分布在兩個(gè)或更多個(gè)處理器或核心之間。此外,這些組件可以從其上存儲(chǔ)有各種指令和/或數(shù)據(jù)結(jié)構(gòu)的各種非暫時(shí)性計(jì)算機(jī)可讀介質(zhì)執(zhí)行。組件可以通過(guò)本地和/或遠(yuǎn)程進(jìn)程、函數(shù)或過(guò)程調(diào)用、電子信號(hào)、數(shù)據(jù)分組、存儲(chǔ)器讀/寫(xiě)以及其它已知的計(jì)算機(jī)、處理器和/或進(jìn)程相關(guān)的通信方法的方式進(jìn)行通信。
前述方法描述和過(guò)程流程圖僅作為說(shuō)明性示例提供,并不旨在要求或暗示各個(gè)實(shí)施例的框必須按照呈現(xiàn)的順序執(zhí)行。如本領(lǐng)域技術(shù)人員將理解的,前述實(shí)施例中的框的順序可以以任何順序執(zhí)行。諸如“此后”、“隨后”、“接下來(lái)”等的詞語(yǔ)不旨在限制框的順序;這些詞語(yǔ)僅用于引導(dǎo)讀者對(duì)方法的描述。此外,以單數(shù)形式對(duì)權(quán)利要求要素的任何提及,例如使用冠詞“一”、“一個(gè)”或“所述”不應(yīng)被解釋為將該要素限制為單數(shù)。
結(jié)合本文公開(kāi)的實(shí)施例所描述的各種說(shuō)明性邏輯框、模塊、電路和算法框可以被實(shí)現(xiàn)為電子硬件、計(jì)算機(jī)軟件或兩者的組合。為了清楚地說(shuō)明硬件和軟件的這種可互換性,已經(jīng)在其功能方面總體地描述了各種說(shuō)明性組件、框、模塊、電路和步驟。至于這種功能是實(shí)現(xiàn)為硬件還是軟件取決于特定應(yīng)用和施加在整體系統(tǒng)上的設(shè)計(jì)約束。本領(lǐng)域技術(shù)人員可以針對(duì)每種特定應(yīng)用以變化的方式實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)決定不應(yīng)被解釋為導(dǎo)致偏離本發(fā)明的范圍。
用于實(shí)現(xiàn)結(jié)合本文公開(kāi)的實(shí)施例所描述的各種說(shuō)明性邏輯、邏輯框、模塊和電路的硬件可以利用被設(shè)計(jì)為執(zhí)行本文所描述的功能的通用處理器、數(shù)字信號(hào)處理器(dsp)、專(zhuān)用集成電路(asic)、現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)或其它可編程邏輯器件、分立門(mén)或晶體管邏輯、分立硬件組件或其任何組合來(lái)實(shí)現(xiàn)或執(zhí)行。通用處理器可以是微處理器,但是在替代方案中,處理器可以是任何常規(guī)的處理器、控制器、微控制器或狀態(tài)機(jī)。處理器還可以被實(shí)現(xiàn)為計(jì)算設(shè)備的組合,例如dsp和微處理器的組合、多個(gè)微處理器、一個(gè)或多個(gè)微處理器結(jié)合dsp核、或任何其它此類(lèi)配置?;蛘?,一些步驟或方法可以由特定于給定功能的電路來(lái)執(zhí)行。
在一個(gè)或多個(gè)示例性實(shí)施例中,所描述的功能可以在硬件、軟件、固件或其任何組合中實(shí)現(xiàn)。如果在軟件中實(shí)現(xiàn),則這些功能可以作為一個(gè)或多個(gè)指令或代碼存儲(chǔ)在非暫時(shí)性計(jì)算機(jī)可讀介質(zhì)或非暫時(shí)性處理器可讀介質(zhì)上。本文公開(kāi)的方法或算法的步驟可以體現(xiàn)在處理器可執(zhí)行軟件模塊中,處理器可執(zhí)行軟件模塊可以駐留在非暫時(shí)性計(jì)算機(jī)可讀或處理器可讀存儲(chǔ)介質(zhì)上。非暫時(shí)性計(jì)算機(jī)可讀或處理器可讀存儲(chǔ)介質(zhì)可以是可以由計(jì)算機(jī)或處理器訪問(wèn)的任何存儲(chǔ)介質(zhì)。通過(guò)舉例而非限制的方式,這種非暫時(shí)性計(jì)算機(jī)可讀或處理器可讀介質(zhì)可以包括ram、rom、eeprom、閃存、cd-rom或其它光盤(pán)存儲(chǔ)、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備或者可以用于以指令或數(shù)據(jù)結(jié)構(gòu)的形式存儲(chǔ)期望的程序代碼并且可以由計(jì)算機(jī)訪問(wèn)的任何其它介質(zhì)。如本文所使用,磁盤(pán)和光盤(pán)包括壓縮盤(pán)(cd)、激光盤(pán)、光盤(pán)、數(shù)字多功能盤(pán)(dvd)、軟盤(pán)和藍(lán)光盤(pán),其中磁盤(pán)通常磁性地再現(xiàn)數(shù)據(jù),而光盤(pán)則利用激光光學(xué)地再現(xiàn)數(shù)據(jù)。上述的組合也包括在非暫時(shí)性計(jì)算機(jī)可讀和處理器可讀介質(zhì)的范圍內(nèi)。另外,方法或算法的操作可以作為一個(gè)代碼和/或指令、或代碼或和/或指令的任何組合、或代碼和/或指令集合駐留在非暫時(shí)處理器可讀介質(zhì)和/或計(jì)算機(jī)可讀介質(zhì)上,這些介質(zhì)可以并入計(jì)算機(jī)程序產(chǎn)品。
提供所公開(kāi)的實(shí)施例的前述描述以使本領(lǐng)域技術(shù)人員能夠?qū)嵤┗蚴褂帽景l(fā)明。對(duì)這些實(shí)施例的各種修改對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,并且在不脫離本發(fā)明的精神或范圍的情況下,本文所定義的通用原理可以應(yīng)用于其它實(shí)施例。因此,本發(fā)明不旨在受限于本文示出的實(shí)施例,而是要符合與所附權(quán)利要求和本文所公開(kāi)的原理和新穎特征相一致的最廣范圍。