jollen 發表於 November 7, 2011 6:15 PM
距離上次為自已的部落格裡新增文章分類,已經有一年的時間了,這次加入了一個 Multi-core Software 的分類,也代表自已接下來的技術研究重心,將會在多核心軟體開發上投入時間。 就在上週四(11/3),Moko365與MagicLego團隊共同舉辦了一場「Multi-Core 嵌入式開發」研討課程。這次的課程,可以說是多核心軟硬體開發的「電腦概論」課程,不但是多核心開發的第一門課,更是了解「沒有軟體、沒有多核心效能」的基礎課程。針對自已的講題部份,在此做一些簡單的紀錄。 沒有良好的軟體設計,無法發揮多核心處理器的效能。既然如此,多核心軟體的涉及範圍為何?只需要作業系統支援多核心即可嗎? 答案是,多核心處理器需要軟體全面的支援,範圍從應用程式開始,一直往底層,直到作業系統,甚致驅動程式,都有很大的關聯。軟體如何支援多核心處理器,最大的關鍵在於「任務切割與指派」。研討課程當天,另一位講師Frank也利用一個影像處理的例子,說明影像處理如何分割任務,並將不同的任務,分派給不同的處理器。 另一個多核心軟體的關鍵為資料合併(Combine),Frank同樣也以影像處理做為例子,說明每個處理器在完成計算後,將分別得到的結果(Data)合併成最終計算結果。這個部份,梁老師也利用了一個矩陣運算的例子做了很清楚的說明。 由以上的說明可以了解,資料合併的關鍵,最終在於「如何取用另一個處理器核心的結果(Data)」。在ARM Cortex A8/A9架構裡,這個問題,是透過共用記憶體方式解決。也就是Cortex A8/A9多核心架構,處理器核心間是共用記憶體。共用的記憶體包含二種,第一種是成本較高,但速度較快的 L2 Cache;另一個共用記憶體則是DRAM,它的成本較低、容量較大,但速度較慢。...
jollen 發表於 November 8, 2011 7:09 PM
任務切割的目的,在於將應用程式裡的計算工作,切割後指派至另一個處理器核心;讓應用程式,能真正使用多核心的計算能力。這就是為什麼多核心軟體的設計,決定了多核心系統效能。上述的觀念,就是「平行處理」。 從應用程式的層面,就要考慮多核心的設計。如何將一個計算工作切割出來,並指派至另一個處理器核心?方式就是使用multi-thread。以Linux作業系統為例,multi-thread程式設計使用一個稱為pthread的程式庫;因此,學習pthread程式設計,就是打好多核心軟體開發的第一個功課。 Android作業系統同樣是使用pthread程式庫,雖然Android的pthread程式庫,與Linux的pthread程式庫「是二個2不同的實作版本」,但同樣是依循POSIX的標準(pthread是POSIX thread的縮寫),因此,有志進入多核心軟體開發的工程師,可以先在Linux系統底下,學習Linux pthread程式設計。 此外,Android應用程式與框架層,採用Java程式語言撰寫,並且採用物件導向的基礎理論。目前所談論的pthread程式設計,則是用C或C++撰寫,我們將透過pthread所產生的thread稱之為native thread。應用程式使用Java語言撰寫,所產生的thread稱為Java thread。Java thread本質上是一個物件,因此也稱為Thread object。 應用程式與框架層的Thread object與更底層的Native thread關係為何?答案是決取於Java Virtual Machine的設計;JVM的Thread model設計,將會影響Java thread的行為,在多核心系統上,Thread model也會影響Java thread的效能。...
jollen 發表於 August 4, 2012 3:09 PM
[Phonesmpd] 目前正和 Jelly Bean 整合當中,並且也開始加入 Linux 3.2 的一些特性。Jelly Bean 新增許多與多核心有關的特色,Phonesmpd 考慮了其中幾個新特色: 1. 整合 Jelly Bean 新的 Thread Group 功能 2. Jelly Bean 修改了 Cgroup 的設定,除了 fg_boost 外,還有一個 app group 3. 針對 Vsync 整合一些多核心功能,目前測試結果顯示能提昇 UI 的使用效能 4. 整合 Cpuset ,並支援 Linux...