1: 線程到底是什么?
A: 線程是一請求序列,請求之間的順序一直保持不變。所以線程永遠不會亂序發(fā)送請求、執(zhí)行和響應。
2: 為什么要使用線程?
A: 為了不影響性能的降低,在內核里線程之間允許并行執(zhí)行。如果不使用線程,多個并行的請求序列就會交叉存取,變成分時復用的一個序列,任何一個請求的延時都會影響其后的所有請求,進而影響所有的并行序列。通過標志每個請求屬于不同的線程,目標內核就可以重排序執(zhí)行以優(yōu)化性能。
在OCP規(guī)范中,內核內線程的最少數目是1個。此外,所有的請求都與線程相關。不過,發(fā)起內核可能要求目標內核先處理優(yōu)先級高的線程請求。但是,在一個線程內,所有的請求和響應都保持原先的順序。
因此,先前的請求處理完之后,優(yōu)先級最高的線程將被處理。保留一個線程的請求優(yōu)先級順序,優(yōu)先級高的請求總是比優(yōu)先級低的請求先執(zhí)行。
其他例子包括多存儲體DRAM控制器配置,每個DRAM存儲體有唯一的關聯(lián)線程。在這種情況下,理論上所有的存儲體能同時被激活,DRAM控制器可以顯著地增加DRAM存取的并發(fā)性。
3: 內核最多可以有多少個線程?
A: OCP結構理論上不限制內核里線程的數目,但實際應用中是受限制的。主機在某一時刻只能發(fā)出一個命令。這樣如果多線程同時有效,需要由仲裁器來選擇一個有效的線程給OCP。隨著線程數目的增加,IP內核的性能會降低。同樣,從機也增加線程關聯(lián)的存儲開銷,所以內核的門數會限制線程數在一個合理的數目。
4: 為什么要用多線程?
A: 多線程是為并發(fā)不相關的行為設立的。典型的例子是像EthernetMAC有傳輸數據流和接收數據流,每個數據流都是唯一的線程。
5: 什么是MThreadID的時序(相對于相位
A: 當數據握手信號不被使能有效時,寫請求的相位號是1,當寫命令有效時,線程標識信號(在請求組里)有效。當數據握手信號使能有效,當寫數據有效時,線程標識信號(在數據握手信號組里)有效。
對讀傳輸,當讀命令有效時,線程標識信號(在請求組里)有效。當從機返回數據后,線程標識信號(在響應信號組里)有效。
6: 當主從機對正在執(zhí)行的線程 作reset, 會怎么樣?
A: Reset會取消或者完成所有未執(zhí)行的、來自主機的請求和從機的響應。否則,對于reset以前發(fā)出的命令,如果從機在reset后響應系統(tǒng)狀態(tài)就不會被reset正確初始化。OCP規(guī)范理要求reset至少持續(xù)置位16個時鐘周期,以保證主從機達到一致的初始狀態(tài)。
7: 內核如何實現優(yōu)先級處理?
A: 超過一個線程時,正常的通訊是用一個線程,優(yōu)先級高的請求用另一個線程。盡管在一個線程里請求間保持一定的順序,但在不同的線程間就不一樣了。來自不同線程的請求之間可以亂序執(zhí)行,允許優(yōu)先級處理。
8: OCP上的互連標識(connection ID)的作用是什么?
A: 互連標識類似于線程,但它是一個全局性的,而線程是局部性的。互連標識用于系統(tǒng)發(fā)起內核和目標內核之間的傳輸識別。需要注意的是當互連ID通過中間傳輸時,目標內核接受到的線程信息是描述本地OCP互連。
9: 線程和互連的區(qū)別在哪里?
A: 線程是和OCP接口相關的。假設內核A與內核B相連,而內核B與內核C相連,內核C接受到的經內核B轉發(fā)的請求里沒有關于內核A的OCP線程信息。所有的內核信息來自內核B和內核C的OCP互連。
互連是一OCP信號規(guī)定,允許內核A用全局標識符標記請求,以識別請求的來源;ミBID在包含有很多的發(fā)起內核和接受內核的SoC設計里很重要,因為它允許OCP發(fā)起內核給通過中介OCP接口傳輸的請求分配標識信息。
10: 單個從機能和多個主機互連嗎?如果不行,怎么共享內存?因為OCP是一個點對點的互連,OCP有協(xié)議支持多個處理器到內存控制器的互連嗎?
A: 微網絡有兩個功能:將多個從機互連至主機,多個主機互連至一個從機。后者在多個主機進行點對點的互連時支持共享一個從機。這和傳統(tǒng)的總線功能很類似。微網絡通過OCP接口互連系統(tǒng)內的每個主內核和從內核。一個從機有多個OCP接口是完全可行的,這類似于多端口的SRAM內存。
OCP接口標準,不像傳統(tǒng)的總線協(xié)議,它可以隨意混合線程。線程允許事務被標記,根據標記的不同區(qū)別對待線程。這樣不同主機的數據流可以被從機識別,便利了為不同的數據流進行不同處理,還允許傳輸重排序來適應子系統(tǒng)的時序約束(像DRAM控制器),從而改善性能。
11: 什么是tagging?
A: “tagging是指接收端常常按照OCP主機端引起需求的順序將響應反饋給由主機提出的需求。然而有些時候, 由OCP的接收端來決定何時向OCP發(fā)送端傳遞反饋更具意義。Tags可以被用于直接連接由導致OCP接收端反饋的最初需求和反饋。在很多情況下,使用tags能夠提升整個系統(tǒng)的表現!
12: 如何區(qū)分tags和threads?
A: 在提供無序響應方面,“tags”相對于“threads”可以被認為是輕量級選手。特別地,若干“threads”為每一根“threads” 提供獨立的流控制,而“tags”卻用單一共享的信號控制所有的“tags”。并且,在處理“threads”時不必遵守排序規(guī)則,而在處理“tags”時卻不能打亂順序。最后,每一根“threads”都必須插獨立的緩沖器,而“tags”卻不需要,因為對所有的“tags”而言,流控制信號是共用的。
了解更多關于OCP在線程&互連方面的知識,請訪問http://www.ocpip.org/chinese/faqs/threads