這個我一定要怒答!
當年在IBM 的CellBE上 (就是PS3上那塊)做了不少影像處理、視訊編解碼的工作。這個奇葩的異構體系結構有如下幾個特性:
- 雖然號稱一個芯片上有9個核,但是只有一個是通用核,普通程式只能在這個核上跑,沒法和x86一樣直接多執行緒!
- 另外的8個運算核只有一種模式那就是128位元的向量運算,只能跑一些及其精簡的指令,需要在C程式中嵌入偽組譯來編程。啊?加減乘除運算子?在運算核上放多了那個會被開除吧!
- 通用核與運算核並不共享記憶體空間, 他們之間所有的數據共享和同步都必須完全手工管理,想要傳數據得自己呼叫硬體DMA,然後自己同步!
- 因為程式碼全部展開能最大增加最佳化潛力,基本一切函式都被變成了宏!
- 要想發揮效能一定把程式並列、向量化。用trick,gotcha一堆!人能看懂的程式都不是好程式!
- 8個運算核上跑的程式不能用gdb debug,唯一靠譜的偵錯手段就是printf,但是因為運算核上printf也是透過DMA跑去通用核打印到終端,所以不同核之間的printf並不能保證同步!
- 只