多核異構的硬體基礎:共享存儲區和寄存器和中斷的設計。
寄存器和中斷用來實作各個核中程序間的事件的通信,共享存儲區用來實作各個核之間的資料的傳遞與共享。
1+《基于T264的編碼器在多核異構處理器上的設計與實作_王嬌》這篇文章講的非常詳細
包括本地通信流程,異地通信流程。
在存儲器 DDR3 中開辟多核之間可以共享的緩沖區,每個通道所映射緩沖區位址獨立, 以供多核之間進行資料傳遞
link 在視訊資料流中是最基本的單元子產品 , 每個
link 中包含了一個基于 BIOS6/Linux 的任務 、 線程、
消息盒( 使用作業系統的信号量實作 ) 。 由于每個 link
運作一個獨立的線程 , 是以各個 link 之間可以并行
運作 。 消息盒是關聯使用者指定的 link , 讓 link 之間有
個互相對話的機制 , 用來傳遞信令 。 而對于視訊流數
據 、 原始圖像資料的傳遞 link 實作了專門的接口來
實作 ,隻傳遞指針,而不是資料 。 基于 link 結構 , 視訊
處理的流程中 , 所有工作量就可以均衡到每個處理
器核心上去執行
Mailbox 為處理器提供了通過寫寄存器向其他處理器發送中斷的機制
DM8168 通過自旋鎖( Spinlock )實作了系統共享資源的互斥
根據這 linkId 判斷這個消息是發給本地的 link 還是遠端處理器的 link ;
如果是本地的直接調用 BIOS/LINUX API 函數,否則就通過 Syslink 子產品的 MessageQ 發送這
個消息到指定的處理器,讓其調用對應的函數處理
link 之間使用緩沖隊列進行幀交換 ,沒有了解FULL隊列和EMPTY隊列
getFullFrames :該 link 從裝置驅動擷取視訊資料;
putEmptyFrames :歸還該 link 的幀 buffer
當一個 link 采集完或處理完一幀資料後會發送一
個消息“ SYSTEM_CMD_NEW_DATA” 給後向的 link ,通知它有資料可取; 後向 link 收到該
消 息 後 可 調 用 System_getLinksFullFrames() 函 數 來 獲 取 幀 數 據 , 處 理 完 後 再 調 用
System_putLinksEmptyFrames() 函數來歸還給前向 link 繼續使用 為什麼要歸還
讀取上一個Link的資料資訊 如果需要處理幀,則配置設定空buffer 将處理之後的buffer指針傳遞給輸出隊列,并且通知下一個Link