資料介紹
多核心與并行概述
“Single core processors are a shrinking minority of all the processors in the world. Multicore processors, offering parallel computing, have displaced single core processors permanently. The future of computing is parallel computing, and the future of programming is parallel programming.”
---James Reinders from Intel
為英文不熟的同學翻譯一下子:
單核處理器是處理器世界中正在不斷縮減規模的少數群體。多核處理器因為能夠提供并行計算,正在永久性地替代單核處理器的地位。未來的計算將是并行計算的天下,未來的編程亦將是并行編程的天下。
因為說這話的人是Intel的工程師,所以嵌入式系統的工程師聽起來多多少少可能覺得未免危言聳聽了。但是從過去幾十年的科技發展經驗來看,嵌入式系統的發展總是慢慢會跟隨桌面計算,服務器計算的道路,只是稍稍慢那么一拍而已。考慮到硬件的發展速度終將不能以摩爾速度無限制的發展下去,多核與并行的概念引入在嵌入式系統中可能比大多數人預計的要更早一些吧。作者本人也覺得如同OS概念一樣,多核與并行的概念在嵌入式系統上與桌面/服務器系統上僅僅只是規模上的差別,不存在本質的區別。
目前而言,作者認為嵌入式系統的多核與桌面/服務器系統地多核有以下顯著的差別:
1、相對而言,嵌入式系統對運算的要求不是那么苛刻,所以數學運算方面的庫函數暫時無需特別定制的并行版本;
2、因為嵌入式系統的多核心多采用Little Big的非對稱架構,故此一般有一個核心為主,其余核心都屬于從,比較類似于協處理器的概念,但是與FPU等協處理器不同的是這些從核心自主性都很高;
3、因為上述的little big的架構,故此任務的分配上從算法上來講要簡單一些,但是與硬件耦合較為緊密;所以目前桌面/服務器系統上的多核框架如OpenMP,OpenCL還不能簡單的搬來利用;
4、操作系統中的thread概念一般被認為是并行編程的低級別并行,桌面/服務器系統中目前的趨勢是拋棄thread這種低級操作,直接使用高級并行框架如OpenMP,Clik Plus等等將整個系統看作一個整體,由框架來分配任務。嵌入式系統對應thread的是各種RTOS的task,這種低等級的并行操作的標準度很低。所以如何將整個嵌入式處理器視作一個整體來隱式進行并行編程可能是最后完成的任務。
我們看一個例子:
1 #include
2
3 int main(void)
4 {
5 #pragma ompparallel
6 printf("Hello,world.\n");
7
8 return 0;
9 }
10 //gcc -fopenmp omp_t1.c
這段代碼在桌面計算機中以注釋中的命令行build之后運行:
Hello, world.
Hello, world.
Hello, world.
Hello, world.
這是Open MP架構與工具鏈結合,將受控語句分別分配給四個核心(作者的實驗電腦)運行。這個例子如果使用thread來做,創建多個thread,那么移植到嵌入式平臺就好辦了。但是由于硬件,OS,Library等等的不標準,目前在嵌入式系統的開發中做到如上述代碼這樣的自動化并行程度。
從上面的例子可以得知,嵌入式系統的并行計算還與桌面/服務器領域的發展趨勢還有一大段距離。感興趣的同學可以去自行了解一下子:Open MP, Open CL, Intel CLik Plus, MPI這幾個項目。目前看來嵌入式平臺的多核架構類似于操作系統的多個進程。作者還是從這個層面來做一些實驗來展示相關的并行概念。
Practice: Mutex-資源互鎖
PSoC 6的特點是雙核心都能同時訪問外設與內存。上一集的Demo正是兩個內核分別控制LED進行閃爍。那么如果兩個內核同時訪問同一外設會怎樣,比如UART。以下做個實驗試驗一下子。
首先在上次實驗的基礎上拖入一個UART來,直接從右邊的工具盒子里面拖。
圖 拖入一個UART
把波特率配置好之后,其余參數都用默認的。
圖 根據這個把引腳配置
用這個函數試驗一下子簡單的串口輸出是否OK,過程不多講:
確認串口工作之后,重定向STDOUT到串口,也就是要用printf做輸出。(其實這實驗直接使用底層串口輸出函數也可以進行,只是重定向STDOUT這個以后要經常使用,順帶一題。)
因為本系列文章的例子都使用ARM-GCC工具鏈,故此只需要重寫這個函數即可:
(注:PDL中也有Retarget的實現,兼容Keil MDK/IAR/GCC,但是如果只想使用printf,推薦使用本文的簡單方法)
詳細代碼參見作者的git頁面。
之后Cortex M0 與Cortx M4以如下流程運行:
圖 雙核心使用打印串口流程
其中兩者的打印代碼段均為:
運行結果如下:
圖 雙核心使用打印函數運行結果
從結果可以看出來,雙核心的打印全部穿插在一起了。看不出來原本的打印內容。發生這樣的情況顯然不是想要的結果。分析出現問題的根源在于:當前系統僅有的資源被多個核心使用而發生的爭奪。
借鑒多進程編程的經驗,可以得知解決這一問題的關鍵在于當某一核心使用該資源時,另外核心必須等待或者直接放棄。一般的做法是設定一定的等待時間,如果過了時間依舊獲取不到該資源則進行超時退出等待。于是我們將上文的打印函數進行修改:
再次進行運行,結果如下:
圖 進行資源保護之后的共享打印結果
因為需要保護的資源要等到某一核心使用完畢之后才能被其他核心使用,這個過程不能被打斷,所以稱之為原子性操作。不管是多線程還是多核心,這個概念都類似.事實上嵌入式系統的程序員對這個概念并不陌生,ISR中與主循環中都需要修改的參數就必須以原子性操作來修改。
圖 原子性操作示意
PSoC 6上的硬件IPC特性與PDL中的IPC接口
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- RT-Thread文檔_英飛凌 Psoc6-CY8CKIT-062S2-43012上手指南
- 嵌入式實時系統資料下載
- 嵌入式系統設計與物聯網開發資料下載
- CY8CKIT-062-BLE_Kit 如何實現電子墨水屏顯示資料下載
- 長文詳解嵌入式Linux系統移植資料下載
- 如何使用FPGA實現嵌入式多核處理器及SUSAN算法并行化 8次下載
- 基于CY8CKIT-026CAN收發器的參考設計
- 嵌入式系統教程之嵌入式系統的IO模塊詳細資料說明 8次下載
- 嵌入式Linux開發教程之嵌入式系統介紹資料免費下載
- 嵌入式開發Linux網絡編程培訓資料的詳細資料免費下載 34次下載
- 嵌入式ARM多核處理器并行化優化探究 1次下載
- CY8CKIT-002 PSoC?MiniProg3 PSoC 3/5編程及調試工具 56次下載
- 第3章 多核嵌入式系統硬件結構 1次下載
- 基于FPGA的嵌入式多核處理器及SUSAN算法并行化 24次下載
- CY8CKIT-050_Board_Design_Files 0次下載
- 嵌入式可編程片上系統是什么 411次閱讀
- fpga是嵌入式嗎 1770次閱讀
- 什么是嵌入式系統?嵌入式系統的具體應用 2105次閱讀
- 怎么從PC編程轉向嵌入式編程 656次閱讀
- CY8CKIT-035電源管理擴展的特點性能及應用 2021次閱讀
- 嵌入式系統應用實例的詳細資料介紹 4605次閱讀
- LabView開發嵌入式系統的的挑戰及應用解決方案 1718次閱讀
- 關于嵌入式ARM多核處理器的并行方法 4128次閱讀
- 基于Cypress PSoC 63 MCU系列開發方案 7134次閱讀
- 嵌入式系統C語言編程實戰教程合集 9266次閱讀
- 關于嵌入式系統8大關鍵特性詳解 1060次閱讀
- 基于FPGA的多核嵌入式系統的設計 603次閱讀
- 深入了解嵌入式編程 3549次閱讀
- 多核嵌入式系統的節能機遇與策略 1196次閱讀
- 嵌入式ARM多核處理器并行化方法 1500次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1491次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機和 SG3525的程控開關電源設計
- 0.23 MB | 4次下載 | 免費
- 8基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537793次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多