关注RISC-V和Chisel以及开源IC和EDA在中国的发展
要點新聞:
上周在加州WD總部舉辦的第七屆RISC-V Workshop非常成功,為期兩天的研討會包含了47個session,以及26個poster/demo session。總共有近500人參加,因為安排緊湊,這次甚至取消了提問環節。
下一屆Workshop將於明年5月在Barcelona的BSC-CNS(Barcelona Supercomputing Center舉行,有機會前往的千萬不要錯過。
目前基金會有100個左右會員,其中個人會員在過去半年增長了一倍左右。
更多Workshop的詳細信息在正式的Video在Youtube上公布之前,可以參看lowRISC的Alex寫的Blog文章,接下來的簡報也會有更多信息。
Link:
WD,一家老牌的資料存儲公司,正在努力的將自身轉變為一家以資料為中心並且提供開放計算平台和環境的公司。
在Workshop上西數的CTO Martin Fink發表了令人激動的演講,他首先闡明了公司的願景,同時表明在其每年出貨的產品中包含了10億個處理器核心。WD希望在未來將這 些處理器都替換為RISC-V架構的CPU。編者表示這絕對能讓WD省下一大筆授權費和版稅。為了實現這個目標,WD將全力支持RISC-V標準的發展,且積極的採用相關的技術和產品或者投資相關領域的公司。Esperanto這家做高端RISC-V處理器的公司就是WD投資的對象之一。
編者認為這個新聞所帶來的傳播價值遠大於其本身,這向所有對RISC-V持懷疑態度的人們傳達了一個更加積極的信息,相信能夠讓更多的夥伴加入到RISC-V的這場革命中來。
相關報道見WD官方新聞以及Forbes的報道。
Link:
這次研討會上,向量extension指令級是大家所非常期待和關心的。
Roger Espasa代表基金會的V-extworkgroup匯報了當前最新的進展。
他首先談到了V-ext的目標是為了達到更好的能效並且減少指令和memory access的bandwidth,也希望能夠有很強的extension性以支持各類規模的實現,當然深度學習和人工智能也和這有一定的關係。
workgroup希望充分吸取過去的教訓,來定義一種史上最好的向量指令集。這包括充分的可extension性和靈活性,不僅支持標量和向量運算也希望可選的支持矩陣(2D)運算。
當前的草案中包含(最多)32個向量寄存器,數量是可動態變化的。同時每個寄存器的大小也是可變的,甚至可以是一個Matrix,而且有自己的類型定義。
而向量指令則包含一系列的向量運算和內存相關操作,很多操作都支持Mask,來使得部分計算變得可能。
workgroup希望在下次Workshop前ratified這個extension,同時更加重要的是,他們期待能有志願者來幫助完成LLVM和GCC auto-vectorizer的支持,這裏目前可能還是個空白,並且極具挑戰性。如果你有興趣,可以加入基金會和workgroup貢獻你的力量。
研討會上緊隨著V-ext,Securityextensionworkgroup也報告了其進展,Security這個議題主要包含隔離和加密兩部分,這次的報告更多的是闡述其加密extension。
值得一提的是,Securityextension嚴重依賴正在定制中的V-ext來實現高效的crypto加速,Securityextension額外增加了一些如GF操作的指令,配合v-ext來高效的實現加密功能。
BOOM的作者Chris Celio臨近博士畢業,這一次他在另一個來自台灣的同事的幫助下,共同完成了BOOM的改進工作。
BOOM已經tape-out,整個tapeout的工作僅用了兩個人4個月的時間。這也一定程度上體現了chisel的優勢,當需要對一個覆雜的CPU體系架構做優化時,更高級的抽象和優化有效的減少了開發的時間,而且chisel這種開放的平台可以允許開發者生成各種不同的實現組合,然後通過後期的Simulation和評估結果選擇最好的那個。
Chris表示這四個月中大部分的時間都花在physical design相關的工作上,真正重寫chisel並沒太花時間。
另外Chris Celio已經被Esperanto收入麾下。
Esperanto這家公司似乎已經低調了數年,在這次Workshop上其決定要更多的出現在公眾視野中。
這家公司希望能夠補足RISC-V目前沒有高性能處理器的這個缺口,並且表示SiFive並不是他們的競爭對手而更多的是夥伴。
Esperanto發布了數個處理器開發計劃,並且很多應用涉及了人工智能等熱門的領域。
ET-Maxion是基於BOOMv2的,並且會為7nm CMOS工藝做優化。
編者評:理想很美麗,現實很骨感,活下去或許最重要!我看好你們!
David Chisnall 在isa-dev上公開了J Extension Group的計劃,並征求夥伴加入。這個 workgroup 將針對 managed, interpreted 和 JITed 的語言,像是 C#, Go, Haskell, Java, JavaScript, OCaml, PHP, Python, R, Ruby, Scala or WebAssembly等,提出extension。
可能的方式包括針對GC(垃圾收集器)和 dynamic memory allocation的hw support,以及對數學運算的overflow處理等。
詳情請參考:連結
Pextension (Packed SIMD) 一直是大家關注的焦點,可惜一直沒有一個 workgroup 專門的推動它。最近,Andes在isa-dev上提出了他們的proposal,計劃用他們在AndesStar V3 ISA中針對 DSP和 SIMD 所開發的指令當基礎,來推動P extension。Andes所提出的指令,包括SIMD add,shift, compare等,以及非SIMD的部份,像是packing instruction及HW loop。
更多細節可參考mailing list及Andes提出的proposal:連結
nvidia的Daniel Lustig在月初公布了RISC-Vmemory model的最新版草案並征求意見。 計劃在意見反饋之後,將memory model草案提交RISC-V基金會討論,並融入正式標準。 關心memory model的同學請閱讀草案(見下面鏈接郵件的附件)並在isa-dev郵件列表上提出意見。
這次的草案進一步細化了RISC-Vmemory model的定義,包括支持的種類,各種memory model中具體內存操作的順序(即硬體必須遵守而不能調整的memory access順序)。 RISC-Vmemory model支持兩種模式:類似ARM和PowerPC的弱memory modelRVWMO和類似Intel x86的強memory modelRVTSO。 一個架構支持兩種memory model是比較奇怪的,大多數的架構只支持一種memory model。 RISC-V的部分使用者(包括nvidia,SiFive和部分ARM處理器的使用者)其實更支持使用類似ARM的弱memory modelRVWMO,即使用fence來顯式地強制需要按序執行的內存操作,而讓處理器和微架構確定其他的memory access順序以提高性能和降低功耗。 然而,有一部分地x86使用者希望能通過簡單重編譯地方式將原有跑在x86處理器地程序移植到RISC-V處理器。 軟體上修改memory model需要手動修改代碼,現在還不能由編譯器自動完成。 這就導致了重編譯地程序默認硬體使用TSO地memory model。 作為折衷,RISC-Vmemory model草案規定:
具體軟體硬體可組合的方式:
RVWMO的處理器 | RVTSO的處理器 | |
---|---|---|
RVWMO的程序 | 正常高效執行 | 正常低效執行 |
RVTSO的程序 | 執行出錯 | 正常執行 |
討論還在繼續中:RISC-V isa-dev 郵件列表 https://goo.gl/5o8rpk
(小編:這個討論有點發散,不得不驚嘆於Architecture還是有那麽多令人糾結的驚人的細節) RISC-V priv spec在page table 的leaf node (也就是具體內存頁的page table entry)上有A(已訪問)和D(已修改)兩個flag。 RISC-V可以支持硬體或者軟體管理的A/D控制。 現在大部分的處理器和操作系統都使用軟體方式,即:出現訪問一個頁而A==0的時候或修改一個頁而D==0的時候,TLB引發頁錯誤要求軟體修改flag。 鑒於該操作可能會很頻繁並影響性能,處理器可以選擇使用硬體處理,即TLB直接修改page table 。這裏就引出了好幾個問題:
如果操作系統不知道怎麽辦?操作系統原本可能會software cache 住 page table 的 flag,完全硬體處理則會導致軟體硬體不一致。這個問題還算好解決,硬體處理A/Dflag的處理器需要在device tree中說明。
為什麽只有leaf node 才有A/Dflag?中間page table entry也可以設置A/Dflag。這樣很可能可以在page table 的第二級就發現缺頁。但是維護非leaf node 的A/Dflag很複雜!
如果硬體修改flag,TLB會不會誤改?比如說ITLB的預取指和深流水線。如果解決該問題,那麽所有TLB修改就是個fence了。如果是fence,hypervisor(虛擬層)的行為就不確定了,就不能嚴格重跑了(hypervisor的一個重要功能)。(小編:這些問題,現在看起來,還是很無解)
isa-dev上的討論:https://goo.gl/TywzWt
這是一個有趣的問題。
舉個例子,SC rd, rs1, rs2
,該指令會檢查之前LR
指令加上的鎖是否完好,如果完好,則將rs2
的值寫入rs1
所指向的內存,用rd
返回1,
否則返回0並不執行寫操作。
可是,如果rd
是常置0的寄存器x0
呢?按標準定義,如果鎖完好,那麽寫操作將會執行,但是x0
不能被賦值,所以返回值仍然是0,軟體看見的原子操作失敗。
顯然,一個正常的編譯器不會生成這樣的代碼。
於是,有人提問:
應該把這條指令定義為非法指令嗎?這樣該指令就可以以後被extension為其他指令了啊。
的確啊,該指令沒有什麽合法用途,完全浪費指令空間啊。 可是,RISC-V的產生就是為了設計一個對硬體高效同時軟體也高性能的指令集。 指令集的一個基本設計思路就是避免將RISC逐步變成一個CISC。 這也是為什麽條件執行、多寄存器壓棧等等指令都沒有被標準指令級採納的原因。 如果定義該指令為非法指令,硬體上就必須把它當作一個特殊情況處理。 這樣的特殊情況多了,RISC-V就變成”CISC-V”了。
Rocket-Chip提供了一個叫做AXI4Deinterleavermodule 。該module 用於重排從AXI總線到TileLink總線的突發報文。 AXI總線允許兩個多傳輸周期的突發報文互相交疊子周期的傳輸(利用報文的id區分),但是TileLink則不允許一個突發報文被其他報文打斷。 為了解決該協議沖突,AXI4Deinterleaver則對多個並發的突發報文經行緩沖再串行傳輸。
Chisel3終於正式發布了。
相比之前的預發布版本,正式版有一些較明顯的語法變動:
value.U(width), value.asUInt(width) /* explicit width */
RegInit()
和RegNext()
方法Reg(init=...) -> RegInit(...)
Reg(next=...) -> RegNext(...)
DontCare
對象來代表可以不連接的信號io.out.debug := true.B
io.out.debugOption := DontCare // explicit undriven input
{
...
val nElements = 5
val io = IO(new Bundle {
val outs = Output(Vec(nElements, Bool()))
})
io.outs <> DontCare // unload output
...
}
clk
更名為clock
。IrrevocableIO
類型。該類型類似於ReadyValidIO
,但是valid
信號一旦被置高,在ready
為高之前,不能撤回。Module
類型,比如支持用戶自定義時鐘覆位端口的RawModule
類型。更詳細的說明,請參看Chisel3的發布聲明
Michael Clark 最近幫 QEMU 的risc-v port 加上了不少功能,包括針對 priv 1.10 丶SMP丶及PLIC的支援。為了支援還未升級的軟體,舊有針對 priv 1.9.1 的部份仍被保存。
更多細節可參考 pull request 71
FOSDEM’18 2018年2月3-4日,FOSDEM (Free and Open Source Developers’ European Meeting)將在比利時的布魯塞爾舉行。
PULP WORKSHOP AT HPCA2018 2018年2月25日,在維也納的HPCA中,會有一場跟Pulp 有關的workshop。PULP小組會介紹PULP最新的發展,和他們未來的走向,包括 PULP-CAPI (Coherent Accelerator Processor Interface) 和 Ariane (Next generation of 64-bit RISC-V implementations)等。詳情可參考 pulpino mailing list 中的 < PULP newsletter - 4Q2017 >。
CNRV提供為行業公司提供公益性質的一句話的招聘信息發布,若有任何Architecture、IC設計、軟體開發的招聘信息,歡迎聯系我們!
整理編集: 宋威、黃柏瑋、郭雄飛
歡迎關註微信公眾號CNRV,接收最新最時尚的RISC-V訊息!
本著作係採用創用 CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款授權.