diff --git a/zh-cn/assets/cover-ca6ff87c.webp b/zh-cn/assets/cover-ca6ff87c.webp new file mode 100644 index 0000000..dab21fb Binary files /dev/null and b/zh-cn/assets/cover-ca6ff87c.webp differ diff --git a/zh-cn/assets/cover-fa6a1661.webp b/zh-cn/assets/cover-fa6a1661.webp new file mode 100644 index 0000000..486ddc1 Binary files /dev/null and b/zh-cn/assets/cover-fa6a1661.webp differ diff --git a/zh-cn/assets/image1-78435096.webp b/zh-cn/assets/image1-78435096.webp new file mode 100644 index 0000000..46e4436 Binary files /dev/null and b/zh-cn/assets/image1-78435096.webp differ diff --git a/zh-cn/assets/index-867a5cbc.js b/zh-cn/assets/index-012cd7f5.js similarity index 98% rename from zh-cn/assets/index-867a5cbc.js rename to zh-cn/assets/index-012cd7f5.js index aa1877e..0df1c5a 100644 --- a/zh-cn/assets/index-867a5cbc.js +++ b/zh-cn/assets/index-012cd7f5.js @@ -1,4 +1,4 @@ -const v="/zh-cn/assets/cover-92745c95.jpg",e="/zh-cn/assets/image1-638abd39.png",s="/zh-cn/assets/image2-2a8f796e.gif",p="/zh-cn/assets/image3-ae1841b7.png",a="/zh-cn/assets/image4-5bf432ec.png",n="/zh-cn/assets/image5-81eb5b8d.png",l="/zh-cn/assets/image6-537c8738.png",o="/zh-cn/assets/image7-b58de99e.png",i="/zh-cn/assets/image8-c6334c83.png",t="/zh-cn/assets/image9-6340ddaa.png",c="/zh-cn/assets/image10-ac1b70de.png",r="/zh-cn/assets/image11-1f1870d2.png",_="/zh-cn/assets/image12-01c249ea.png",d="/zh-cn/assets/image13-a48112ad.png",m="/zh-cn/assets/image14-d780d4f2.png",u="/zh-cn/assets/image15-f58a4d86.png",h="/zh-cn/assets/image16-79c3985b.png",k="/zh-cn/assets/image17-863e7adb.png",f="/zh-cn/assets/image18-931263d9.png",g="/zh-cn/assets/image19-8f35c101.png",P="/zh-cn/assets/image20-ef5a452f.png",b="/zh-cn/assets/image21-ebff1568.png",j="/zh-cn/assets/image22-b3b3dbaa.png",F="/zh-cn/assets/image23-12fff2c5.png",w=[v,e,s,p,a,n,l,o,i,t,c,r,_,d,m,u,h,k,f,g,P,b,j,F],T={label:"数据流式编程在硬件设计中的应用",description:"数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到19世纪60年代,由MIT的Jack Dennis教授开创。",cover:"./cover.jpg",location:"中国香港",author:["米明恒"],tags:["硬件加速"],date:"2023-10-26",title:"Application of data flow programming in hardware design"},I=[{label:"数据流式编程的思想",level:2},{label:"数据流式编程思想简介",level:3},{label:"软件开发中的数据流式编程思想",level:3},{label:"软件数据流 vs 硬件数据流",level:3},{label:"数据流思想与状态机思想的对比",level:3},{label:"Bluespec 语言及其流式编程框架 PAClib",level:2},{label:"Bluespec SystemVerilog(BSV)和 PAClib 简介",level:3},{label:"PAClib 中的基础开发组件",level:3},{label:"IFFT 应用实例",level:2},{label:"需求背景",level:3},{label:"代码实现",level:3},{label:"写在最后",level:2}],y=`

数据流式编程的思想

+const v="/zh-cn/assets/cover-92745c95.jpg",e="/zh-cn/assets/image1-638abd39.png",s="/zh-cn/assets/image2-2a8f796e.gif",p="/zh-cn/assets/image3-ae1841b7.png",a="/zh-cn/assets/image4-5bf432ec.png",n="/zh-cn/assets/image5-81eb5b8d.png",l="/zh-cn/assets/image6-537c8738.png",o="/zh-cn/assets/image7-b58de99e.png",i="/zh-cn/assets/image8-c6334c83.png",t="/zh-cn/assets/image9-6340ddaa.png",c="/zh-cn/assets/image10-ac1b70de.png",r="/zh-cn/assets/image11-1f1870d2.png",_="/zh-cn/assets/image12-01c249ea.png",m="/zh-cn/assets/image13-a48112ad.png",d="/zh-cn/assets/image14-d780d4f2.png",u="/zh-cn/assets/image15-f58a4d86.png",h="/zh-cn/assets/image16-79c3985b.png",k="/zh-cn/assets/image17-863e7adb.png",f="/zh-cn/assets/image18-931263d9.png",g="/zh-cn/assets/image19-8f35c101.png",P="/zh-cn/assets/image20-ef5a452f.png",b="/zh-cn/assets/image21-ebff1568.png",j="/zh-cn/assets/image22-b3b3dbaa.png",F="/zh-cn/assets/image23-12fff2c5.png",w=[v,e,s,p,a,n,l,o,i,t,c,r,_,m,d,u,h,k,f,g,P,b,j,F],T={label:"数据流式编程在硬件设计中的应用",description:"数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到19世纪60年代,由MIT的Jack Dennis教授开创。",cover:"./cover.jpg",location:"中国香港",author:["米明恒"],tags:["硬件加速"],date:"2023-10-26",title:"Application of data flow programming in hardware design"},y=[{label:"数据流式编程的思想",level:2},{label:"数据流式编程思想简介",level:3},{label:"软件开发中的数据流式编程思想",level:3},{label:"软件数据流 vs 硬件数据流",level:3},{label:"数据流思想与状态机思想的对比",level:3},{label:"Bluespec 语言及其流式编程框架 PAClib",level:2},{label:"Bluespec SystemVerilog(BSV)和 PAClib 简介",level:3},{label:"PAClib 中的基础开发组件",level:3},{label:"IFFT 应用实例",level:2},{label:"需求背景",level:3},{label:"代码实现",level:3},{label:"写在最后",level:2}],I=`

数据流式编程的思想

数据流式编程思想简介

数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到 19 世纪 60 年代,由 MIT 的 Jack Dennis 教授开创。

图片

@@ -147,7 +147,7 @@ endinterface PipeOut #(b) pob ) (PipeOut #(c)); -

图片

+

图片

图 13 mkFork 与 mkJoin 节点的示意图

mkForkmkJoin 可以创建简单的并行结构,通过用户自己提供的函数 fork_fn 和 join_fn,由用户决定如何将一个输入数据流拆分成 2 个输出数据流,以及如何把两个输入数据流合并为一个输出数据流。对于 Join 操作而言,要求两个输入端口上均存在数据时,该 Node 才可以执行操作,如果两条路径上处理数据所需的时钟周期数不一致,则 Join 节点会进行等待,直到两个输入都有数据为止。此外,PAClib 中还提供了多种 Fork 节点的变种实现,可以自行了解。

条件分支操作

@@ -158,7 +158,7 @@ endinterface PipeOut #(Tuple2 #(a, Bool)) poa) (PipeOut #(b)); -

图片

+

图片

图 14 mkIfThenElse 节点示意图

mkIfThenElse 可以实现分支逻辑。输入数据是一个 Tuple2#(a, Bool)类型,该节点会根据 Bool 类型的取值将数据包路由到 pipeT 或者 pipeF 子节点。其内部具有一个 FIFO 结构用于存储 Token,从而实现在 pipeT 和 pipeF 两个节点所需处理周期不一致时起到保序的作用。

此外,PAClib 中还提供了 mkIfThenElse_unordered 变种实现,当对输入和输出之间的数据没有严格的顺序要求时,可以使用这个变种来简化设计。For 循环 使用 mkForLoop 可以创建条件分支,其定义及示意图如下:

@@ -286,4 +286,4 @@ endfunction

参考资料:

[1] https://en.wikipedia.org/wiki/Dataflow_programming

[2] Rishiyur S. Nikhil. Two uses of FP techniques in HW design[EB/OL]. 2010[].

-

http://www.cs.ox.ac.uk/ralf.hinze/WG2.8/27/slides/rishiyur2.pdf.

`;export{w as assetURLs,y as default,T as metadata,I as toc}; +

http://www.cs.ox.ac.uk/ralf.hinze/WG2.8/27/slides/rishiyur2.pdf.

`;export{w as assetURLs,I as default,T as metadata,y as toc}; diff --git a/zh-cn/assets/index-3a32ad00.js b/zh-cn/assets/index-043be87f.js similarity index 94% rename from zh-cn/assets/index-3a32ad00.js rename to zh-cn/assets/index-043be87f.js index b08b9fe..cdbb6b7 100644 --- a/zh-cn/assets/index-3a32ad00.js +++ b/zh-cn/assets/index-043be87f.js @@ -1,4 +1,4 @@ -const s="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg",t="/zh-cn/assets/image2-4624885a.gif",p="/zh-cn/assets/image3-ea54df7e.jpg",a=[s,e,t,p],l={label:"直播预告 | RDMA软件接口高层封装",description:"RDMA 作为高速通信协议被数据中心广泛使用,但是因为底层接口设计得过于繁复,对使用者造成了很大的不便,因此我们使用 Rust 语言对 RDMA 进行了一层高层封装。这次分享将介绍这层封装的做法和原理。",cover:"./cover.png",location:"香港",date:"2022-05-17",title:"RDMA Software Interface High Level Package"},c=[{label:"嘉宾介绍",level:2},{label:"讨论内容",level:2},{label:"观看方式",level:2},{label:"特别鸣谢",level:2}],n=`

嘉宾介绍

+const s="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg",t="/zh-cn/assets/image2-4624885a.gif",p="/zh-cn/assets/image3-ea54df7e.jpg",a=[s,e,t,p],c={label:"直播预告 | RDMA软件接口高层封装",description:"RDMA 作为高速通信协议被数据中心广泛使用,但是因为底层接口设计得过于繁复,对使用者造成了很大的不便,因此我们使用 Rust 语言对 RDMA 进行了一层高层封装。这次分享将介绍这层封装的做法和原理。",cover:"./cover.png",location:"香港",date:"2022-05-17",title:"RDMA Software Interface High Level Package"},l=[{label:"嘉宾介绍",level:2},{label:"讨论内容",level:2},{label:"观看方式",level:2},{label:"特别鸣谢",level:2}],n=`

嘉宾介绍

施继成

达坦科技联合创始人兼 CTO,复旦大学软件工程本硕,师从华为基础软件首席科学家、鸿蒙实验室主任陈海波教授。擅长操作系统内核开发、分布式系统、嵌入式系统,对分布式数据一致性有钻深的研究,发表多篇操作系统内核相关论文,累计数百次引用。毕业后曾在谷歌中国、微软亚太和阿里巴巴等公司从事分布式计算和存储等相关工作。入选 2022 年度 6 氪 S 级创业者名册,荣获中国“企业工具与底层软件”领域 “36 位 36 岁以下创业者“称号。

讨论内容

@@ -17,4 +17,4 @@ const s="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg"

转发本文,文末留言提问、加群提问、或者现场提问,我们将赠送 1 本书,数量有限,送完为止。

↓ 扫码加入本次直播交流群;

图片

-

咨询的小伙伴,可添加小月@阅码场的微信 Linuxer2016 咨询

`;export{a as assetURLs,n as default,l as metadata,c as toc}; +

咨询的小伙伴,可添加小月@阅码场的微信 Linuxer2016 咨询

`;export{a as assetURLs,n as default,c as metadata,l as toc}; diff --git a/zh-cn/assets/index-28199dec.js b/zh-cn/assets/index-067c93db.js similarity index 94% rename from zh-cn/assets/index-28199dec.js rename to zh-cn/assets/index-067c93db.js index f78ee0d..1445393 100644 --- a/zh-cn/assets/index-28199dec.js +++ b/zh-cn/assets/index-067c93db.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-6865ae02.png",i=[l],e={label:"Xline v0.6.1: 一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个RTT,从而提高性能。因此,Xline旨在实现高性能的数据访问和跨数据中心场景下的强一致性。",cover:"./cover.png",location:"新疆",author:["准备开社区会议的"],tags:["Xline"],date:"2024-01-18",title:"Xline v0.6.1: a distributed KV store for metadata management"},t=[{label:"Xline是什么?我们为什么要做Xline?",level:2},{label:"V0.6.1版本有什么新功能?",level:2},{label:"社区会议",level:2}],n=`

封面

+const l="/zh-cn/assets/cover-6865ae02.png",i=[l],t={label:"Xline v0.6.1: 一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个RTT,从而提高性能。因此,Xline旨在实现高性能的数据访问和跨数据中心场景下的强一致性。",cover:"./cover.png",location:"新疆",author:["准备开社区会议的"],tags:["Xline"],date:"2024-01-18",title:"Xline v0.6.1: a distributed KV store for metadata management"},e=[{label:"Xline是什么?我们为什么要做Xline?",level:2},{label:"V0.6.1版本有什么新功能?",level:2},{label:"社区会议",level:2}],n=`

封面

Xline是什么?我们为什么要做Xline?

Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。 现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。

但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个RTT,从而提高性能。因此,Xline旨在实现高性能的数据访问和跨数据中心场景下的强一致性。

@@ -36,4 +36,4 @@ const l="/zh-cn/assets/cover-6865ae02.png",i=[l],e={label:"Xline v0.6.1: 一 会议号: 874 4309 5241 密码: 124294 会议链接: -https://zoom.us/j/87443095241?pwd=r3uJhJ9cb0caovHRsi1ay2pFuhBA1Q.1

`;export{i as assetURLs,n as default,e as metadata,t as toc}; +https://zoom.us/j/87443095241?pwd=r3uJhJ9cb0caovHRsi1ay2pFuhBA1Q.1

`;export{i as assetURLs,n as default,t as metadata,e as toc}; diff --git a/zh-cn/assets/index-5238cd79.js b/zh-cn/assets/index-0f5b2c4d.js similarity index 98% rename from zh-cn/assets/index-5238cd79.js rename to zh-cn/assets/index-0f5b2c4d.js index 348f88f..9f1196f 100644 --- a/zh-cn/assets/index-5238cd79.js +++ b/zh-cn/assets/index-0f5b2c4d.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png",i="/zh-cn/assets/image2-1161bb88.png",a="/zh-cn/assets/image3-136f9458.png",e="/zh-cn/assets/image4-75f70bf1.png",o="/zh-cn/assets/image5-64f0abbf.png",n="/zh-cn/assets/image6-29b079bb.png",t="/zh-cn/assets/image7-f8d2626b.png",s="/zh-cn/assets/image8-d242f7b7.png",c="/zh-cn/assets/image9-5e691a52.png",g="/zh-cn/assets/image10-b3a0ad40.png",r="/zh-cn/assets/image11-98ffaf6b.png",D="/zh-cn/assets/image13-d816729e.png",h="/zh-cn/assets/image14-20340934.png",H="/zh-cn/assets/image15-512cff4d.png",L="/zh-cn/assets/image16-ee33a0ea.png",S="/zh-cn/assets/image17-e2c28396.png",m="/zh-cn/assets/image18-69fe4409.png",V="/zh-cn/assets/image19-dfed79f8.png",C="/zh-cn/assets/image20-a636b8b5.png",b="/zh-cn/assets/image21-487e6dd2.png",y="/zh-cn/assets/image22-27167bbd.png",d="/zh-cn/assets/image23-8660cc2c.png",P="/zh-cn/assets/image24-4d2461fd.png",f="/zh-cn/assets/image25-3af02a99.png",z="/zh-cn/assets/image26-a854b9f0.png",v="/zh-cn/assets/image27-5b3ff402.png",I="/zh-cn/assets/image28-f02ef5c0.png",u="/zh-cn/assets/image29-44cafcf0.png",A=[l,p,i,a,e,o,n,t,s,c,g,r,D,h,H,L,S,m,V,C,b,y,d,P,f,z,v,I,u],T={label:"使用SpinalHDL和Cocotb进行敏捷数字芯片设计和验证",description:"领域特定架构已成为计算机发展的一种趋势。在提供更高效算力的同时,它也给底层硬件的开发带来了更大的挑战。传统的芯片设计和验证技术已越来越无法应对这些新的要求和挑战。在芯片设计上,本文将介绍如何使用SpinalHDL,一种基于Scala的新型硬件描述语言(HDL),或者更准确地说是硬件构造语言,提高硬件设计的效率和质量。对于SpinalHDL,本文还介绍了如何利用Scala的类型系统高效地进行复杂硬件的设计。对于验证,本文将介绍基于Python的验证环境Cocotb,以及如何利用Python简洁高效的语言特性及其繁荣的开源社区,提升芯片验证的效率。",cover:"./cover.jpg",location:"新疆",author:["翁万正等"],date:"2024-01-25",title:"Agile Digital Chip Design and Verification with SpinalHDL and Cocotb"},R=[{label:"引言",level:2},{label:"1.1 背景",level:3},{label:"1.2 HDL的演变",level:3},{label:"SpinalHDL",level:2},{label:"2.1 SpinalHDL简介",level:3},{label:"2.2 与传统HDL相同的描述粒度",level:3},{label:"2.3 SpinalHDL相比传统HDL的优势",level:3},{label:"基于元语言构建数字逻辑电路",level:2},{label:"3.1 元语言的概念",level:3},{label:"3.2 硬件设计中的高级类型系统",level:3},{label:"3.3 SpinalHDL之外",level:3},{label:"3.4 HCL的编译流程",level:3},{label:"基于Cocotb的验证",level:2},{label:"4.1 Cocotb简介",level:3},{label:"4.2 基于Cocotb硬件验证的优势",level:3},{label:"4.3 基于Cocotb的验证示例",level:3},{label:"4.3.3 启动仿真",level:3},{label:"结论",level:2},{label:"参考文章",level:2}],B=`

封面

+const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png",i="/zh-cn/assets/image2-1161bb88.png",a="/zh-cn/assets/image3-136f9458.png",e="/zh-cn/assets/image4-75f70bf1.png",o="/zh-cn/assets/image5-64f0abbf.png",n="/zh-cn/assets/image6-29b079bb.png",t="/zh-cn/assets/image7-f8d2626b.png",s="/zh-cn/assets/image8-d242f7b7.png",c="/zh-cn/assets/image9-5e691a52.png",r="/zh-cn/assets/image10-b3a0ad40.png",g="/zh-cn/assets/image11-98ffaf6b.png",H="/zh-cn/assets/image13-d816729e.png",D="/zh-cn/assets/image14-20340934.png",h="/zh-cn/assets/image15-512cff4d.png",L="/zh-cn/assets/image16-ee33a0ea.png",S="/zh-cn/assets/image17-e2c28396.png",m="/zh-cn/assets/image18-69fe4409.png",C="/zh-cn/assets/image19-dfed79f8.png",V="/zh-cn/assets/image20-a636b8b5.png",b="/zh-cn/assets/image21-487e6dd2.png",y="/zh-cn/assets/image22-27167bbd.png",d="/zh-cn/assets/image23-8660cc2c.png",P="/zh-cn/assets/image24-4d2461fd.png",f="/zh-cn/assets/image25-3af02a99.png",A="/zh-cn/assets/image26-a854b9f0.png",z="/zh-cn/assets/image27-5b3ff402.png",v="/zh-cn/assets/image28-f02ef5c0.png",I="/zh-cn/assets/image29-44cafcf0.png",R=[l,p,i,a,e,o,n,t,s,c,r,g,H,D,h,L,S,m,C,V,b,y,d,P,f,A,z,v,I],u={label:"使用SpinalHDL和Cocotb进行敏捷数字芯片设计和验证",description:"领域特定架构已成为计算机发展的一种趋势。在提供更高效算力的同时,它也给底层硬件的开发带来了更大的挑战。传统的芯片设计和验证技术已越来越无法应对这些新的要求和挑战。在芯片设计上,本文将介绍如何使用SpinalHDL,一种基于Scala的新型硬件描述语言(HDL),或者更准确地说是硬件构造语言,提高硬件设计的效率和质量。对于SpinalHDL,本文还介绍了如何利用Scala的类型系统高效地进行复杂硬件的设计。对于验证,本文将介绍基于Python的验证环境Cocotb,以及如何利用Python简洁高效的语言特性及其繁荣的开源社区,提升芯片验证的效率。",cover:"./cover.jpg",location:"新疆",author:["翁万正等"],date:"2024-01-25",title:"Agile Digital Chip Design and Verification with SpinalHDL and Cocotb"},w=[{label:"引言",level:2},{label:"1.1 背景",level:3},{label:"1.2 HDL的演变",level:3},{label:"SpinalHDL",level:2},{label:"2.1 SpinalHDL简介",level:3},{label:"2.2 与传统HDL相同的描述粒度",level:3},{label:"2.3 SpinalHDL相比传统HDL的优势",level:3},{label:"基于元语言构建数字逻辑电路",level:2},{label:"3.1 元语言的概念",level:3},{label:"3.2 硬件设计中的高级类型系统",level:3},{label:"3.3 SpinalHDL之外",level:3},{label:"3.4 HCL的编译流程",level:3},{label:"基于Cocotb的验证",level:2},{label:"4.1 Cocotb简介",level:3},{label:"4.2 基于Cocotb硬件验证的优势",level:3},{label:"4.3 基于Cocotb的验证示例",level:3},{label:"4.3.3 启动仿真",level:3},{label:"结论",level:2},{label:"参考文章",level:2}],B=`

封面

摘要:
领域特定架构已成为计算机发展的一种趋势。在提供更高效算力的同时,它也给底层硬件的开发带来了更大的挑战。传统的芯片设计和验证技术已越来越无法应对这些新的要求和挑战。在芯片设计上,本文将介绍如何使用SpinalHDL,一种基于Scala的新型硬件描述语言(HDL),或者更准确地说是硬件构造语言,提高硬件设计的效率和质量。对于SpinalHDL,本文还介绍了如何利用Scala的类型系统高效地进行复杂硬件的设计。对于验证,本文将介绍基于Python的验证环境Cocotb,以及如何利用Python简洁高效的语言特性及其繁荣的开源社区,提升芯片验证的效率。

引言

@@ -114,17 +114,17 @@ const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png"

和类型、产品类型和私有类型构造器: 产品类型(在大多数编程语言中称为struct)是一种保存不同类型的零个或多个值的数据结构。在SpinalHDL中,产品类型用于表示信号的“Bundle”,例如:

图片

图8:从语义角度看,经典的RISC流水线由寄存器文件访问、缓存访问、指令获取/解码、算术运算和其他功能组成。

-

图片

-

和类型,也称为标记联合,是一种可以容纳来自固定数量的不同类型之一的单个值并保留所容纳值的类型的数据结构。虽然Verilog和传统软件编程语言如C都没有直接支持和类型,但我们可以在C中模拟其行为:

图片

+

和类型,也称为标记联合,是一种可以容纳来自固定数量的不同类型之一的单个值并保留所容纳值的类型的数据结构。虽然Verilog和传统软件编程语言如C都没有直接支持和类型,但我们可以在C中模拟其行为:

+

图片

一个简单但广为人知的和类型的例子是'Option'类型:

-

图片

+

图片

表2:从SpinalHDL到Verilog的映射。

当存在和类型和产品类型时,可以对可表示值的集合施加约束。例如,在深度嵌入式HCL中,由“VALID”信号门控的数据信号可以使用“Option”类型表示,这样在检查“VALID”是否为“高”之前,无法读取该值。

在浅度嵌入式HCL中,和类型只能用于电路结构而不能用于数据,但我们仍然可以使用新类型模式模拟“Option[T]”的行为。我们创建一个函数:

-

图片

+

图片

根据值选择onSome或onNone。由于DynamicOption类型构造器是私有的,所以只需要保护值免受未经意访问的影响而不必检查VALID。

-

图片

+

图片

子类型和参数化多态:子类型(最常见的形式是继承)是一种构建类型层级结构的机制。参数化多态,也称为泛型,是一种编写以类型为输入并以单态类型或函数为输出的类型级别函数的机制。

3.3 SpinalHDL之外

SpinalHDL成功地利用了Scala中的许多构造来提高硬件设计过程的效率,但是在从硬件中抽象出属性并在编译时进行验证方面还有更多的可能性。在本节中,我们介绍了来自不同软件编程语言的各种方法,我们认为这些方法也可以使硬件设计受益。

@@ -150,7 +150,7 @@ const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png"
  • 类型检查和IR编译。
  • 生成IR到Verilog代码。(一些深度嵌入式HCL,如Clash,也可以通过面向软件的编译器编译为模拟电路行为的可执行程序)。
  • -

    图片

    +

    图片

    图11:基于Scala的浅嵌入式HCL需要,而基于Haskell的深嵌入式HCL Clash

    基于Cocotb的验证

    4.1 Cocotb简介

    @@ -160,7 +160,7 @@ const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png"

    除了支持不同类型的模拟器外,Cocotb相对于使用Verilog、System Verilog或VHDL进行验证具有各种优势,这些优势可以加速整个硬件设计过程。以下是Cocotb的一些显著优势:

    4.2.1 简洁高效的语言特性

    比传统的用于验证的语言如Verilog、VHDL和System Verilog更高效、更具表现力和更简洁。与使用这些传统语言编码相比,使用Python来实现复杂功能需要更少的代码。

    -

    图片

    +

    图片

    图12: 基于Cocotb的验证框架

    与此同时,Python拥有简单的语法和丰富的在线学习资料,使初学者更容易掌握。此外,Python是一种高级编程语言,具有诸多高级特性,如面向对象编程,可以帮助程序员编写更可重用的代码。

    在大多数硬件验证的情况下,C/C++被用于构建DUT的参考模型,参考模型的代码通过DPI集成到SV(System Verilog)的测试代码中。Python比其他语言(如C/C++)在构建参考模型方面更高效的一个编程场景是涉及超过64位的大整数的算术运算。密码学算法如ECC和RSA以及哈希函数通常涉及128位到2048位范围内宽度的大整数运算。C/C++中的原始类型仅支持最大64位的数字。如果使用C/C++构建您的参考模型,处理这些大整数将会很麻烦。下面的C程序实现了两个超过64位宽度的大整数的加法运算:

    @@ -187,16 +187,16 @@ const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png"

    表4:被测试矩阵乘法器的接口

    4.3.1 构建参考模型

    矩阵乘法器的参考模型可以基于numpy实现,它是一个广泛应用的Python包,提供了丰富的矩阵运算功能。利用numpy,可以直接使用方法“matmul”来实现矩阵乘法,无需使用循环语法。参考模型的具体Python实现如下:

    -

    图片

    +

    图片

    4.3.2 搭建验证平台

    基于Cocotb构建的简单验证平台结构如下图所示。验证平台主要包括四个部分:1)驱动器;2)监控器;3)参考模型;4)缓冲区。驱动器使用Python包random生成随机的输入信号,包括“valid i”、“a i”和“b i”。当“valid i”为高电平时,生成的“a i”和“b i”被发送到参考模型,并获取相应的参考输出。参考输出通过Python包Queue实现的缓冲区存储,一旦输出信号“valid o”为高电平,监控器会抓取DUT的输出端口,并将其值与从缓冲区中取出的参考输出进行比较。驱动器和监控器的功能都是通过Python的协程实现的,类似于多线程,并且可以并行执行。

    -

    图片

    +

    图片

    图14:基于Cocotb的验证平台结构

    4.3.3 启动仿真

    基于Cocotb的验证代码可以通过Makefile在仿真器上启动,而无需直接与仿真器进行交互。此外,使用cocotb-test包中提供的“simulator.run”方法,可以直接在Python函数中启动验证过程。然后可以直接运行该函数,或者使用pytest,一个成熟的Python测试框架,来管理所有测试的执行。

    -

    图片

    +

    图片

    一些pytest命令来管理测试单元的执行:

    -

    图片

    +

    图片

    结论

    本文主要讨论了基于新兴的开源工具SpinalHDL和Cocotb的数字硬件设计和验证,我们相信这些工具可以改变传统芯片开发过程。硬件设计的需求越来越多样化,但设计语言和工具并未明显改进。SpinalHDL和Cocotb试图将一些先进和高效的软件设计概念和方法引入到硬件开发流程中。与基于System Verilog或VHDL的传统设计和验证方法相比,SpinalHDL和Cocotb可以显著提高硬件开发的效率和质量。

    值得注意的是,SpinalHDL不是一种新的高级综合(HLS)工具,而是与Verilog或VHDL具有相同的描述层次。结合我们使用Spinal的开发经验,总结了它相对于Verilog和VHDL的三个主要优势,包括可靠性、表达性和可重用性。关于可靠性,Spinal可以提供更精确的基本电路元素抽象,在编译过程中提前检查一些设计规则,并分离设计和仿真元素。在表达性方面,SpinalHDL建立在Scala上,这是一种高级编程语言。基于Scala的特性,包括面向对象、函数式编程、递归和丰富的集合类型,更容易让硬件开发人员实现和参数化他们的设计。在可重用性方面,SpinalHDL本身提供了对常用电路元素的丰富封装来实现重用。对于设计师来说,使用Scala及其相关工具链更容易生成更具可重用性的代码和构建自己的代码库。

    @@ -209,4 +209,4 @@ const l="/zh-cn/assets/cover-78ccac63.jpg",p="/zh-cn/assets/image1-bf7fa473.png" [4] B. J. Rosser, “Cocotb: a python-based digital logic verification framework,” 2018. [5] Cocotb, -“https://github.com/cocotb/cocotb.”

    `;export{A as assetURLs,B as default,T as metadata,R as toc}; +“https://github.com/cocotb/cocotb.”

    `;export{R as assetURLs,B as default,u as metadata,w as toc}; diff --git a/zh-cn/assets/index-85fa6207.js b/zh-cn/assets/index-1dde53bb.js similarity index 97% rename from zh-cn/assets/index-85fa6207.js rename to zh-cn/assets/index-1dde53bb.js index 0272c47..23a48ca 100644 --- a/zh-cn/assets/index-85fa6207.js +++ b/zh-cn/assets/index-1dde53bb.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png",t="/zh-cn/assets/image3-204919ac.png",l="/zh-cn/assets/image4-e50f112d.png",p="/zh-cn/assets/image5-cdb8d1de.png",i=[e,a,t,l,p],n={label:"数据库隔离级别及MVCC",description:"数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Database isolation level and MVCC"},o=[{label:"数据库隔离级别介绍",level:2},{label:"Read uncommitted",level:3},{label:"Repeatable read",level:3},{label:"Serializable",level:3},{label:"Snapshot 隔离级别及 MVCC",level:2},{label:"一点联想",level:2},{label:"总结",level:2}],s=`

    数据库隔离级别介绍

    +const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png",l="/zh-cn/assets/image3-204919ac.png",p="/zh-cn/assets/image4-e50f112d.png",t="/zh-cn/assets/image5-cdb8d1de.png",i=[e,a,l,p,t],n={label:"数据库隔离级别及MVCC",description:"数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Database isolation level and MVCC"},o=[{label:"数据库隔离级别介绍",level:2},{label:"Read uncommitted",level:3},{label:"Repeatable read",level:3},{label:"Serializable",level:3},{label:"Snapshot 隔离级别及 MVCC",level:2},{label:"一点联想",level:2},{label:"总结",level:2}],s=`

    数据库隔离级别介绍

    数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:

    Table 1:

    图片

    @@ -8,19 +8,19 @@ const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png

    图片

    在 Read uncommitted 的隔离级别中,多个同时执行的事务是能够互相看到互相没有 commit 的写操作,因此可以认为这种隔离级别几乎没有作用。在上述例子中,Operation 2 读到的内容是 “AA”,Operation 4 读到的内容则是“DD”,即使第二个事务最终 Rollback 了。Read committed 有两个事务同时被执行,自上而下是执行顺序。

    Table 3:

    -

    图片

    +

    图片

    在 Read committed 的隔离级别中,只有被 Commit 后的结果可以被看到,因此在 Table 2 的执行顺序中,Operation 2 和 4 都能够读取到 “AA” 的值,即 Key 1 的值没有改变。如果按照 Table 3 中的情况执行两个事务,Operation 2 读到的值为 “AA”,Operation 5 读到的值为 “DD”,因为此时事务 2 已经执行成功。

    Repeatable read

    如果在 Table 3 中的事务 1 两次连续读操作,用户想要保证读到相同的值,那就需要使用 repeatable read 隔离级别。在这个隔离级别中,在同一个事务中对同一条数据的多次读取保证会得到相同的值,即使这个过程中该数据被其他已经提交的事务修改掉。当然该隔离级别也有一些情况无法保证隔离性,比如下列情况:

    Table 4:

    -

    图片

    +

    图片

    在 repeatable read 的隔离级别下,Operation 2 的返回结果是 ["CC"] —— 只有 Key 3 的值被返回了,但是 Operation 5 的返回值是 ["CC", "DD"]。总结一下,repeatable read 的隔离级别仍然无法很好处理涉及多条数据的情况,特别是当有新的数据插入或者删除的情况。

    Serializable

    最严格的隔离级别叫做 Serializable,这个级别的定义也是最清晰明了的,在这种隔离级别下的执行结果,就“仿佛”是将所有事务串行起来一条一条执行的结果。上面这句话中值得强调的是 “仿佛” 二字,为了提高性能,几乎没有数据库是采用真正物理意义上的串行执行来保证 Serializable 的,仅仅达到类似效果即可,实现的方法是可以多种多样的。在 Serializable 级别下还有一个细致的分类,叫做 Snapshot,该分类与 Serializable 类似但约束能力上稍弱。正是因为 Snapshot 在约束上的放松,使得其实现起来具有更好的性能,也是绝大多数数据库默认支持的隔离级别。下面我们就来说说 Snapshot,以及引申出来的 MVCC 实现方法。

    Snapshot 隔离级别及 MVCC

    想要区分最严格的 Serializable 和 Snapshot,我们还是从例子来看,看下列两个事务的操作:

    Table 5:

    -

    图片

    +

    图片

    如果按照严格的 Serializable 的隔离级别,无论 Transaction 1 和 2 哪个先执行,最终 Key 1 和 2 的值都是相同的,有可能是 “AA”, 也有可能是 “BB”。但是在 Snapshot 的级别下执行,执行结果则是 Key 1 和 2 的值进行互换。很明显在这种情况下 Snapshot 的隔离能力明显更弱。Isolation 对于存在读写交集的事务的先后顺序无能为力,只能保证存在写冲突的事务间的先后顺序。

    上述例子中,我们虽然具体地看了 Snapshot 隔离级别和 Serializable 之间的差异,但是我们还没有完整介绍过 Snapshot 的特性:

    `;export{e as assetURLs,n as default,i as metadata,t as toc}; diff --git a/zh-cn/assets/index-28241c38.js b/zh-cn/assets/index-6f8e9292.js similarity index 89% rename from zh-cn/assets/index-28241c38.js rename to zh-cn/assets/index-6f8e9292.js index 8bbab4b..44f0b15 100644 --- a/zh-cn/assets/index-28241c38.js +++ b/zh-cn/assets/index-6f8e9292.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/image1-3ae2277f.jpg",a="/zh-cn/assets/image1-0a18e154.png",e=[t,a],s={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",location:"中国海南",tags:["Xline"],date:"2023-02-01",title:"Distributed laboratory live broadcast l Consensus algorithm and consistent metadata management across data centers"},n=[],i=`

    在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。

    +const t="/zh-cn/assets/image1-3ae2277f.jpg",e="/zh-cn/assets/image1-0a18e154.png",a=[t,e],n={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",location:"中国海南",tags:["Xline"],date:"2023-02-01",title:"Distributed laboratory live broadcast l Consensus algorithm and consistent metadata management across data centers"},s=[],i=`

    在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。

    本周四(2 月 2 日)晚上 8 点,达坦科技和分布式实验室合作,由达坦科技 Rust 分布式存储工程师赵佳炜讲述共识算法与跨数据中心一致性的元数据管理,并介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。

    图片

    直播亮点:

    @@ -9,6 +9,6 @@ const t="/zh-cn/assets/image1-3ae2277f.jpg",a="/zh-cn/assets/image1-0a18e154.png
  • Xline 接下来的优化方向。
  • 请添加分布式实验室小助手的微信,报名参与直播:

    -

    图片

    +

    图片

    达坦科技(DatenLord)推出的开源分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并保证数据的一致性,方便业务系统实现多地多中心多活部署。

    -

    GitHub 链接:https:github.com/datenlord/Xline

    `;export{e as assetURLs,i as default,s as metadata,n as toc}; +

    GitHub 链接:https:github.com/datenlord/Xline

    `;export{a as assetURLs,i as default,n as metadata,s as toc}; diff --git a/zh-cn/assets/index-22d5e656.js b/zh-cn/assets/index-71801d47.js similarity index 96% rename from zh-cn/assets/index-22d5e656.js rename to zh-cn/assets/index-71801d47.js index 99f8163..1fe4386 100644 --- a/zh-cn/assets/index-22d5e656.js +++ b/zh-cn/assets/index-71801d47.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg",e=[t,o],s={label:"活动预告 | 第二届硬件敏捷开发与验证方法学研讨会",description:"2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会。",cover:"./cover.png",location:"新加坡",date:"2023-08-20",title:"Upcoming Events l 2nd Hardware Agile Development and Verification Methodology Workshop"},n=[{label:"2023 RISC-V中国峰会",level:2},{label:"活动信息",level:2}],r=`

    图片

    +const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg",s=[t,o],e={label:"活动预告 | 第二届硬件敏捷开发与验证方法学研讨会",description:"2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会。",cover:"./cover.png",location:"新加坡",date:"2023-08-20",title:"Upcoming Events l 2nd Hardware Agile Development and Verification Methodology Workshop"},n=[{label:"2023 RISC-V中国峰会",level:2},{label:"活动信息",level:2}],r=`

    图片

    2023 RISC-V中国峰会

    2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会

    随着数字芯片的设计规模和复杂度越来越大,加之芯片市场的竞争越来越激烈,如何提升数字芯片的开发和验证效率成为业界关注的焦点。虽然各种设计工具、验证方法学层出不穷,但是一直没有得到业界广泛认可。目前业界普遍采用的还是基于Verilog、SystemVerilog、VHDL和UVM的工具和方法。

    @@ -16,4 +16,4 @@ const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg"

    收看链接:
    https://wx.vzan.com/live/tvchat-904511107?v=1691984417574
    或欢迎点击下方链接预约公众号直播。

    -

    感兴趣的观众可以添加海报中的达坦科技小助手二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨

    `;export{e as assetURLs,r as default,s as metadata,n as toc}; +

    感兴趣的观众可以添加海报中的达坦科技小助手二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨

    `;export{s as assetURLs,r as default,e as metadata,n as toc}; diff --git a/zh-cn/assets/index-eb1ecfd7.js b/zh-cn/assets/index-78a34e98.js similarity index 92% rename from zh-cn/assets/index-eb1ecfd7.js rename to zh-cn/assets/index-78a34e98.js index ab04b63..aa88b97 100644 --- a/zh-cn/assets/index-eb1ecfd7.js +++ b/zh-cn/assets/index-78a34e98.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-3674aa81.jpg",e=[t],s={label:"Rust唠嗑室:Xline跨数据中心一致性管理",description:"2022年10月15日,达坦科技和Rust语言中文社区合作,在Rust唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目Xline,这一跨云的metadata(元数据)KV存储的产品是如何实现高性能跨数据中心的数据一致性管理的",cover:"./cover.jpg",location:"香港",date:"2022-10-20",title:"Rust Chatterbox: Xline Cross Data Center Consistency Management"},n=[{label:"内容介绍",level:2}],a=`

    封面

    +const t="/zh-cn/assets/cover-3674aa81.jpg",e=[t],s={label:"Rust唠嗑室:Xline跨数据中心一致性管理",description:"2022年10月15日,达坦科技和Rust语言中文社区合作,在Rust唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目Xline,这一跨云的metadata(元数据)KV存储的产品是如何实现高性能跨数据中心的数据一致性管理的",cover:"./cover.jpg",location:"香港",date:"2022-10-20",title:"Rust Chatterbox: Xline Cross Data Center Consistency Management"},a=[{label:"内容介绍",level:2}],n=`

    封面

    2022 年 10 月 15 日,达坦科技和 Rust 语言中文社区合作,在 Rust 唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目 Xline,这一跨云的 metadata(元数据)KV 存储的产品是如何实现高性能跨数据中心的数据一致性管理的。

    内容介绍

    -

    施继成首先介绍了做Xline这个产品的动机。最初2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念。与我们都熟知的cloud computing(“云计算”)不同的是,sky computing,如其表面意义所讲,是天空中有很多的云,是解决跨云的问题。如何打破不同云之间的隔阂,或者打通和最大化利用跨云数据是当前面临的一个难题,也是我们的目标所在。如今谈论云计算时,我们不需要考虑云资源的部署,可扩展性等问题,因为云厂商已经都帮忙做了。但是,一旦跨云,则无论算力的迁移,或数据的迁移,都是摆在我们眼前要攻克的难题。达坦科技在做的就是解决“如何做跨云数据交互”的问题,我们致力于将分布式系统从数据中心范围扩散至全球范围,这样即使单个数据中心宕机,却仍不影响用户使用数据。

    `;export{e as assetURLs,a as default,s as metadata,n as toc}; +

    施继成首先介绍了做Xline这个产品的动机。最初2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念。与我们都熟知的cloud computing(“云计算”)不同的是,sky computing,如其表面意义所讲,是天空中有很多的云,是解决跨云的问题。如何打破不同云之间的隔阂,或者打通和最大化利用跨云数据是当前面临的一个难题,也是我们的目标所在。如今谈论云计算时,我们不需要考虑云资源的部署,可扩展性等问题,因为云厂商已经都帮忙做了。但是,一旦跨云,则无论算力的迁移,或数据的迁移,都是摆在我们眼前要攻克的难题。达坦科技在做的就是解决“如何做跨云数据交互”的问题,我们致力于将分布式系统从数据中心范围扩散至全球范围,这样即使单个数据中心宕机,却仍不影响用户使用数据。

    `;export{e as assetURLs,n as default,s as metadata,a as toc}; diff --git a/zh-cn/assets/index-d543ad74.js b/zh-cn/assets/index-7e0a1d2c.js similarity index 96% rename from zh-cn/assets/index-d543ad74.js rename to zh-cn/assets/index-7e0a1d2c.js index 808ad56..ec6d1be 100644 --- a/zh-cn/assets/index-d543ad74.js +++ b/zh-cn/assets/index-7e0a1d2c.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-b206ef91.jpg",t="/zh-cn/assets/image1-e0f43926.jpg",e="/zh-cn/assets/image2-d20c4e0b.jpg",a="/zh-cn/assets/image1-50beaba8.png",o=[l,t,e,a],i={label:"2023 hackathon攻略新鲜出炉!最后一周还不速来报名!",description:"DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!",cover:"./cover.jpg",location:"中国香港",date:"2023-12-05",title:"Ding! 2023 hackathon tips fresh from the oven! Last week to sign up before it's too late!"},s=[{label:"Hackathon2023",level:2},{label:"大赛时间线",level:3},{label:"达坦科技 DatenLord 赛题",level:2},{label:"主题",level:3},{label:"背景介绍",level:3},{label:"赛题介绍",level:3},{label:"项目目标",level:3},{label:"项目假设",level:3},{label:"评估标准",level:3},{label:"注意事项",level:3}],n=`

    图片

    +const l="/zh-cn/assets/cover-b206ef91.jpg",t="/zh-cn/assets/image1-e0f43926.jpg",e="/zh-cn/assets/image2-d20c4e0b.jpg",a="/zh-cn/assets/image1-50beaba8.png",o=[l,t,e,a],i={label:"2023 hackathon攻略新鲜出炉!最后一周还不速来报名!",description:"DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!",cover:"./cover.jpg",location:"中国香港",date:"2023-12-05",title:"Ding! 2023 hackathon tips fresh from the oven! Last week to sign up before it's too late!"},n=[{label:"Hackathon2023",level:2},{label:"大赛时间线",level:3},{label:"达坦科技 DatenLord 赛题",level:2},{label:"主题",level:3},{label:"背景介绍",level:3},{label:"赛题介绍",level:3},{label:"项目目标",level:3},{label:"项目假设",level:3},{label:"评估标准",level:3},{label:"注意事项",level:3}],r=`

    图片

    Hackathon2023

    DatenLord Hackathon 2023 正式启动! 达坦科技基于其跨云分布式文件系统 DatenLord 项目,结合 AI 大模型时代背景,搭建了擂台,在此正式向您发出邀约!

    本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台 PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!

    @@ -53,4 +53,4 @@ const l="/zh-cn/assets/cover-b206ef91.jpg",t="/zh-cn/assets/image1-e0f43926.jpg"

    图片

    如有任何问题欢迎联系达坦科技微信小助手:DatenLord_Tech或发送邮件至 info@datenlord.com

    -

    图片

    `;export{o as assetURLs,n as default,i as metadata,s as toc}; +

    图片

    `;export{o as assetURLs,r as default,i as metadata,n as toc}; diff --git a/zh-cn/assets/index-962501d1.js b/zh-cn/assets/index-87f0525d.js similarity index 98% rename from zh-cn/assets/index-962501d1.js rename to zh-cn/assets/index-87f0525d.js index 5439c9a..6ec03d7 100644 --- a/zh-cn/assets/index-962501d1.js +++ b/zh-cn/assets/index-87f0525d.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-1329fc54.png",l="/zh-cn/assets/image1-03c3323d.png",s="/zh-cn/assets/image2-19f32eff.png",i="/zh-cn/assets/image3-7a5e2db9.png",a="/zh-cn/assets/image4-a055bd84.png",t="/zh-cn/assets/image5-b8622f96.png",p="/zh-cn/assets/image6-5093ee75.png",n="/zh-cn/assets/image7-9fa09d91.png",o="/zh-cn/assets/image8-84dd6aec.png",c="/zh-cn/assets/image9-2f762488.png",r="/zh-cn/assets/image10-f2b55246.png",h="/zh-cn/assets/image11-c5d501bb.png",d="/zh-cn/assets/image12-56434254.png",m="/zh-cn/assets/image13-1c12a6c5.png",u="/zh-cn/assets/image14-69943dbe.png",b="/zh-cn/assets/image15-45a7b638.png",g="/zh-cn/assets/image16-5b765721.jpg",f="/zh-cn/assets/image17-8fb19d7c.jpg",R="/zh-cn/assets/image18-c8c4d5a1.jpg",y="/zh-cn/assets/image19-fb1e5167.png",S="/zh-cn/assets/image20-a391e7d8.jpg",_=[e,l,s,i,a,t,p,n,o,c,r,h,d,m,u,b,g,f,R,y,S],M={label:"计算机体系结构|MIT6.175和MIT6.375学习笔记",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了MIT6.175和MIT6.375的关键内容以及Lab实践的学习笔记。",cover:"./cover.png",location:"中国香港",author:["kazutoiris"],tags:["硬件加速"],date:"2023-05-17",title:"Computer Architecture|MIT6.175 and MIT6.375 Study Notes"},v=[{label:"MIT 6.175",level:2},{label:"环境搭建",level:3},{label:"四种 FIFO (Lab 4)",level:3},{label:"Ready 和 Valid 握手",level:3},{label:"EHR 寄存器 (Lab4)",level:3},{label:"RISC-V (Lab5)",level:3},{label:"Branch Prediction (Lab6)",level:3},{label:"DDR3 Memory (Lab7)",level:3},{label:"Cache Coherence (Project)",level:3},{label:"MIT 6.375",level:2},{label:"Bluespec 中的一些特性",level:3},{label:"CORDIC 算法",level:3},{label:"一些常用的概念",level:2},{label:"Setup Time 、Hold Time 和 Clock-to-Q Time",level:3},{label:"SRAM",level:3},{label:"DRAM",level:3},{label:"References",level:2}],C=`

    图片

    +const e="/zh-cn/assets/cover-1329fc54.png",l="/zh-cn/assets/image1-03c3323d.png",s="/zh-cn/assets/image2-19f32eff.png",i="/zh-cn/assets/image3-7a5e2db9.png",a="/zh-cn/assets/image4-a055bd84.png",t="/zh-cn/assets/image5-b8622f96.png",p="/zh-cn/assets/image6-5093ee75.png",n="/zh-cn/assets/image7-9fa09d91.png",o="/zh-cn/assets/image8-84dd6aec.png",c="/zh-cn/assets/image9-2f762488.png",r="/zh-cn/assets/image10-f2b55246.png",h="/zh-cn/assets/image11-c5d501bb.png",d="/zh-cn/assets/image12-56434254.png",m="/zh-cn/assets/image13-1c12a6c5.png",u="/zh-cn/assets/image14-69943dbe.png",b="/zh-cn/assets/image15-45a7b638.png",g="/zh-cn/assets/image16-5b765721.jpg",f="/zh-cn/assets/image17-8fb19d7c.jpg",R="/zh-cn/assets/image18-c8c4d5a1.jpg",S="/zh-cn/assets/image19-fb1e5167.png",y="/zh-cn/assets/image20-a391e7d8.jpg",_=[e,l,s,i,a,t,p,n,o,c,r,h,d,m,u,b,g,f,R,S,y],v={label:"计算机体系结构|MIT6.175和MIT6.375学习笔记",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了MIT6.175和MIT6.375的关键内容以及Lab实践的学习笔记。",cover:"./cover.png",location:"中国香港",author:["kazutoiris"],tags:["硬件加速"],date:"2023-05-17",title:"Computer Architecture|MIT6.175 and MIT6.375 Study Notes"},M=[{label:"MIT 6.175",level:2},{label:"环境搭建",level:3},{label:"四种 FIFO (Lab 4)",level:3},{label:"Ready 和 Valid 握手",level:3},{label:"EHR 寄存器 (Lab4)",level:3},{label:"RISC-V (Lab5)",level:3},{label:"Branch Prediction (Lab6)",level:3},{label:"DDR3 Memory (Lab7)",level:3},{label:"Cache Coherence (Project)",level:3},{label:"MIT 6.375",level:2},{label:"Bluespec 中的一些特性",level:3},{label:"CORDIC 算法",level:3},{label:"一些常用的概念",level:2},{label:"Setup Time 、Hold Time 和 Clock-to-Q Time",level:3},{label:"SRAM",level:3},{label:"DRAM",level:3},{label:"References",level:2}],C=`

    图片

    在 2023 年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了 MIT6.175 和 MIT6.375 的关键内容以及 Lab 实践的学习笔记

    6.175 和 6.375 的课程和 Lab 学习都有一定的难度,要求采用 Bluespec 语言实现 RISC-V 处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab 环节还涉及软硬件联合开发,要求基于所实现的 RISC-V 处理器运行真实的 RISC-V 程序,并给出性能评估。希望第一期学员(GitHub:kazutoiris )的学习笔记对想从事数字芯片设计的工程师有所帮助。

    MIT 6.175

    @@ -346,7 +346,7 @@ Memory Consistency → 内存连贯性

    具有两套完整的读写字线和读写位线。
    All the images in this section are cited from [宇芯电子].

    DRAM

    -

    图片

    +

    图片

    1. DRAM 写
    @@ -380,4 +380,4 @@ All the images in this section are cited from [宇芯电子].


    达坦科技硬件设计学习社区持续开放,点击原文了解社区学习详情。若想询问加入细节,请添加下方小助手微信号或info@datenlord.com

    -

    图片

    `;export{_ as assetURLs,C as default,M as metadata,v as toc}; +

    图片

    `;export{_ as assetURLs,C as default,v as metadata,M as toc}; diff --git a/zh-cn/assets/index-2a54f9b1.js b/zh-cn/assets/index-8a16857f.js similarity index 99% rename from zh-cn/assets/index-2a54f9b1.js rename to zh-cn/assets/index-8a16857f.js index 0130661..124de29 100644 --- a/zh-cn/assets/index-2a54f9b1.js +++ b/zh-cn/assets/index-8a16857f.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/07123c0a1614c5c0256c2c44fccab7ad-82d2cfc4.jpeg",a="/zh-cn/assets/dbb615367665aefe1e8dc131faf7135d-ab0138b7.png",t="/zh-cn/assets/7e55ab5e49360b59ae14ad51bd9f8266-a3540f96.png",p="/zh-cn/assets/50e844cef87960be41630d431f7dba76-74a09282.png",s="/zh-cn/assets/da011de83bcdac4720de4265f06487fa-a09f8943.png",r="/zh-cn/assets/ab91fcebd0198e3ba3e68a1f0ede0dcb-2954efad.png",n="/zh-cn/assets/d6753cc7dafac128a184192d73a671d0-cbc3aa8e.png",l="/zh-cn/assets/8140b483b2b9992795a40af43149d92e-6324a4f1.png",c="/zh-cn/assets/261faba035c5925dd1bf0052673a2819-65bae75e.png",d="/zh-cn/assets/7ccbe7094043e218ad241cc3c2e3c871-e3e8431a.png",i="/zh-cn/assets/7a18e9fc6512a89b6e74a92a92580823-5ee6182a.png",o="/zh-cn/assets/3df9c5c4ff35c6cde20f54a80ed5bb0d-6b5bfe86.png",m="/zh-cn/assets/03beb98ee570de53f1aa4b866838924b-60f7cb4e.jpeg",u="/zh-cn/assets/13065eb252d78f86c7d84a7537e730d7-9522963a.png",h="/zh-cn/assets/0f55765329135bae263d77175baf52b7-2df179ec.png",I=[e,a,t,p,s,r,n,l,c,d,i,o,m,u,h],P={label:"blue-ethernet 高性能FPGA网络数据包处理项目详解",description:"blue-ethernet项目使用Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在FPGA上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析Ethernet/IP/UDP网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的APR报文处理单元,用于自动解析设备的物理MAC地址。",cover:"./07123c0a1614c5c0256c2c44fccab7ad.jpeg",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-11-02",title:"blue ethernet High Performance FPGA Network Packet Processing Project Details"},D=[{label:"简介",level:2},{label:"文件目录概览",level:2},{label:"组件",level:2},{label:"数据流处理模块",level:3},{label:"UdpIpLayer",level:3},{label:"UdpIpLayerForRdma",level:3},{label:"MacLayer",level:2},{label:"ARP Processor",level:3},{label:"UdpIpEthRx",level:3},{label:"UdpIpEthTx",level:3},{label:"UdpIpArpEthRxTx",level:3},{label:"PriorityFlowContro",level:3},{label:"性能和面积",level:2},{label:"入门教程",level:2},{label:"仿真测试",level:3},{label:"使用方法",level:3},{label:"相关链接",level:2}],b=`

    +const e="/zh-cn/assets/07123c0a1614c5c0256c2c44fccab7ad-82d2cfc4.jpeg",a="/zh-cn/assets/dbb615367665aefe1e8dc131faf7135d-ab0138b7.png",t="/zh-cn/assets/7e55ab5e49360b59ae14ad51bd9f8266-a3540f96.png",p="/zh-cn/assets/50e844cef87960be41630d431f7dba76-74a09282.png",s="/zh-cn/assets/da011de83bcdac4720de4265f06487fa-a09f8943.png",r="/zh-cn/assets/ab91fcebd0198e3ba3e68a1f0ede0dcb-2954efad.png",n="/zh-cn/assets/d6753cc7dafac128a184192d73a671d0-cbc3aa8e.png",l="/zh-cn/assets/8140b483b2b9992795a40af43149d92e-6324a4f1.png",c="/zh-cn/assets/261faba035c5925dd1bf0052673a2819-65bae75e.png",d="/zh-cn/assets/7ccbe7094043e218ad241cc3c2e3c871-e3e8431a.png",i="/zh-cn/assets/7a18e9fc6512a89b6e74a92a92580823-5ee6182a.png",o="/zh-cn/assets/3df9c5c4ff35c6cde20f54a80ed5bb0d-6b5bfe86.png",m="/zh-cn/assets/03beb98ee570de53f1aa4b866838924b-60f7cb4e.jpeg",u="/zh-cn/assets/13065eb252d78f86c7d84a7537e730d7-9522963a.png",h="/zh-cn/assets/0f55765329135bae263d77175baf52b7-2df179ec.png",I=[e,a,t,p,s,r,n,l,c,d,i,o,m,u,h],P={label:"blue-ethernet 高性能FPGA网络数据包处理项目详解",description:"blue-ethernet项目使用Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在FPGA上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析Ethernet/IP/UDP网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的APR报文处理单元,用于自动解析设备的物理MAC地址。",cover:"./07123c0a1614c5c0256c2c44fccab7ad.jpeg",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-11-02",title:"blue ethernet High Performance FPGA Network Packet Processing Project Details"},D=[{label:"简介",level:2},{label:"文件目录概览",level:2},{label:"组件",level:2},{label:"数据流处理模块",level:3},{label:"UdpIpLayer",level:3},{label:"UdpIpLayerForRdma",level:3},{label:"MacLayer",level:2},{label:"ARP Processor",level:3},{label:"UdpIpEthRx",level:3},{label:"UdpIpEthTx",level:3},{label:"UdpIpArpEthRxTx",level:3},{label:"PriorityFlowContro",level:3},{label:"性能和面积",level:2},{label:"入门教程",level:2},{label:"仿真测试",level:3},{label:"使用方法",level:3},{label:"相关链接",level:2}],C=`

    简介

    blue-ethernet 项目使用 Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在 FPGA 上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析 Ethernet/IP/UDP 网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的 APR 报文处理单元,用于自动解析设备的物理 MAC 地址。

    除了构建标准的 UDP/IP/Ethernet 协议栈,blue-ethernet 还增加了对 RoCE(RDMA over Converged Ethernet)协议的支持,具体包括:

    @@ -413,4 +413,4 @@ make verilog TARGET=UdpIpEthTx SUPPORT_RDMA=TRUE
  • blue-wrapper: https://github.com/wengwz/blue-wrapper
  • 关于项目更多的详细信息可关注链接:

    -

    https://github.com/wengwz/blue-ethernet

    `;export{I as assetURLs,b as default,P as metadata,D as toc}; +

    https://github.com/wengwz/blue-ethernet

    `;export{I as assetURLs,C as default,P as metadata,D as toc}; diff --git a/zh-cn/assets/index-866fab75.js b/zh-cn/assets/index-8bf3af0a.js similarity index 99% rename from zh-cn/assets/index-866fab75.js rename to zh-cn/assets/index-8bf3af0a.js index ac415ea..65c7fd8 100644 --- a/zh-cn/assets/index-866fab75.js +++ b/zh-cn/assets/index-8bf3af0a.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-6865ae02.png",l="/zh-cn/assets/image1-1421d5c3.png",t="/zh-cn/assets/image2-03115587.png",i="/zh-cn/assets/image3-8a8d1c33.png",a="/zh-cn/assets/image4-c1593056.png",p=[e,l,t,i,a],s={label:"Xline 源码解读(一) —— 初识 CURP 协议",description:"Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。",cover:"./cover.png",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-07-13",title:"Interpretation of Xline source code (1)——Introduction to CURP protocol"},n=[{label:"Xline 是什么",level:2},{label:"Xline 的整体架构",level:2},{label:"CURP 协议简介",level:2},{label:"CURP 是什么?",level:3},{label:"为什么选择 CURP 协议",level:3},{label:"fast path 与 slow path",level:3},{label:"Summary",level:2}],o=`

    封面

    +const e="/zh-cn/assets/cover-6865ae02.png",l="/zh-cn/assets/image1-1421d5c3.png",t="/zh-cn/assets/image2-03115587.png",i="/zh-cn/assets/image3-8a8d1c33.png",a="/zh-cn/assets/image4-c1593056.png",p=[e,l,t,i,a],s={label:"Xline 源码解读(一) —— 初识 CURP 协议",description:"Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。",cover:"./cover.png",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-07-13",title:"Interpretation of Xline source code (1)——Introduction to CURP protocol"},n=[{label:"Xline 是什么",level:2},{label:"Xline 的整体架构",level:2},{label:"CURP 协议简介",level:2},{label:"CURP 是什么?",level:3},{label:"为什么选择 CURP 协议",level:3},{label:"fast path 与 slow path",level:3},{label:"Summary",level:2}],r=`

    封面

    Xline 是什么

    Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的 meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。

    Xline 的整体架构

    @@ -77,4 +77,4 @@ b. follower 接收到请求后,由于 z = 9 与 witness 中的 z = 7 相冲突

    Xline 是一款提供跨数据中心强一致性的分布式 KV 存储,其核心问题之一便是如何在跨数据中心这种高延迟的广域网环境中提供高性能的强一致性保证。传统的分布式共识算法,如 Raft 和 Multi-Paxos,通过让所有操作都满足持久化存储和有序性前提来保证状态机一致性。而 CURP 协议则是对达成共识的场景做了更细粒度的划分,将协议分割成了前端(fast path)和后端(slow path),前端只保证了提案会被持久化到集群当中,而后端不仅保证了持久化,也保证了所有保存了该提案的节点会按照相同的顺序执行命令,保证了状态机的一致性。

    关于 CURP 协议的简介就到这里,更多的细节欢迎参考我们的其他文章和分享,如下:
    Curp 共识协议的重新思考

    -

    DatenLord | Xline Geo-distributed KV Storage

    `;export{p as assetURLs,o as default,s as metadata,n as toc}; +

    DatenLord | Xline Geo-distributed KV Storage

    `;export{p as assetURLs,r as default,s as metadata,n as toc}; diff --git a/zh-cn/assets/index-557885ec.js b/zh-cn/assets/index-8cb7e806.js similarity index 98% rename from zh-cn/assets/index-557885ec.js rename to zh-cn/assets/index-8cb7e806.js index 9f77b17..8594766 100644 --- a/zh-cn/assets/index-557885ec.js +++ b/zh-cn/assets/index-8cb7e806.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-4e3a952e.webp",a="/zh-cn/assets/image1-d5c7d3eb.webp",l="/zh-cn/assets/image2-4eebd69c.webp",r="/zh-cn/assets/image3-11daa3fe.webp",i="/zh-cn/assets/image4-30403828.webp",t="/zh-cn/assets/image5-7c696faa.webp",m="/zh-cn/assets/image6-a778303e.webp",s="/zh-cn/assets/image7-ba335a80.webp",n="/zh-cn/assets/image8-6a8e4dea.webp",o="/zh-cn/assets/image9-9202db97.webp",p=[e,a,l,r,i,t,m,s,n,o],c={label:"Karmada 管理有状态应用 Xline 的早期探索与实践",description:"目前随着云原生技术和云市场的不断成熟,越来越多的 IT 厂商开始投入到跨云多集群的怀抱当中。以下是 flexera 在 2023 年中关于云原生市场对多云多集群管理的接受程度的调查报告(info.flexera.com)",cover:"./cover.webp",location:"中国香港",author:["赵佳炜"],date:"2024-03-21",title:"Early Explorations and Practices of Xline a Stateful Application Managed by Karmada"},d=[{label:"背景与动机",level:2},{label:"Karmada 管理有状态应用存在哪些挑战?",level:2},{label:"Xline 的一些早期尝试",level:2},{label:"部署",level:3},{label:"扩缩容",level:3},{label:"滚动更新",level:3},{label:"总结",level:2},{label:"Xline 社区会议",level:2}],b=`

    封面

    +const e="/zh-cn/assets/cover-4e3a952e.webp",a="/zh-cn/assets/image1-d5c7d3eb.webp",l="/zh-cn/assets/image2-4eebd69c.webp",r="/zh-cn/assets/image3-11daa3fe.webp",i="/zh-cn/assets/image4-30403828.webp",t="/zh-cn/assets/image5-7c696faa.webp",m="/zh-cn/assets/image6-a778303e.webp",s="/zh-cn/assets/image7-ba335a80.webp",n="/zh-cn/assets/image8-6a8e4dea.webp",p="/zh-cn/assets/image9-9202db97.webp",o=[e,a,l,r,i,t,m,s,n,p],c={label:"Karmada 管理有状态应用 Xline 的早期探索与实践",description:"目前随着云原生技术和云市场的不断成熟,越来越多的 IT 厂商开始投入到跨云多集群的怀抱当中。以下是 flexera 在 2023 年中关于云原生市场对多云多集群管理的接受程度的调查报告(info.flexera.com)",cover:"./cover.webp",location:"中国香港",author:["赵佳炜"],date:"2024-03-21",title:"Early Explorations and Practices of Xline a Stateful Application Managed by Karmada"},d=[{label:"背景与动机",level:2},{label:"Karmada 管理有状态应用存在哪些挑战?",level:2},{label:"Xline 的一些早期尝试",level:2},{label:"部署",level:3},{label:"扩缩容",level:3},{label:"滚动更新",level:3},{label:"总结",level:2},{label:"Xline 社区会议",level:2}],b=`

    封面

    背景与动机

    目前随着云原生技术和云市场的不断成熟,越来越多的 IT 厂商开始投入到跨云多集群的怀抱当中。以下是 flexera 在 2023 年中关于云原生市场对多云多集群管理的接受程度的调查报告(info.flexera.com)

    图片

    @@ -68,7 +68,7 @@ const e="/zh-cn/assets/cover-4e3a952e.webp",a="/zh-cn/assets/image1-d5c7d3eb.web

    目前,由于 scale in/out 不可避免地会涉及到 membership change 的过程,而在 Karmada 下不同 member cluster 之间缺少必要的同步机制,因此,scale 的过程还是存在局限性:一次水平 scale out 只能扩容一个集群,一次垂直扩容也只能在某个指定的 member cluster 上进行。

    滚动更新

    -

    图片

    +

    图片

    对于滚动更新而言,大致的过程如上图所示:

    1. 用户修改 Karmada 上的 Xline 资源,修改其中的 xline 镜像版本
    2. @@ -89,4 +89,4 @@ const e="/zh-cn/assets/cover-4e3a952e.webp",a="/zh-cn/assets/image1-d5c7d3eb.web 会议号: 813 0547 8985
      密码: 520159
      会议链接:
      -https://zoom.us/j/81305478985?pwd=PsnbMGQy1ZqxYyd67cAkaGROfnIoQa.1

      `;export{p as assetURLs,b as default,c as metadata,d as toc}; +https://zoom.us/j/81305478985?pwd=PsnbMGQy1ZqxYyd67cAkaGROfnIoQa.1

      `;export{o as assetURLs,b as default,c as metadata,d as toc}; diff --git a/zh-cn/assets/index-2645d3b0.js b/zh-cn/assets/index-8f0491cb.js similarity index 94% rename from zh-cn/assets/index-2645d3b0.js rename to zh-cn/assets/index-8f0491cb.js index 7bb11d7..53357c4 100644 --- a/zh-cn/assets/index-2645d3b0.js +++ b/zh-cn/assets/index-8f0491cb.js @@ -1,4 +1,4 @@ -const s="/zh-cn/assets/cover-78606c04.png",t="/zh-cn/assets/image1-f46bfcc6.jpg",n=[s,t],o={label:"Rust X Datenlord:第二届中国Rust开发者大会回顾",description:"达坦科技自成立以来积极探索软硬件深度融合,专注于打造新一代的开源跨云存储平台,以满足不同行业客户对数据跨云、跨数据中心高性能访问的需求。",cover:"./cover.png",location:"新加坡",date:"2022-08-04",title:"Rust X Datenlord: Review of the Second China Rust Developer Conference"},r=[{label:"专题演讲",level:2},{label:"线上 workshop",level:2},{label:"参与我们",level:2}],e=`

      封面

      +const s="/zh-cn/assets/cover-78606c04.png",t="/zh-cn/assets/image1-f46bfcc6.jpg",n=[s,t],o={label:"Rust X Datenlord:第二届中国Rust开发者大会回顾",description:"达坦科技自成立以来积极探索软硬件深度融合,专注于打造新一代的开源跨云存储平台,以满足不同行业客户对数据跨云、跨数据中心高性能访问的需求。",cover:"./cover.png",location:"新加坡",date:"2022-08-04",title:"Rust X Datenlord: Review of the Second China Rust Developer Conference"},e=[{label:"专题演讲",level:2},{label:"线上 workshop",level:2},{label:"参与我们",level:2}],r=`

      封面

      达坦科技自成立以来积极探索软硬件深度融合,专注于打造新一代的开源跨云存储平台,以满足不同行业客户对数据跨云、跨数据中心高性能访问的需求。

      今年以来陆续发声,将达坦科技开源项目 async-rdma 的技术实践和案例对外输出,坚定地做 Rust 语言的布道,也将达坦科技探索的新一代硬件敏捷开发的研究成果在各硬件技术大会上做分享(本周的次条为达坦科技的团队在南京参加中国计算机学会芯片大会的回顾)。

      专题演讲

      @@ -12,4 +12,4 @@ const s="/zh-cn/assets/cover-78606c04.png",t="/zh-cn/assets/image1-f46bfcc6.jpg"

      参与我们

      目前,我们将整个库放在了 Github.com/datenlord/async-rdma 上,并且也在持续迭代中,欢迎感兴趣用 Rust 语言实现高性能编程的你前来讨论。

      有意加入 Rust 前沿交流讨论群,请添加小助手微信:

      -

      封面

      `;export{n as assetURLs,e as default,o as metadata,r as toc}; +

      封面

      `;export{n as assetURLs,r as default,o as metadata,e as toc}; diff --git a/zh-cn/assets/index-2a0835cc.js b/zh-cn/assets/index-917f23ec.js similarity index 92% rename from zh-cn/assets/index-2a0835cc.js rename to zh-cn/assets/index-917f23ec.js index b5606cf..12e3bf7 100644 --- a/zh-cn/assets/index-2a0835cc.js +++ b/zh-cn/assets/index-917f23ec.js @@ -1,4 +1,4 @@ -const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg",s="/zh-cn/assets/image2-f93efd4a.jpg",t="/zh-cn/assets/image1-50beaba8.png",o=[p,n,s,t],a={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},r=[],e=`

      SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。

      +const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg",s="/zh-cn/assets/image2-f93efd4a.jpg",t="/zh-cn/assets/image1-50beaba8.png",a=[p,n,s,t],r={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},o=[],e=`

      SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。

      达坦科技(DatenLord) 致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。

      达坦科技采用硬件加速提升存储性能,目前采用 FPGA、ASIC 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用。在 2022 年 12 月,达坦科技曾联合 SpinalHDL 社区举办一场题为《SpinalHDL 应用前景探索》的线上研讨会,收获海内外 SpinalHDL 爱好者的欢迎。

      而在北京时间 2023 年 7 月 7 日下午 14:00-17:00,达坦科技将联合 SpinalHDL 社区,以及四川芯测电子技术有限公司举办一场题为 SpinalHDL 的使用和开发经验研讨会,旨在和大家分享 SpinalHDL 最新的实践、挑战和经验的分享。

      @@ -13,4 +13,4 @@ const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg" 474-6575-9473

      图片

      对开源硬件感兴趣的朋友,可以添加小助手微信,加入达坦科技硬件群

      -

      图片

      `;export{o as assetURLs,e as default,a as metadata,r as toc}; +

      图片

      `;export{a as assetURLs,e as default,r as metadata,o as toc}; diff --git a/zh-cn/assets/index-9e270336.js b/zh-cn/assets/index-9e270336.js new file mode 100644 index 0000000..5ebb8c4 --- /dev/null +++ b/zh-cn/assets/index-9e270336.js @@ -0,0 +1,153 @@ +const s="/zh-cn/assets/cover-ca6ff87c.webp",e="/zh-cn/assets/image1-78435096.webp",n=[s,e],l={label:"Xline中区间树实现小结",description:"在Xline最近的一次重构中, 我们发现有两个在关键路径上的数据结构Speculative Pool和Uncommitted Pool导致了性能瓶颈。这两个数据结构用于在CURP中进行冲突检测。具体来说, 由于CURP协议的要求, 对于每个处理的command, 需要在已经接收的commands中找到所有与当前command相冲突的commands。",cover:"./cover.webp",location:"中国香港",author:["尹正皓"],date:"2024-04-18",title:"A short summary of the implementation of interval trees in Xline"},a=[{label:"实现区间树的起因",level:2},{label:"区间树实现简介",level:2},{label:"插入/删除",level:3},{label:"查询重叠操作",level:3},{label:"使用 Safe Rust 实现区间树",level:2},{label:"困难点",level:3},{label:"Rc封面

      +

      实现区间树的起因

      +

      在 Xline 最近的一次重构中, 我们发现有两个在关键路径上的数据结构 Speculative Pool 和 Uncommitted Pool 导致了性能瓶颈。这两个数据结构用于在 CURP 中进行冲突检测。具体来说, 由于 CURP 协议的要求, 对于每个处理的 command, 需要在已经接收的 commands 中找到所有与当前 command 相冲突的 commands。

      +

      例如对于 KV 操作 put/get_range/delete_range, 我们需要考虑这些操作之间可能的冲突情况。由于每个 KV 操作都会有一个 key 的范围, 所以问题就转化为要查询某一个 key 范围和某个 Pool 中所有 key 范围的集合是否有相交。采用朴素遍历整个集合的方法会导致每次查询的时间复杂度为 O(n),从而降低效率并导致性能瓶颈。

      +

      为了解决这一问题, 我们需要引入区间树这一数据结构。区间树能够高效支持重叠区间的插入,删除和查询操作, 这三种操作都可以在 O(log(n)) 的时间内完成。因此, 我们可以利用区间树维护 key 范围的集合, 从而解决性能瓶颈的问题。

      +

      区间树实现简介

      +

      Xline 中的区间树是基于 Introduction to Algorithms (3rd ed.) 实现的, 它是由二叉平衡树扩展而来。

      +

      区间树以一颗二叉平衡树为基础(例如使用红黑树实现), 将区间本身作为平衡树的 key。对于区间 [low, high] , 我们首先按照 low 值进行排序, 如果 low 值相同, 再按照 high 值进行排序, 这样对区间集合能够定义一个全序的关系(如果不处理重复区间则不需要对 high 排序)。同时, 对于平衡树的每一个节点, 我们在这个节点上记录以这个节点为根的子树中 high 的最大值, 记为 max 。

      +

      插入/删除

      +

      与红黑树的插入/删除相同, 最坏时间复杂度为 O(log(n))

      +

      查询重叠操作

      +

      给出一个区间 i , 我们需要查询当前树中是否有区间和 i 重合。在 Introduction to Algorithms 中给出的伪代码如下

      +

      图片

      +

      有了 max 的定义, 解决这个问题的思路就非常简单了: 对于以 x 为根的子树 T_x , 如果 i 不和 x_i 相交, 那么 i 一定是在 x_i 的左侧或者右侧。

      +
        +
      1. 如果 i 在 x_i 的左侧这时可以直接排除右子树, 因为这时 i.high 比 x_i.low 还要小
      2. +
      3. 如果 i 在 x_i 的右侧在这种情况下, 我们无法直接排除左子树, 因为左子树中的节点区间仍然可能和 i 相交。这时候 max 值就派上用场了:
      4. +
      + +

      通过以上两点可以验证上述伪代码的正确性, 并且从代码可以看出查询的最坏时间复杂度为 O(log(n)) 。

      +

      使用 Safe Rust 实现区间树

      +

      困难点

      +

      为了构建区间树, 我们首先需要实现一个红黑树。在红黑树中, 每个树节点需要指向父节点, 这就要求一个节点实例存在多个所有权。

      +

      Rc<RefCell>

      +

      最初我尝试使用了 Rust 最常见的多所有权的实现 Rc<RefCell> , 树节点结构类似于以下的代码:

      +
      struct Node<T, V> {
      +    left: Option<NodeRef<T, V>>,
      +    right: Option<NodeRef<T, V>>,
      +    parent: Option<NodeRef<T, V>>,
      +    ...
      +}
      +
      +struct NodeRef<T, V>(Rc<RefCell<Node<T, V>>>);
      +
      +

      从数据结构定义上看起来还算清晰, 但是实际使用起来相当繁琐, 因为 RefCell 要求用户明确地调用 borrow , 或者 borrow_mut , 我不得不构建很多 helper functions 来简化实现, 下面是一些例子:

      +
      impl<T, V> NodeRef<T, V> {
      +    fn left<F, R>(&self, op: F) -> R
      +    where
      +        F: FnOnce(&NodeRef<T, V>) -> R,
      +    {
      +        op(self.borrow().left())
      +    }
      +
      +    fn parent<F, R>(&self, op: F) -> R
      +    where
      +        F: FnOnce(&NodeRef<T, V>) -> R,
      +    {
      +        op(self.borrow().parent())
      +    }
      +
      +    fn set_right(&self, node: NodeRef<T, V>) {
      +        let _ignore = self.borrow_mut().right.replace(node);
      +    }
      +
      +    fn set_max(&self, max: T) {
      +        let _ignore = self.borrow_mut().max.replace(max);
      +    }
      +    ...
      +}
      +
      +

      RefCell 使用上不符合人体工程学是一点, 更糟糕的是我们在代码中需要使用大量的 Rc::clone , 因为在自上而下遍历树节点时, 我们需要持有一个节点的 owned type, 而不是一个引用。例如在之前提到的 INTERVAL-SEARCH 操作中, 每次 x = x.left 或者 x = x.right , 首先需要 borrow x 本身, 再赋值给 x。因此需要先取得左(或右)节点的 owned type, 再更新 x 到新值。这样导致大量的节点计数开销。

      +

      具体开销到底有多大?我尝试对于我们上面的实现进行 benchmark, 使用随机数据插入和删除。我本机环境为 Intel 13600KF 和 DDR4 内存。

      +
      test bench_interval_tree_insert_100           ... bench:       9,821 ns/iter (+/- 263)
      +test bench_interval_tree_insert_1000          ... bench:     215,362 ns/iter (+/- 6,536)
      +test bench_interval_tree_insert_10000         ... bench:   2,999,694 ns/iter (+/- 134,979)
      +test bench_interval_tree_insert_remove_100    ... bench:      18,395 ns/iter (+/- 750)
      +test bench_interval_tree_insert_remove_1000   ... bench:     385,858 ns/iter (+/- 7,659)
      +test bench_interval_tree_insert_remove_10000  ... bench:   5,465,355 ns/iter (+/- 114,735)
      +
      +

      使用相同数据和环境, 和 etcd 的 golang 区间树实现进行对比:

      +
      BenchmarkIntervalTreeInsert100-20                 123747             12250 ns/op
      +BenchmarkIntervalTreeInsert1000-20                  7119            189613 ns/op
      +BenchmarkIntervalTreeInsert10_000-20                 340           3237907 ns/op
      +BenchmarkIntervalTreeInsertRemove100-20            24584             45579 ns/op
      +BenchmarkIntervalTreeInsertRemove1000-20             344           3462977 ns/op
      +BenchmarkIntervalTreeInsertRemove10_000-20             3         358284695 ns/op
      +
      +

      可以看到我们的 Rust 实现并无优势, 甚至有时插入操作还会更慢。(注: 这里的 etcd 的节点删除实现似乎有问题, 观察节点数量从 1000->10000 时耗时的增长, 复杂度可能不是 O(log(n)))

      +

      线程安全问题

      +

      即使我们勉强接受以上的性能, 一个更严重的问题浮出水面: Rc<RefCell> 无法在多线程环境下使用! 由于 Xline 是在 Rust 的 Tokio runtime 之上构建, 需要在多个线程间共享一个区间树实例。可惜的是, Rc 本身是 !Send , 因为 Rc 内部的引用计数是以非原子的方式递增/减的。那么这就导致整个区间树的数据结构无法发送到其他线程。除非我们采用一个专用线程, 并且通过 channel 与这个线程进行通信, 我们无法在多线程环境下使用。

      +

      其他智能指针

      +

      于是我们需要考虑其他智能指针来解决这个问题。一个自然的想法是使用 Arc<RefCell> 。然而, RefCell 本身是 !Sync , 因为 RefCell 的 borrow checking 只能在单线程下使用, 无法同时由多个线程共享, 并且 Arc 是 Send 当且仅当 T 是 Sync , 因为 Arc 本身允许克隆。

      +

      Arc<Mutex>?

      +

      那么在多线程环境多所有权似乎只能够使用 Arc<mutex> 了。但是显然这对于我们的用例来说是一个 anti-pattern, 因为这样我们就需要对每一个节点都加上一把锁, 而树中可能有数十万乃至几百万的节点, 这是不可接受的。

      +

      QCell

      +

      在使用常规方法无果后, 我们尝试使用了 qcell 这个 crate, 其中 QCell 作为 RefCell 的多线程替代品。作者非常巧妙地解决了多所有权下借用检查的问题。

      +

      QCell 设计

      +

      由于 qcell 的设计在 GhostCell 的论文中有正式的证明, 这里我就介绍介绍一下 GhostCell 论文中的设计:

      +

      在 Rust 中, 对于数据操作的权限和数据本身是绑定在一起的, 也就是说, 你首先要拥有一个数据, 才能修改它的状态。具体一点, 想要修改数据 T , 你要么有一个 T 本身, 要么有一个 &mut T 。

      +

      GhostCell 的设计概念是将对数据操作的权限和数据本身分开, 那么对于一种数据, 数据 T 本身是一个类型, 而它的权限同样也是是一个具体的类型, 记为 P_t 。这种设计相比与 Rust 现有设计就更加灵活, 因为可以让一个权限类型的实例拥有对一个数据集合的权限, 即一个 P_t 拥有多个 T 。在这种设计下, 只要权限类型实例本身是线程安全的, 它所管理的这一个数据集合也是线程安全的。

      +

      在 qcell 中使用方法如下, 首先需要创建一个 QCellOwner 代表前述的权限, QCell 则表示储存的数据。

      +
      let mut owner = QCellOwner::new();
      +let item = Arc::new(QCell::new(&owner, Vec::<u8>::new()));
      +owner.rw(&item).push(0);
      +
      +

      QCellOwner 拥有注册到它这里的 QCell 的读写权限(通过 QCellOwner::rw 或者 QCellOwner::ro ), 所以只要 QCellOwner 是线程安全, QCell 中的数据也是线程安全的。在这里 QCellOwner 本身是 Send + Sync , QCell 也可以是 Send + Sync 只要 T 满足:

      +
      impl<T: ?Sized + Send> Send for QCell<T>
      +impl<T: ?Sized + Send + Sync> Sync for QCell<T>
      +
      +

      使用 QCell

      +

      得益于它的设计, QCell 本身开销非常小(这里的具体的开销不展开讲了), 因为它借助于 Rust 类型系统使得 borrow checking 是在编译期检查的, 而 RefCell 相比之下则是在运行时检查, 因此使用 QCell 不仅能在多线程环境下使用, 还能够提升一部分性能。

      +

      接下来就是应用 QCell 到我们的树实现上了。由于 QCell 只提供内部可变性, 要能够使用多重所有权, 我们还需要有 Arc , 结构大致看起来如下:

      +
      pub struct IntervalTree {
      +    node_owner: QCellOwner,
      +    ...
      +}
      +
      +struct NodeRef<T, V>(Arc<QCell<Node<T, V>>>);
      +
      +

      看起来不错, 那么性能如何呢?

      +
      test bench_interval_tree_insert_100           ... bench:      41,486 ns/iter (+/- 71)
      +test bench_interval_tree_insert_1000          ... bench:     586,854 ns/iter (+/- 13,947)
      +test bench_interval_tree_insert_10000         ... bench:   7,726,849 ns/iter (+/- 102,820)
      +test bench_interval_tree_insert_remove_100    ... bench:      75,569 ns/iter (+/- 325)
      +test bench_interval_tree_insert_remove_1000   ... bench:   1,135,232 ns/iter (+/- 7,539)
      +test bench_interval_tree_insert_remove_10000  ... bench:  15,686,474 ns/iter (+/- 194,385)
      +
      +

      比较之前的测试结果, 性能竟然下降了 1-3 倍。这说明最大的开销不是 Cell, 而是引用计数, 在我们的区间树用例中, 使用 Arc 比 Rc 慢了非常多。

      +

      一个不使用 Arc 的方法是使用 arena 分配, 即一次性对所有对象分配内存, 并且销毁也是一次性的, 但是这在树的数据结构中并不适用, 因为我们需要动态地分配和销毁节点的内存。

      +

      数组模拟指针

      +

      性能测试反映出我们的智能指针尝试是失败的。在 Rust 所有权模型下, 使用智能指针来实现树结构是非常糟糕的。

      +

      那么我们可不可以不使用指针来实现呢? 一个自然的想法是使用数组来模拟指针。

      +

      于是我们的树结构重新设计如下:

      +
      pub struct IntervalTree {
      +    nodes: Vec<Node>,
      +    ...
      +}
      +
      +pub struct Node {
      +    left: Option<u32>,
      +    right: Option<u32>,
      +    parent: Option<u32>,
      +    ...
      +}
      +
      +

      可以看出在 Rust 中数组模拟指针的优势是不需要某个节点的所有权, 只需要记录下某个节点在 Vec 中的位置即可。每次插入新节点即向 nodes 后面 push 一个节点, 它的模拟指针就是 nodes.len() - 1 。

      +

      对于插入操作非常简单, 但是如果我们需要删除节点呢? 如果使用朴素的删除方法: 更新树节点的指针后直接将 Vec 中的对应的节点置为空, 那么这样就会在我们的 Vec 中留下一个“空洞”。这样的话我们需要再额外维护一个链表结构来记录这个“空洞”的位置, 以便在下一次插入的时候能重新使用。而且这种方法会导致 nodes 这个 Vec 的空间难以回收, 即使大部分节点已经被删除。

      +

      那么如何解决这个问题呢? 接下来我参照了 petgraph 中的方法, 在删除一个节点时, 将这个节点与 Vec 中最后一个节点交换再移除, 这样就解决了之前的内存回收的问题。需要注意的是, 我们需要同时更新与最后一个节点有关节点的指针, 因为它的位置发生了变化。在 petgraph 的图实现中, 这个操作可能是很耗时的, 因为一个节点可能会连接多条边, 但是在我们的树用例中, 我们只需要更新这个节点的父亲/左孩子/右孩子总共 3 个节点, 因此这个操作是 O(1) 的, 这样就非常高效的解决了节点删除的问题。

      +

      我们再来对我们的新实现进行 benchmark:

      +
      test bench_interval_tree_insert_100           ... bench:       3,333 ns/iter (+/- 87)
      +test bench_interval_tree_insert_1000          ... bench:      85,477 ns/iter (+/- 3,552)
      +test bench_interval_tree_insert_10000         ... bench:   1,406,707 ns/iter (+/- 20,796)
      +test bench_interval_tree_insert_remove_100    ... bench:       7,157 ns/iter (+/- 69)
      +test bench_interval_tree_insert_remove_1000   ... bench:     189,277 ns/iter (+/- 3,014)
      +test bench_interval_tree_insert_remove_10000  ... bench:   3,060,029 ns/iter (+/- 50,829)
      +
      +

      从结构来看这次的性能提升非常之大, 对比之前的 Rc<RefCell> 或者是 etcd 的 golang 的实现大约快了 1-2 倍。

      +

      使用数组模拟指针不仅轻松解决了所有权的问题, 并且由于数组内存的连续性使其对于缓存更加友好, 比纯指针性能甚至会更高。

      +

      总结

      +

      至此, 我们成功完美解决了使用 safe Rust 实现区间树的问题。从之前所述的多种尝试来看, 在 Rust 中使用引用计数智能指针来实现树或者图的数据结构是失败的, 因为这些智能指针并不适用于大量的内存操作。将来如果需要使用 safe Rust 实现指针类数据结构, 我会优先考虑使用数组而不是智能指针。

      `;export{n as assetURLs,t as default,l as metadata,a as toc}; diff --git a/zh-cn/assets/index-d4dfb508.js b/zh-cn/assets/index-a59ad30d.js similarity index 95% rename from zh-cn/assets/index-d4dfb508.js rename to zh-cn/assets/index-a59ad30d.js index c3823f7..7cb6ff0 100644 --- a/zh-cn/assets/index-d4dfb508.js +++ b/zh-cn/assets/index-a59ad30d.js @@ -1,4 +1,4 @@ -const o="/zh-cn/assets/cover-85e5394f.jpg",e="/zh-cn/assets/image1-ec71eac6.webp",t=[o,e],l={label:"一封来自 DatenLord 关于GSoC 2024的挑战书",description:"Google Summer of Code 是一项全球性的在线计划,致力于将新的contributor引入开源软件开发领域。GSoC 参与者在导师的指导下,与开源组织合作开展为期 12 周以上的编程项目。今年,达坦科技入选作为开源社区组织,携CNCF Sandbox项目Xline下众多有趣、创新且有挑战性的题目参与本次活动。",cover:"./cover.jpg",location:"中国香港",date:"2024-02-29",title:"A Challenge Letter from DatenLord on GSoC 2024"},r=[{label:"为什么要参加 GSoC?",level:2},{label:"期待开源爱好者参与的项目",level:2},{label:"参与指南",level:2},{label:"活动重要时间点",level:2},{label:"联系方式",level:2}],s=`

      图片

      +const o="/zh-cn/assets/cover-85e5394f.jpg",e="/zh-cn/assets/image1-ec71eac6.webp",t=[o,e],l={label:"一封来自 DatenLord 关于GSoC 2024的挑战书",description:"Google Summer of Code 是一项全球性的在线计划,致力于将新的contributor引入开源软件开发领域。GSoC 参与者在导师的指导下,与开源组织合作开展为期 12 周以上的编程项目。今年,达坦科技入选作为开源社区组织,携CNCF Sandbox项目Xline下众多有趣、创新且有挑战性的题目参与本次活动。",cover:"./cover.jpg",location:"中国香港",date:"2024-02-29",title:"A Challenge Letter from DatenLord on GSoC 2024"},i=[{label:"为什么要参加 GSoC?",level:2},{label:"期待开源爱好者参与的项目",level:2},{label:"参与指南",level:2},{label:"活动重要时间点",level:2},{label:"联系方式",level:2}],r=`

      图片

      Google Summer of Code 是一项全球性的在线计划,致力于将新的 contributor 引入开源软件开发领域。GSoC 参与者在导师的指导下,与开源组织合作开展为期 12 周以上的编程项目。今年,达坦科技入选作为开源社区组织,携 CNCF Sandbox 项目 Xline 下众多有趣、创新且有挑战性的题目参与本次活动。
      https://summerofcode.withgoogle.com/programs/2024/organizations/datenlord-6z

      期待志同道合的,敢于挑战自我的小伙伴积极加入我们~

      @@ -57,4 +57,4 @@ GSoC 初步结果公示

      对于报名方式有任何疑问,或者对某一个项目非常感兴趣,并且想要深入了解的同学,欢迎加入 Xline Discord 进行提问或与项目导师进行进一步沟通:
      https://discord.com/invite/hqDRtYkWzm

      您也可以扫码添加小助手微信,或发邮件至info@datenlord.com 进行咨询。

      -

      图片

      `;export{t as assetURLs,s as default,l as metadata,r as toc}; +

      图片

      `;export{t as assetURLs,r as default,l as metadata,i as toc}; diff --git a/zh-cn/assets/index-6618c0b5.js b/zh-cn/assets/index-a5e56ae7.js similarity index 98% rename from zh-cn/assets/index-6618c0b5.js rename to zh-cn/assets/index-a5e56ae7.js index 2cde4b2..ce92d29 100644 --- a/zh-cn/assets/index-6618c0b5.js +++ b/zh-cn/assets/index-a5e56ae7.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/e4031380f79f643b21d6bdfd37c46a1c-95e167c8.jpeg",s="/zh-cn/assets/8108518a82f752ddea6832ce7bc15560-3d5249bd.png",a="/zh-cn/assets/cf12e52cb9d0fbb7359c08e1cfc674bc-9774dac8.png",c="/zh-cn/assets/9d0ce540d5b4e7c3cb1a055c1413bdc9-a833a409.png",n="/zh-cn/assets/f7aae2cd2b075c3f567ff87285f738c2-476d6b84.png",t="/zh-cn/assets/bb02cb50b10cee5e7d575210aaeacd71-1661168b.png",l=[e,s,a,c,n,t],r={label:"Xline 源码解读(四)—— CURP 状态机引擎",description:"在上一篇源码解读的文章(Xline 源码解读(三) —— CURP Server 的实现)中,我们简单阐述了Xline 的 Curp Server 是如何实现的。接下来,就让我们话接上回,继续深入地来了解 Curp Server 中的一些核心的数据结构,特别是 conflict_checked_channel 和 command worker,它们相互协作,共同推动着 CURP Server 内部状态机状态转换。",cover:"./e4031380f79f643b21d6bdfd37c46a1c.jpeg",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-10-19",title:"Xline Source Code Interpretation (IV) CURP state machine engine"},p=[{label:"为什么我们需要冲突检测队列?",level:2},{label:"冲突检测队列是如何工作的?",level:2},{label:"状态机引擎的架构",level:2},{label:"状态是如何转换的",level:2},{label:"Summary",level:2}],o=`

      +const e="/zh-cn/assets/e4031380f79f643b21d6bdfd37c46a1c-95e167c8.jpeg",s="/zh-cn/assets/8108518a82f752ddea6832ce7bc15560-3d5249bd.png",a="/zh-cn/assets/cf12e52cb9d0fbb7359c08e1cfc674bc-9774dac8.png",n="/zh-cn/assets/9d0ce540d5b4e7c3cb1a055c1413bdc9-a833a409.png",c="/zh-cn/assets/f7aae2cd2b075c3f567ff87285f738c2-476d6b84.png",t="/zh-cn/assets/bb02cb50b10cee5e7d575210aaeacd71-1661168b.png",l=[e,s,a,n,c,t],r={label:"Xline 源码解读(四)—— CURP 状态机引擎",description:"在上一篇源码解读的文章(Xline 源码解读(三) —— CURP Server 的实现)中,我们简单阐述了Xline 的 Curp Server 是如何实现的。接下来,就让我们话接上回,继续深入地来了解 Curp Server 中的一些核心的数据结构,特别是 conflict_checked_channel 和 command worker,它们相互协作,共同推动着 CURP Server 内部状态机状态转换。",cover:"./e4031380f79f643b21d6bdfd37c46a1c.jpeg",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-10-19",title:"Xline Source Code Interpretation (IV) CURP state machine engine"},p=[{label:"为什么我们需要冲突检测队列?",level:2},{label:"冲突检测队列是如何工作的?",level:2},{label:"状态机引擎的架构",level:2},{label:"状态是如何转换的",level:2},{label:"Summary",level:2}],o=`

      在上一篇源码解读的文章(
      Xline 源码解读(三) —— CURP Server 的实现

      )中,我们简单阐述了 Xline 的 Curp Server 是如何实现的。接下来,就让我们话接上回,继续深入地来了解 Curp Server 中的一些核心的数据结构,特别是 conflict_checked_channel 和 command worker,它们相互协作,共同推动着 CURP Server 内部状态机状态转换。

      @@ -25,12 +25,12 @@ const e="/zh-cn/assets/e4031380f79f643b21d6bdfd37c46a1c-95e167c8.jpeg",s="/zh-cn

      针对第一个问题,我们可以将所有的命令都看成是一张有向无环图中的顶点,而将冲突关系视为图中顶点之间的有向边。假设命令 A 和命令 B 之间存在冲突(命令的抵达顺序为先 A 后 B),我们便可将冲突关系看成是 A 和 B 之间的一条弧<A, B>,其中弧头总是指向后进来的顶点(这一顺序性就保证了图中不会出现环形冲突)。

      一旦我们将冲突关系定义为一个有向无环的非连通图中的一条边,那么执行某个命令时所需要计算的冲突顺序问题,就转换成了一个求有向无环图中,该命令所在的连通分量的拓扑排序问题。针对每个命令,successors(也就是后继) 保存了哪些 cmd 与当前 cmd 冲突,successors 的长度就是该 顶点的出度。而 predecessor_cnt (前驱数)则代表了这个 cmd 与之前的多少个 cmd 存在冲突,也就是该顶点元素的入度。

      同样回到我们前面所提到的 A、B、C 的例子当中,当我们使用 DAG 来描述命令的冲突关系,其情况如下图所示。

      -

      +

      当 cmd_worker 从 channel 当中接收命令时,channel 只需要遍历这个有向无环图中的每一个连通分量,并找到第一个入度为 0 的顶点即可。只有当 command 执行完毕后,channel 才会更新 B 的 predecessor_cnt,以解决 A 与 B 之间的冲突关系。

      状态机引擎的架构

      正如我们在文章开头所说的那样,冲突检测队列和 command worker 共同组成了 Curp Server 的状态机引擎。冲突检测队列向 command worker 提供无冲突的命令,而 command worker 则负责执行这些命令,并根据结果推动更新冲突检测队列当中的冲突关系。

      从结构上来看,Curp Server 状态机引擎是由三对 channel 和一个 filter 构成,其中这三对 channel 分别为:(send_tx,filter_rx)、(filter_tx, recv_rx) 以及 (done_tx, done_rx)具体的结构可以参考下图。

      -

      +

      其数据流方向为:send_tx -> filter_rx -> filter -> filter_tx -> recv_rx -> done_tx -> done_rx

      其中,send_tx 为 RawCurp 对象所拥有,负责在 propose(对应了 curp 的 fast path)、以及应用日志 apply(对应了 curp 的 slow path) 时向冲突检测队列投递对应的 CEEvent。冲突检测队列则会在计算出冲突顺序后,将 CEEvent 转换成为 Task 并通过 (filter_tx, recv_rx) 投递到 command worker 当中执行。command worker 在执行完 Task 后将结果通过 (done_tx, done_rx) 反馈到冲突检测队列中,并更新队列中依赖图中的顶点信息。

      状态是如何转换的

      diff --git a/zh-cn/assets/index-f6182a9f.js b/zh-cn/assets/index-af83501f.js similarity index 96% rename from zh-cn/assets/index-f6182a9f.js rename to zh-cn/assets/index-af83501f.js index e8e89c3..e10ccf2 100644 --- a/zh-cn/assets/index-f6182a9f.js +++ b/zh-cn/assets/index-af83501f.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg",A="data:image/png;base64,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",a="data:image/png;base64,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",r="/zh-cn/assets/image5-184dc93a.png",o="/zh-cn/assets/image6-18c75b26.jpg",t="/zh-cn/assets/image7-6a4a9bfe.png",n="/zh-cn/assets/image8-1849dbeb.png",s="/zh-cn/assets/image9-14a6fe14.jpg",g="/zh-cn/assets/image5-6a5e807d.png",p=[e,i,A,a,r,o,t,n,s,g],l={label:"精彩回顾 l SpinalHDL应用前景探索线上研讨会",description:"2022年12月16日,达坦科技联合SpinalHDL社区,举办了SpinalHDL Webinar 2022。在题为《SpinalHDL应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用Spinal HDL的实践、挑战和经验的分享。",location:"中国香港",date:"2022-12-12",title:"SpinalHDL Application Prospect Exploration Online Seminar"},C=[{label:"数据通路加速",level:2},{label:"复杂系统设计案例",level:2},{label:"硬件设计流程",level:2},{label:"推荐阅读",level:2}],h=`

      2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。

      +const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg",a="data:image/png;base64,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",A="data:image/png;base64,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",o="/zh-cn/assets/image5-184dc93a.png",r="/zh-cn/assets/image6-18c75b26.jpg",n="/zh-cn/assets/image7-6a4a9bfe.png",t="/zh-cn/assets/image8-1849dbeb.png",s="/zh-cn/assets/image9-14a6fe14.jpg",g="/zh-cn/assets/image5-6a5e807d.png",p=[e,i,a,A,o,r,n,t,s,g],l={label:"精彩回顾 l SpinalHDL应用前景探索线上研讨会",description:"2022年12月16日,达坦科技联合SpinalHDL社区,举办了SpinalHDL Webinar 2022。在题为《SpinalHDL应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用Spinal HDL的实践、挑战和经验的分享。",location:"中国香港",date:"2022-12-12",title:"SpinalHDL Application Prospect Exploration Online Seminar"},h=[{label:"数据通路加速",level:2},{label:"复杂系统设计案例",level:2},{label:"硬件设计流程",level:2},{label:"推荐阅读",level:2}],c=`

      2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。

      数据通路加速

      图片

      分享人:Tianrui Li

      @@ -10,34 +10,34 @@ const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg

      演讲主题: Utilizing SpinalHDL to Accelerate Neuroscience

      演讲摘要: This presentation covers how LeafLabs leverages SpinalHDL to enable the rapid development of a devices used for Neuroscience research ranging from mixed-signal Electrophysiology ASICs to FPGA based designs for system control and USB3 connectivity.


      -

      图片

      +

      图片

      分享人:Teilraum

      演讲主题: A Network Attached Deep Learning Accelerator for FPGA Clusters

      演讲摘要: This presentation introduces a Layer parallel framework for DNN training on an FPGA cluster. All hardware description is done using SpinalHDL. It gives an overview of approaches and examples where SpinalHDL came in handy.


      复杂系统设计案例

      -

      图片

      +

      图片

      分享人:Saahm

      演讲主题: SpinalHDL in Computer Architecture Research. A) MicroRV32 Platform and B) FPGA-based Heterogeneous Real-Time Systems with RISC-V

      演讲摘要: The presentation covers two topics in which SpinalHDL aided in the Research of Computer Architecture. MicroRV32 is a RISC-V SoC Platform built with SpinalHDL for research and education aligned along a RISC-V Virtual Prototype in SystemC TLM. The second topic covers a topic on Task Mapping and Scheduling in FPGA-based Heterogeneous Real-time Systems. There the VexRiscv-based Murax SoC was used on an FPGA as a Heterogeneous Real-time System for a Case-Study.


      -

      图片

      +

      图片

      分享人:Distributed

      演讲主题: Title: Coding a microprogrammed protocol receiver in SpinalHDL

      演讲摘要: This presentation introduces a microcode-like approach to coding a communications protocol receiver used in flying, handheld and stationary 3D scanners. Decoding the protocol in random logic leads to unattractively high resource usage. Therefore, a microprogrammed approach was chosen where data out of preprogrammed memories controls the rather regularly organized data path. The talk highlights the construction of the microinstructions and their physical representation, showing how code evaluated at Scala runtime can be elegantly intertwined with Spinal code representing hardware.


      -

      图片

      +

      图片

      分享人:Dolu1990

      演讲主题: NaxRiscv : A Pipeline / Plugins / SpinalHDL / Scala mix

      演讲摘要: This presentation / live demo shows how the NaxRiscv project (Out-of-order / superscalar RISC-V CPU) mix Scala and the SpinalHDL API to describe its hardware. By many aspect, it goes beyond the VexRiscv project, and should provide some usefull / interresting design patterns for the public.


      硬件设计流程

      -

      图片

      +

      图片

      分享人:Readon

      演讲主题: Recent progress on formal verification support on SpinalHDL

      演讲摘要: The formal verification is a technology to verify design, which helps to find the corner cases. SpinalHDL have provided an integration of this tech with SymbiYosys easily. The brief introduction on how to verify a design would be presented by example. Some new build blocks helping to simplify the verification process would be introduced. At last, a short overview of the verification of some facilities in SpinalHDL's lib would also be summarized.


      -

      图片

      +

      图片

      分享人:Sebastien-riou

      演讲主题: SpinalHDL for ASIC

      演讲摘要: The presentation is a highlights of a ASIC done entirely in SpinalHDL, fabricated in GF22FDX. Focus on pads, RAMs and FPGA for ASIC verification.

      @@ -53,4 +53,4 @@ const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg https://github.com/datenlord/TRIDENT

      推荐阅读

      万字长文,详述 TRIDENT: Poseidon 哈希算法的硬件加速与实现!

      -

      精彩回顾|硬件敏捷开发与验证方法学研讨

      `;export{p as assetURLs,h as default,l as metadata,C as toc}; +

      精彩回顾|硬件敏捷开发与验证方法学研讨

      `;export{p as assetURLs,c as default,l as metadata,h as toc}; diff --git a/zh-cn/assets/index-50ad21f0.js b/zh-cn/assets/index-b5bb516b.js similarity index 93% rename from zh-cn/assets/index-50ad21f0.js rename to zh-cn/assets/index-b5bb516b.js index b5a596d..93c613d 100644 --- a/zh-cn/assets/index-50ad21f0.js +++ b/zh-cn/assets/index-b5bb516b.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-2326b9d3.jpg",t="/zh-cn/assets/image1-62ba36d5.png",i="/zh-cn/assets/image2-238eb6f5.jpg",l="/zh-cn/assets/image3-9644e0b1.png",s=[e,t,i,l],a={label:"MIT体系结构公开课学习社区2.0版正式上线啦~",description:"随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距。由此,在2023年伊始,达坦科技发起成立了MIT体系结构公开课学习社区,邀请所有对硬件敏捷开发设计感兴趣的同学加入我们,组成拥有共同学习目标的互助自学小组,一起系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。",cover:"./cover.jpg",location:"中国香港",date:"2023-12-14",title:"MIT Architecture Open Course Learning Community Version 2.0 is officially launched~"},c=[{label:"为什么要发起设立 MIT 体系结构公开课学习社区?",level:2},{label:"学习社区运营十个月有什么成果?",level:2},{label:"为什么要升级 MIT 体系结构公开课学习社区 2.0 版?",level:2},{label:"MIT 体系结构公开课学习社区 2.0 版有什么改进?",level:2},{label:"欢迎报名",level:2}],n=`

      封面

      +const e="/zh-cn/assets/cover-2326b9d3.jpg",i="/zh-cn/assets/image1-62ba36d5.png",t="/zh-cn/assets/image2-238eb6f5.jpg",l="/zh-cn/assets/image3-9644e0b1.png",s=[e,i,t,l],a={label:"MIT体系结构公开课学习社区2.0版正式上线啦~",description:"随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距。由此,在2023年伊始,达坦科技发起成立了MIT体系结构公开课学习社区,邀请所有对硬件敏捷开发设计感兴趣的同学加入我们,组成拥有共同学习目标的互助自学小组,一起系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。",cover:"./cover.jpg",location:"中国香港",date:"2023-12-14",title:"MIT Architecture Open Course Learning Community Version 2.0 is officially launched~"},n=[{label:"为什么要发起设立 MIT 体系结构公开课学习社区?",level:2},{label:"学习社区运营十个月有什么成果?",level:2},{label:"为什么要升级 MIT 体系结构公开课学习社区 2.0 版?",level:2},{label:"MIT 体系结构公开课学习社区 2.0 版有什么改进?",level:2},{label:"欢迎报名",level:2}],c=`

      封面

      为什么要发起设立 MIT 体系结构公开课学习社区?

      随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距。

      由此,在 2023 年伊始,达坦科技发起成立了 MIT 体系结构公开课学习社区,邀请所有对硬件敏捷开发设计感兴趣的同学加入我们,组成拥有共同学习目标的互助自学小组,一起系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。

      @@ -20,7 +20,7 @@ const e="/zh-cn/assets/cover-2326b9d3.jpg",t="/zh-cn/assets/image1-62ba36d5.png" -

      封面

      +

      封面