diff --git a/zh-cn/assets/cover14-052a8b36.jpg b/zh-cn/assets/cover14-052a8b36.jpg new file mode 100644 index 0000000..b82ecfd Binary files /dev/null and b/zh-cn/assets/cover14-052a8b36.jpg differ diff --git a/zh-cn/assets/image1-2e91af8d.png b/zh-cn/assets/image1-2e91af8d.png new file mode 100644 index 0000000..279fdcf Binary files /dev/null and b/zh-cn/assets/image1-2e91af8d.png differ diff --git a/zh-cn/assets/index-50ad21f0.js b/zh-cn/assets/index-1061b5bb.js similarity index 96% rename from zh-cn/assets/index-50ad21f0.js rename to zh-cn/assets/index-1061b5bb.js index b5a596d..5673351 100644 --- a/zh-cn/assets/index-50ad21f0.js +++ b/zh-cn/assets/index-1061b5bb.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",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],n={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~"},a=[{label:"为什么要发起设立 MIT 体系结构公开课学习社区?",level:2},{label:"学习社区运营十个月有什么成果?",level:2},{label:"为什么要升级 MIT 体系结构公开课学习社区 2.0 版?",level:2},{label:"MIT 体系结构公开课学习社区 2.0 版有什么改进?",level:2},{label:"欢迎报名",level:2}],c=`随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距。
由此,在 2023 年伊始,达坦科技发起成立了 MIT 体系结构公开课学习社区,邀请所有对硬件敏捷开发设计感兴趣的同学加入我们,组成拥有共同学习目标的互助自学小组,一起系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。
@@ -46,4 +46,4 @@ const e="/zh-cn/assets/cover-2326b9d3.jpg",t="/zh-cn/assets/image1-62ba36d5.png"报名成功后,将收到邮件确认及学号。
关于 MIT 体系结构公开课学习社区项目有任何问题或疑问,可以邮件:ta@datenlord.com或添加DatenLord 小助手微信咨询。
-`;export{s as assetURLs,n as default,a as metadata,c as toc}; +`;export{s as assetURLs,c as default,n as metadata,a as toc}; diff --git a/zh-cn/assets/index-11edd425.js b/zh-cn/assets/index-11e55415.js similarity index 88% rename from zh-cn/assets/index-11edd425.js rename to zh-cn/assets/index-11e55415.js index ca20336..029e640 100644 --- a/zh-cn/assets/index-11edd425.js +++ b/zh-cn/assets/index-11e55415.js @@ -1,4 +1,4 @@ -var GE=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var bK=GE((CK,Gc)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();var Fo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Uw(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function XE(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){if(this instanceof n){var i=[null];i.push.apply(i,arguments);var o=Function.bind.apply(t,i);return new o}return t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}),r}var l={},KE={get exports(){return l},set exports(e){l=e}},Uu={},N={},QE={get exports(){return N},set exports(e){N=e}},ke={};/** +var GE=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var kK=GE((DK,Gc)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();var Fo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Uw(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function XE(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){if(this instanceof n){var i=[null];i.push.apply(i,arguments);var o=Function.bind.apply(t,i);return new o}return t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}),r}var l={},KE={get exports(){return l},set exports(e){l=e}},Uu={},N={},QE={get exports(){return N},set exports(e){N=e}},ke={};/** * @license React * react.production.min.js * @@ -1445,7 +1445,7 @@ Error generating stack: `+o.message+` display: block; margin-inline: auto; color: #fff; -`,Q1=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-a84bdbd8.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-c832920a.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5968a39d.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-4b956329.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-b2f220f4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-1179d885.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-5689e7f4.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-ffd93bc8.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-0b4fd2ad.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-b9ee750d.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5f61d62d.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-65e0a878.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-2530d06d.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-28dd2373.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-1c57aced.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[]),"/src/articles/events/2024-01-02-Highlights-I-DatenLord-Hackathon-2023-came-to-a-successful-conclusion!/index.md":()=>D(()=>import("./index-1c51c928.js"),[])}),Z5=()=>{const e=wt(),[t,r]=N.useState([]),n=async()=>{const i=await Promise.all(Object.keys(Q1).map(o=>Q1[o]()));r(i.reverse())};return N.useEffect(()=>{n()},[]),l.jsx(A5,{id:"dynamics",children:l.jsxs(I5,{children:[l.jsx(N5,{children:"达坦动态"}),l.jsx($5,{children:t.map(({metadata:i,assetURLs:o},a)=>{const{title:c,date:d,cover:h,label:g,description:v}=i;if(a===0)return l.jsxs(z5,{children:[l.jsx(Y5,{src:h?o[0]:G1}),l.jsxs(V5,{children:[l.jsx(U5,{children:g}),l.jsx(G5,{children:v})]}),l.jsxs(K5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c);if(a<5)return l.jsxs(H5,{children:[l.jsx(F5,{src:h?o[0]:G1}),l.jsxs(W5,{children:[l.jsx(B5,{children:g}),l.jsx(X5,{children:v})]}),l.jsxs(Q5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c)})}),l.jsx(q5,{onClick:()=>e("/events"),children:"了解更多"})]})})},J5="/zh-cn/assets/blog-test-image-c63d058c.png",e7="/zh-cn/assets/blog-cover-3d82a30d.png",{Heading:t7,Paragraph:r7}=Me,{CNHead4:n7,TitleLarge:i7}=t7,{CNBodyMedium:WS}=r7,o7=f.section` +`,Q1=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-a84bdbd8.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-c832920a.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5968a39d.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-a9e0a78f.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-4b956329.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-d735fd77.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-4e03f569.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-5689e7f4.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-a1a1a279.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-cc44974b.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-4d1333f2.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-20f01f19.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-71801d47.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-696ef44a.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-5fa4b651.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-dfd283a0.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-69ce89cf.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-ef7b41da.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-1061b5bb.js"),[]),"/src/articles/events/2024-01-02-Highlights-I-DatenLord-Hackathon-2023-came-to-a-successful-conclusion!/index.md":()=>D(()=>import("./index-1c51c928.js"),[])}),Z5=()=>{const e=wt(),[t,r]=N.useState([]),n=async()=>{const i=await Promise.all(Object.keys(Q1).map(o=>Q1[o]()));r(i.reverse())};return N.useEffect(()=>{n()},[]),l.jsx(A5,{id:"dynamics",children:l.jsxs(I5,{children:[l.jsx(N5,{children:"达坦动态"}),l.jsx($5,{children:t.map(({metadata:i,assetURLs:o},a)=>{const{title:c,date:d,cover:h,label:g,description:v}=i;if(a===0)return l.jsxs(z5,{children:[l.jsx(Y5,{src:h?o[0]:G1}),l.jsxs(V5,{children:[l.jsx(U5,{children:g}),l.jsx(G5,{children:v})]}),l.jsxs(K5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c);if(a<5)return l.jsxs(H5,{children:[l.jsx(F5,{src:h?o[0]:G1}),l.jsxs(W5,{children:[l.jsx(B5,{children:g}),l.jsx(X5,{children:v})]}),l.jsxs(Q5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c)})}),l.jsx(q5,{onClick:()=>e("/events"),children:"了解更多"})]})})},J5="/zh-cn/assets/blog-test-image-c63d058c.png",e7="/zh-cn/assets/blog-cover-3d82a30d.png",{Heading:t7,Paragraph:r7}=Me,{CNHead4:n7,TitleLarge:i7}=t7,{CNBodyMedium:WS}=r7,o7=f.section` background: #f7f7f9; `,s7=f.div` max-width: 1440px; @@ -1509,7 +1509,7 @@ Error generating stack: `+o.message+` border-radius: 0.5rem; border: none; cursor: pointer; -`,q1=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2ee8a4ba.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-0bd243e2.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-39390118.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-1dde53bb.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-6f20c5b7.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-82a24597.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-015cf939.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-1e192479.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-e6f44fee.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-90593fbc.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-148365b0.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-5076d4ea.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-dcc07e36.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-a27a1569.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-0c28844a.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),p7=()=>{const e=wt(),[t,r]=N.useState([]),[n,i]=N.useState(""),o=async()=>{const a=await Promise.all(Object.keys(q1).map(c=>q1[c]()));r(a.reverse())};return N.useEffect(()=>{o()},[]),N.useEffect(()=>{var a;i(((a=t[0])==null?void 0:a.assetURLs[0])||J5)},[t]),l.jsx(o7,{id:"blog",children:l.jsxs(s7,{children:[l.jsx(a7,{children:"技术博客"}),l.jsxs(l7,{children:[l.jsxs(c7,{children:[l.jsx(u7,{src:e7}),t.map(({metadata:a},c)=>{const{title:d,date:h,label:g,description:v}=a;return c<4&&l.jsxs(d7,{children:[l.jsx(f7,{onClick:()=>{e(`/blogs/${h}-${d.split(" ").join("-")}`)},children:g}),l.jsx(h7,{children:v})]},d)})]}),l.jsx(m7,{onClick:()=>e("/blogs"),children:"了解更多"})]})]})})},Z1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:$S,children:"资源"}),l.jsx(D5,{}),l.jsx(Z5,{}),l.jsx(p7,{})]})},g7="/zh-cn/assets/cover-2eaea155.png",v7="/zh-cn/assets/SJTU-logo-a938b527.png",y7="/zh-cn/assets/BUPT-logo-4d861e45.png",w7="/zh-cn/assets/HNU-logo-a704fb8b.png",_7="/zh-cn/assets/SCUT-logo-aa4c3285.png",x7="/zh-cn/assets/SBU-logo-a0084f17.png",S7="/zh-cn/assets/image-cd6390ff.png",{Heading:b7,Paragraph:k7}=Me,{CNHead4:C7,CNHead5:D7}=b7,{CNBodyLarge:US}=k7,E7=f.section` +`,q1=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-ddfbefca.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-aa8ef45e.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-c719bd5c.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-38e8d7df.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-4270ced0.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-1dde53bb.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-9cbd4195.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-b28c82c1.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-015cf939.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-494dac65.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-38c14a45.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-86e42443.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-148365b0.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-90047cd2.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-aaba7b29.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-bccae718.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-4c405f89.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-b21d7686.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[]),"/src/articles/blogs/2023-12-28-Xline-command-de-duplication-mechanism-(I)-Introduction-to-RIFL/index.md":()=>D(()=>import("./index-1b00c887.js"),[])}),p7=()=>{const e=wt(),[t,r]=N.useState([]),[n,i]=N.useState(""),o=async()=>{const a=await Promise.all(Object.keys(q1).map(c=>q1[c]()));r(a.reverse())};return N.useEffect(()=>{o()},[]),N.useEffect(()=>{var a;i(((a=t[0])==null?void 0:a.assetURLs[0])||J5)},[t]),l.jsx(o7,{id:"blog",children:l.jsxs(s7,{children:[l.jsx(a7,{children:"技术博客"}),l.jsxs(l7,{children:[l.jsxs(c7,{children:[l.jsx(u7,{src:e7}),t.map(({metadata:a},c)=>{const{title:d,date:h,label:g,description:v}=a;return c<4&&l.jsxs(d7,{children:[l.jsx(f7,{onClick:()=>{e(`/blogs/${h}-${d.split(" ").join("-")}`)},children:g}),l.jsx(h7,{children:v})]},d)})]}),l.jsx(m7,{onClick:()=>e("/blogs"),children:"了解更多"})]})]})})},Z1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:$S,children:"资源"}),l.jsx(D5,{}),l.jsx(Z5,{}),l.jsx(p7,{})]})},g7="/zh-cn/assets/cover-2eaea155.png",v7="/zh-cn/assets/SJTU-logo-a938b527.png",y7="/zh-cn/assets/BUPT-logo-4d861e45.png",w7="/zh-cn/assets/HNU-logo-a704fb8b.png",_7="/zh-cn/assets/SCUT-logo-aa4c3285.png",x7="/zh-cn/assets/SBU-logo-a0084f17.png",S7="/zh-cn/assets/image-cd6390ff.png",{Heading:b7,Paragraph:k7}=Me,{CNHead4:C7,CNHead5:D7}=b7,{CNBodyLarge:US}=k7,E7=f.section` background: ${e=>e.theme.white00}; background: linear-gradient(180deg, #BFC5FB, #BFC5FB00 50%); `,T7=f.div` @@ -2024,7 +2024,7 @@ Error generating stack: `+o.message+` `,qz=f(Xz)` padding-bottom: 1.23rem; text-align: center; -`,ow=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(Kz,{id:"join-us",children:l.jsxs(Qz,{children:[l.jsx(qz,{children:"加入我们"}),l.jsx(b8,{}),l.jsx(H8,{}),l.jsx(K8,{}),l.jsx(wz,{})]})}),l.jsx(Bz,{})]})},Zz="/zh-cn/assets/video-demo-cover-6531bf08.png",hc="/zh-cn/assets/arrow-up-right-f6ca128c.svg",Jz="/zh-cn/assets/cover1-0f766121.jpg",eH="/zh-cn/assets/cover2-6c924915.jpg",tH="/zh-cn/assets/cover3-a8cadd7b.jpg",rH="/zh-cn/assets/cover4-da59baaf.jpg",nH="/zh-cn/assets/cover5-55104208.jpg",iH="/zh-cn/assets/cover6-bf6d56c4.jpg",oH="/zh-cn/assets/cover7-461ad08e.jpg",sH="/zh-cn/assets/cover8-18bb5252.jpg",aH="/zh-cn/assets/cover9-0cfe7433.jpg",lH="/zh-cn/assets/cover10-7707f5f7.jpg",cH="/zh-cn/assets/cover11-18bf7e52.jpg",uH="/zh-cn/assets/cover12-2ec52bb9.jpg",dH="/zh-cn/assets/cover13-20980f41.jpg",fH="/zh-cn/assets/cover14-6dff9a13.jpg",hH="/zh-cn/assets/cover15-f2819b4b.jpg",mH="/zh-cn/assets/cover16-6b3eea77.jpg",pH="/zh-cn/assets/cover17-2d99b802.jpg",gH="/zh-cn/assets/cover19-9503f8ee.jpg",vH="/zh-cn/assets/cover20-a198bfe8.jpg",yH="/zh-cn/assets/cover21-c1808615.jpg",wH="/zh-cn/assets/cover22-a24d3264.jpg",_H="/zh-cn/assets/cover23-91837162.jpg",xH="/zh-cn/assets/cover24-f34d429f.jpg",SH="/zh-cn/assets/cover25-11f1a4dd.jpg",bH="/zh-cn/assets/cover26-574c835d.jpg",kH="/zh-cn/assets/cover27-cab7b800.jpg",CH="/zh-cn/assets/cover28-61988539.jpg",DH="/zh-cn/assets/cover29-cfa296fc.jpg",EH="/zh-cn/assets/cover30-6bc9e17a.jpg",TH="/zh-cn/assets/cover31-de17416a.jpg",jH="/zh-cn/assets/cover32-64d8c4cf.jpg",OH="/zh-cn/assets/cover33-747e46a5.jpg",PH="/zh-cn/assets/cover34-b47433e8.jpg",RH="/zh-cn/assets/cover35-474e265e.jpg",MH="/zh-cn/assets/cover40-e2bf253f.jpg",LH="/zh-cn/assets/cover41-56007738.jpg",AH="/zh-cn/assets/cover42-075bcf74.jpg",IH="/zh-cn/assets/cover43-d1896502.jpg",NH="/zh-cn/assets/cover50-2dc33471.jpg",$H="/zh-cn/assets/cover51-235c2ee6.jpg",zH="/zh-cn/assets/cover52-06cc8093.jpg",HH="/zh-cn/assets/cover53-11208fe4.jpg",YH="/zh-cn/assets/cover54-00d520f8.jpg",FH=[{key:1,image:Jz,title:"Virtio-net相关知识介绍与Rust-for-Linux基本知识",text:"本场workshop由达坦科技李弘宇进行内容分享,主要介绍了Virtio-net相关知识介绍与Rust-for-Linux基本知识。欢迎参加达坦科技DatenLord相关开源项目:https://github.com/datenlord/linux/tree/rust_virtio",date:"2022.08.17",url:"https://www.bilibili.com/video/BV17G4y1a7Bv/"},{key:2,image:eH,title:"roce-sim Workshop分享",text:"本场workshop由达坦科技王恒宇进行内容分享,主要介绍了roce-sim相关知识分享,如果您对这方面有兴趣,欢迎参与达坦科技开源项目:Github链接:https://github.com/datenlord/roce-sim",date:"2022.08.25",url:"https://www.bilibili.com/video/BV1UB4y137Tn/"},{key:3,image:tH,title:"Cocotb Workshop分享",text:"本场workshop由达坦科技DatenLord 翁万正进行内容分享,主要进行了cocotb相关知识介绍。",date:"2022.09.23",url:"https://www.bilibili.com/video/BV19e4y1k7EE/"},{key:4,image:rH,title:"使用Copilot在分布式系统中容忍暂时变慢的节点",text:"本场workshop由达坦科技DatenLord 田野进行内容分享,主要进行了“使用Copilot在分布式系统中容忍暂时变慢的节点“相关知识介绍。",date:"2022.09.30",url:"https://www.bilibili.com/video/BV15e411T7pX/"},{key:5,image:nH,title:"硬件设计的集合方法",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“硬件设计的集合方法”相关知识介绍。",date:"2022.10.09",url:"https://www.bilibili.com/video/BV1FK411Q7JV/"},{key:6,image:iH,title:"VLSI Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了VLSI相关知识介绍。",date:"2022.10.15",url:"https://www.bilibili.com/video/BV1bK411Q7GB/"},{key:7,image:oH,title:"Corumdum介绍",text:"本场workshop由西安电子科技大学 ISN网络与交换团队 硕士研究生李钊进行内容分享,主要进行了Corumdum相关知识介绍。",date:"2022.10.16",url:"https://www.bilibili.com/video/BV1qG41177Pq/"},{key:8,image:sH,title:"可编程交换机:原理与使用",text:"本场workshop由上海交通大学IPADS实验室博士二年级 张汉泽进行内容分享,主要进行了“可编程交换机:原理与使用”相关知识分享。可编程交换机由安装包处理规则的控制面与负责高速包处理的数据面构成,两者由一根PCIe总线相连。控制面支持高级语言编程,而数据面逻辑需要用P4语言编写。在可编程交换机上设计系统主要面临数据面内存有限与P4编程模型受限两大挑战。",date:"2022.10.23",url:"https://www.bilibili.com/video/BV1jm4y1w7w3/"},{key:9,image:aH,title:"形式化验证入门",text:"本场workshop由达坦科技DatenLord王璞进行内容分享,主要进行了形式化验证入门相关知识介绍。",date:"2022.10.26",url:"https://www.bilibili.com/video/BV1DG411L78p/"},{key:10,image:lH,title:"利用RDMA加速FaaS服务",text:"本场workshop由达坦科技DatenLord李弘宇进行内容分享,主要进行了“利用RDMA加速FaaS服务”相关知识介绍。",date:"2022.11.06",url:"https://www.bilibili.com/video/BV1et4y1K7Sw/"},{key:11,image:cH,title:"Rust for Linux",text:"本场workshop由苏宇恒进行内容分享,主要进行了“Rust for Linux”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1G8411a7CE/"},{key:12,image:uH,title:"Intel用户态中断",text:"本场workshop由韩明聪进行内容分享,主要进行了“Intel用户态中断”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1tG4y1t7Lg/"},{key:13,image:dH,title:"VLSI DSP Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“VLSI DSP Intro”相关知识介绍。",date:"2022.11.11",url:"https://www.bilibili.com/video/BV18P4y1y7iP/"},{key:14,image:fH,title:"DSP Sharing Part2",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要就DSP相关知识进行第二次workshop分享",date:"2022.11.12",url:"https://www.bilibili.com/video/BV1bM411k7YP/"},{key:15,image:hH,title:"eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架",text:"本场workshop由浙江大学学生/eunomia-bpf 开发者 郑昱笙进行内容分享,主要内容围绕“eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架”相关知识。",date:"2022.11.20",url:"https://www.bilibili.com/video/BV1u84y1C7pQ/"},{key:16,image:mH,title:"RDMA网络拥塞管理架构",text:"本场workshop由北京邮电大学网络与交换国家重点实验室、计算机学院,副研究员、博导:张乙然进行内容分享,主要内容围绕“RDMA网络拥塞管理架构”进行知识介绍。",date:"2022.11.27",url:"https://www.bilibili.com/video/BV1Ve4y1g7gx/"},{key:17,image:pH,title:"使用RDMA加速服务器无感知计算容器启动",text:"本场workshop由上海交通大学助理教授魏星达进行分享,主要内容围绕“使用RDMA加速服务器无感知计算容器启动”进行知识介绍。",date:"2022.12.04",url:"https://www.bilibili.com/video/BV1qG4y1G784/"},{key:19,image:gH,title:"基于智能网卡的数据处理系统",text:"本场workshop由浙江大学百人计划研究员 王则可进行分享,主要内容为“基于智能网卡的数据处理系统”介绍。",date:"2022.12.18",url:"https://www.bilibili.com/video/BV1Eg411J7fJ/"},{key:20,image:vH,title:"异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构",text:"本场workshop由何安平副教授进行分享,主要内容为“异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构”介绍。",date:"2022.12.25",url:"https://www.bilibili.com/video/BV1sA411D7on/"},{key:21,image:yH,title:"使用 TLA+ 为分布式算法验证正确性",text:"本场workshop由达坦科技DatenLord田野进行分享,主要内容为“使用 TLA+ 为分布式算法验证正确性”介绍。",date:"2023.01.09",url:"https://www.bilibili.com/video/BV1pG4y1y7an/"},{key:22,image:wH,title:"喷泉码技术简介",text:"本场workshop由兰州大学信息科学与工程学院副教授、通信工程专业系主任袁磊 进行分享,主要内容为“喷泉码技术简介”介绍。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1SM411b77k/"},{key:23,image:_H,title:"数据库隔离级别及MVCC",text:"本场workshop由达坦科技DatenLord施继成进行分享,主要内容为“数据库隔离级别及MVCC”介绍。",date:"2023.01.29",url:"https://www.bilibili.com/video/BV1sR4y1b7Cu/"},{key:24,image:xH,title:"互联网传输协议优化研究",text:"本场workshop由中国人民大学副教授李彤教授进行分享,主要内容为“互联网传输协议优化研究”介绍。",date:"2023.02.06",url:"https://www.bilibili.com/video/BV1X84y157vL/"},{key:25,image:SH,title:"高性能RDMA网络协议栈",text:"高性能RDMA网络协议栈是RDMA高性能网络的核心组成部分之一,它提供了支持RDMA技术的网络协议和驱动程序。在本周的前沿科技分享中,我们邀请到了湖南大学信息科学与工程学院的陈果教授来给我们分享高性能RDMA网络协议栈的话题。",date:"2023.02.28",url:"https://www.bilibili.com/video/BV1Y24y1n7Dk/"},{key:26,image:bH,title:"GPU抢占式任务调度",text:"GPU编程可以大幅提升计算速度和效率,从而使得许多计算任务得以在合理时间内完成。随着GPU硬件技术的发展和大规模数据处理需求的增加,GPU编程的应用范围不断扩大。在本周的前沿科技分享中,我们邀请到了上海交通大学并行与分布式研究所的韩明聪博士来给我们分享GPU抢占式任务调度。",date:"2023.03.05",url:"https://www.bilibili.com/video/BV1cY4y1y7ND/"},{key:27,image:kH,title:"聊聊RaptorQ纠错码",text:"喷泉码具有极高的纠错能力,且具有低延迟、地复杂度、高效率等优点,使其在冷存储、分布式存储、无线通信等领域得到广泛应用。达坦科技致力于软硬件融合的解决方案,喷泉码的高效实现在硬件上,作为公司长期的技术储备,在本周的前沿科技分享中,达坦科技的联合创始人兼CTO施继成将为大家分享聊聊 RaptorQ 纠错码 。",date:"2023.03.15",url:"https://www.bilibili.com/video/BV1wL411C7DL/"},{key:28,image:CH,title:"Buddy Compiler 简介和愿景",text:"在本次分享中,中国科学院软件研究所博士生张洪滨将介绍Buddy Compiler 编译流程、协同设计、硬件支持。Buddy Compiler 是领域特定的编译器框架,致力于打造基于 MLIR 和 RISC-V 的软硬件协同设计生态。其目标是实现从 DSL 到 DSA 的编译流程和协同设计,愿景是让领域特定的协同设计不再困难。",date:"2023.03.21",url:"https://www.bilibili.com/video/BV1YT41167GB/"},{key:29,image:DH,title:"新一代计算架构:超异构计算",text:"AGI带来的变化之一是算力将进一步从CPU转到GPU,在本周的前沿技术分享中,我们邀请到了上海矩向科技创始人兼CEO黄朝波为大家分享新一代计算架构:超异构计算。",date:"2023.04.04",url:"https://www.bilibili.com/video/BV1Rm4y1q7Dx/"},{key:30,image:EH,title:"通过Chainsaw设计DSP电路",text:"DSP在数据压缩、编码和加密方面都发挥了重要的作用;SpinalHDL具有更高的抽象层次和更强的表达能力,可以大大简化DSP电路设计的复杂度和提高开发效率;而Chainsaw框架可以在不同的FPGA平台上运行,提高了设计的灵活性和可移植性。在本周的前沿技术分享中,我们邀请到了中山大学在读博士李天瑞为大家分享通过Chainsaw设计DSP电路。",date:"2023.04.18",url:"https://www.bilibili.com/video/BV14o4y1j7bH/"},{key:31,image:TH,title:"Something About Cache Security",text:"在本周的前沿技术分享中,我们邀请到了浙江大学在读硕士研究生缪晨露为大家分享她在MICRO和HPCA上发表的两篇论文的精华,演讲主题是Something About Cache Security。",date:"2023.04.25",url:"https://www.bilibili.com/video/BV1p24y1F7fN/"},{key:32,image:jH,title:"Rust嵌入式开发生态介绍及入门",text:"在本周的前沿技术分享中,我们邀请到了一位爱好硬件的软件工程师米明恒,来为大家分享Rust嵌入式开发生态介绍及入门。",date:"2023.05.04",url:"https://www.bilibili.com/video/BV1J24y1T7EH/"},{key:33,image:OH,title:"RDMA赋能数据中心/超算中心间远程互联",text:"在本周的前沿技术分享中,我们邀请到了南京大学田臣教授,来为大家分享RDMA赋能数据中心/超算中心间远程互联。",date:"2023.06.04",url:"https://www.bilibili.com/video/BV1cz4y1B7cx/"},{key:34,image:PH,title:"Paper Reading: DPU任务卸载",text:"达坦科技一直在探索用硬件加速做分布式跨云存储,在本周的前沿技术分享中,我们邀请到了中南大学在读博士生卢军,来为大家分享DPU任务卸载的相关研究。",date:"2023.06.17",url:"https://www.bilibili.com/video/BV1R14y1S79T/"},{key:35,image:RH,title:"Rust在物理引擎研发中的应用",text:"在本周的前沿技术分享中,我们邀请到了Motphys CEO崔汉青,来为大家分享Rust在物理引擎研发中的应用。",date:"2023.06.27",url:"https://b23.tv/BZuSvyW"},{key:40,image:MH,title:"基于BSV的RTL仿真加速设计研究",text:"BSV的仿真加速可以提升硬件开发调试的效率。在本周的前沿技术分享中,我们邀请到了梁之杰,来为大家分享基于BSV的RTL仿真加速设计研究。",date:"2023.07.09",url:"https://www.bilibili.com/video/BV1ou411L7Yy/"},{key:41,image:LH,title:"RDMA网络的系统测试方案",text:"在本周的前沿技术分享中,我们邀请到了孔心皓,来为大家分享RDMA 网络的系统测试方案。",date:"2023.07.16",url:"https://www.bilibili.com/video/BV1tz4y147rw/"},{key:42,image:AH,title:"RapidWright技术分享会",text:"在本周的前沿技术分享中,我们邀请到了西南交通大学邸志雄副教授和他的学生向瀚章,来为大家分享开源FPGA设计工具RapidWright技术。",date:"2023.07.28",url:"https://www.bilibili.com/video/BV14z4y1x7a8/"},{key:43,image:IH,title:"基于Karmada实现Kubernetes应用跨集群故障转移",text:"在本周的前沿技术分享中,我们邀请到了开源爱好者,云兴科技软件研发工程师梁远鹏,来为大家分享基于Karmada实现Kubernetes应用跨集群故障转移。",date:"2023.08.01",url:"https://www.bilibili.com/video/BV1rN411Y7aZ/"},{key:50,image:NH,title:"大模型训练和基础设施",text:"在本周的前沿技术分享中,我们邀请到了范一呈,来为大家分享大模型训练和基础设施。",date:"2023.09.01",url:"https://www.bilibili.com/video/BV1ZN4y1R7HP/"},{key:51,image:$H,title:"RustBelt与Rust形式化方法",text:"在本周的前沿技术分享中,我们邀请到了王俊吉,来为大家分享RustBelt与Rust形式化方法。",date:"2023.09.04",url:"https://www.bilibili.com/video/BV1Vw411D7rT/"},{key:52,image:zH,title:"网络的智能该放在哪里:网卡、交换机还是xPU",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:53,image:HH,title:"以ARM为镜的RISC-V",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:54,image:YH,title:"面向网络测量的可编程交换机优化技术",text:"在本周的前沿技术分享中,我们邀请到了北京大学计算机学院黄群助理教授,来为大家分享面向网络测量的可编程交换机优化技术。",date:"2023.10.20",url:"https://www.bilibili.com/video/BV1i84y1974F/"}],VH="/zh-cn/assets/cover1-42e6189a.jpg",WH="/zh-cn/assets/cover2-af26ed46.jpg",UH="/zh-cn/assets/cover3-9c9d21fa.jpg",BH=[{key:1,image:VH,title:"Xline-跨数据中心一致性的元数据管理",text:"天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline是一款开源分布式KV存储系统,基于Curp共识算法实现,旨在提供跨云元数据管理的功能。相比于传统共识协议Raft或Paxos,Curp在天空计算的场景中有着更好的性能表现。本次分享将聚焦于共识算法,从天空计算的背景和挑战出发,介绍Curp共识算法,以及Revision机制与Curp无序性语义之间的冲突,最后,简述下Xline未来的优化方向。欢迎了解更多关于Xline的信息:Https://github.com/datenlord/Xline",date:"2023.02.09",url:"https://www.bilibili.com/video/BV1XY411q7X8/"},{key:2,image:WH,title:"源码解读:Xline Curp共识协议的设计与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.04.30",url:"https://www.bilibili.com/video/BV1dL411h7YK/"},{key:3,image:UH,title:"Xline的Lease机制与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.06.09",url:"https://www.bilibili.com/video/BV1FX4y1h7X5/"}],GH="/zh-cn/assets/cover1-a1358db9.jpg",XH="/zh-cn/assets/cover2-b899ea12.jpg",KH="/zh-cn/assets/cover3-e0bf4798.jpg",QH="/zh-cn/assets/cover4-15b0b4f1.jpg",qH="/zh-cn/assets/cover5-7c4c2482.jpg",ZH="/zh-cn/assets/cover6-1c4d5c5f.jpg",JH="/zh-cn/assets/cover7-4f7454c0.jpg",eY="/zh-cn/assets/cover8-7e30c0fc.jpg",tY="/zh-cn/assets/cover9-e8c86c60.jpg",rY="/zh-cn/assets/cover10-bb13b118.jpg",nY="/zh-cn/assets/cover11-c29e9692.jpg",iY="/zh-cn/assets/cover12-6877e246.jpg",oY="/zh-cn/assets/cover13-5a4d97b0.jpg",sY=[{key:7,image:JH,title:"2022年Rust开发者大会Workshop One:用Rust实现RDMA高性能编程",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是本场workshop的第一部分,将为大家介绍如何用Rust实现RDMA高性能编程。",date:"2022.08.03",url:"https://www.bilibili.com/video/BV13e4y1D7Ch/"},{key:8,image:eY,title:"2022年Rust开发者大会Workshop Two:Async RDMA",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是第二部分workshop,将为大家介绍Async RDMA。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:9,image:tY,title:"2022年Rust开发者大会Workshop Three:Workshop动手实验环节",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题Workshop。这是本场Worshop的第三个部分:workshop动手环节 方便大家体验用Rust构建RDMA应用。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1oN4y1V7Hn/"},{key:1,image:GH,title:"Rust China Hackathon2022空中路演",text:"由Rust中文社区举办的题为「Rust For Fun」的首届Rust China Hackathon已经顺利完赛。达坦科技作为本届Hackathon的协办方,赞助参与本次企业组赛道。最终获得优胜奖的两支队伍在线上了举办一场空中路演。分享了:他们是如何思考拆解赛题的?在着手设计时碰到哪些难点和挑战?以及最终提交的代码设计思路和亮点。欢迎对Concurrent Indexing感兴趣的伙伴观看本条视频。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1xY41197Za/"},{key:2,image:XH,title:"4.8 Beijing Rust Meetup|张汉东《理解 Unsafe Rust》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由《Rust 编程之道》作者、Rust 中文社区布道者张汉东老师进行,主题为《理解 Unsafe Rust》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1c24y1A7aK/"},{key:3,image:KH,title:"4.8 Beijing Rust Meetup|冯洋《RUFES》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场由南京大学计算机科学与技术系助理研究员冯洋老师进行《基于实际场景应用分析的Rust库模糊测试技术报告》的演讲分享。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Qo4y1n7tS/"},{key:4,image:QH,title:"4.8 Beijing Rust Meetup|施继成《Rust for Linux 6.2》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:5,image:qH,title:"4.8 Beijing Rust Meetup|叶天星《用Rust实现Git传输协议、Git对象解析和数据库存储》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:6,image:ZH,title:"4.8 Beijing Rust Meetup|茌海《Monoio:一个基于 io-uring 的 Rust Runtime》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:10,image:rY,title:"如何用Rust写分布式系统",text:"分享会介绍分布式KV Store (Xline) 整体的组成,以及不同组件之间如何去交互。在广域网下的分布式系统如何高效地达成共识,以及分布式系统如何实现容错。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Hs4y1r7dD/"},{key:11,image:nY,title:"Building microsecond-scale system with modern networking in Rust",text:"随着新型网络技术,如RDMA的普及,现代分布式应用的延迟降到了毫秒甚至微秒级别。这为构建系统软件带来了新的挑战。Rust的zero-cost抽象及内存管理能力能够为构建新型分布式应用带来新的机遇。我将分享利用Rust在用户态及内核态构建新型系统软件的相关经验,包括如何利用Rust抽象RDMA硬件的底层抽象及如何在内核构建一个毫秒级的容器启动机制。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Zo4y1P7Sg/"},{key:12,image:iY,title:"30分钟体验Rust for Linux内核模块开发",text:"本主题会提供构建好的docker开发环境,在30分钟内演示如何使用r4l开发一个简易内核模块,并介绍目前r4l的发展现状。可以自备好电脑现场体验。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV12j411U78o/"},{key:13,image:oY,title:"DatenLord 2023 Hackathon赛题宣讲会",text:"达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛主题为 Explore the Possibilities 赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来吧!",date:"2023.11.25",url:"https://www.bilibili.com/video/BV1su4y157iB/"}],aY="/zh-cn/assets/cover1-b9371555.jpg",lY="/zh-cn/assets/cover2-41a903e3.jpg",cY="/zh-cn/assets/cover2-41a903e3.jpg",uY="/zh-cn/assets/cover2-41a903e3.jpg",dY="/zh-cn/assets/cover2-41a903e3.jpg",fY="/zh-cn/assets/cover2-41a903e3.jpg",hY="/zh-cn/assets/cover2-41a903e3.jpg",mY="/zh-cn/assets/cover2-41a903e3.jpg",pY="/zh-cn/assets/cover2-41a903e3.jpg",gY="/zh-cn/assets/cover13-a69a12b0.jpg",vY="/zh-cn/assets/cover14-3a97e013.jpg",yY="/zh-cn/assets/cover14-3a97e013.jpg",wY="/zh-cn/assets/cover14-3a97e013.jpg",_Y="/zh-cn/assets/cover14-3a97e013.jpg",xY="/zh-cn/assets/cover14-3a97e013.jpg",SY="/zh-cn/assets/cover14-3a97e013.jpg",bY="/zh-cn/assets/cover20-c97bc11b.jpg",kY="/zh-cn/assets/cover21-9f52ba13.jpg",CY="/zh-cn/assets/cover22-187b655a.jpg",DY="/zh-cn/assets/cover23-1e515665.jpg",EY="/zh-cn/assets/cover24-020d0c34.jpg",TY="/zh-cn/assets/cover25-cb84d871.jpg",jY="/zh-cn/assets/cover26-7a726e97.jpg",OY="/zh-cn/assets/cover27-401eea81.jpg",PY="/zh-cn/assets/cover28-6ddc6bee.jpg",RY="/zh-cn/assets/cover29-0d2deb11.jpg",MY=[{key:1,image:aY,title:"Utilizing SpinalHDL for Large-scale Datapath Design",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的一个workshop:Utilizing SpinalHDL for Large-scale Datapath Design,由李天瑞进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1PM411m7DB/"},{key:2,image:lY,title:"A Network Attached Deep Learning Accelerator for FPGA Clusters",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的三个workshop:A Network Attached Deep Learning Accelerator for FPGA Clusters,由Philipp Kreowsky Justin Knapheide进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1HM411m7mS/"},{key:3,image:cY,title:"Coding a microprogrammed protocol receiver in SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的五个workshop:Coding a microprogrammed protocol receiver in SpinalHDL,由Michael Meier进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1oK411z7VD/"},{key:4,image:uY,title:"Utilizing SpinalHDL to Accelerate Neuroscience",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的二个workshop:Utilizing SpinalHDL to Accelerate Neuroscience,由Jeff-Ciesielski进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1GG4y1J7gU/"},{key:5,image:dY,title:"SpinalHDL in Computer Architecture Research",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的四个workshop:SpinalHDL in Computer Architecture Research,由Sallar Ahmadi-Pour ( saahm)进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1gA411X7f8/"},{key:6,image:fY,title:"NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第六个workshop:NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix,由Dolu1990进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV13K41167q5/"},{key:7,image:hY,title:"Recent progress on formal verification support on SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第七个workshop:Recent progress on formal verification support on SpinalHDL,由Xiao Yindong (Readon)进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV1bG411N7fk/"},{key:8,image:mY,title:"SpinalHDL for ASIC",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第八个workshop:SpinalHDL for ASIC,由Sebastien-riou进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV16e4y1L7dV/"},{key:9,image:pY,title:"From Peripheral Plugins to Product documentation",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第九个workshop:From Peripheral Plugins to Product documentation,由Andreas Wallner进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV12v4y1Q7cg/"},{key:13,image:gY,title:"Coroutines Applied to a Tilelink Interconnect Elaboration",text:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第一部分,由Charles Popen进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1Vz4y1J7ck/"},{key:14,image:vY,title:"RISC-V敏捷硬件开发-软件定义芯片",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第一个分享《RISC-V敏捷硬件开发-软件定义芯片》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Qh4y1K7pH/"},{key:15,image:yY,title:"香山处理器与敏捷开发工具链的最新进展",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第二个分享《香山处理器与敏捷开发工具链的最新进展》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Dz4y1T7V6/"},{key:16,image:wY,title:"数据流式编程在硬件设计中的应用",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第三个分享《数据流式编程在硬件设计中的应用》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV12N411B7TN/"},{key:17,image:_Y,title:"EDA创新推动敏捷芯片设计",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第四个分享《EDA创新推动敏捷芯片设计》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Tz4y1M7vt/"},{key:18,image:xY,title:"Automated CPU design with AI",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第五个分享《Automated CPU design with AI》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV13w411Q7zi/"},{key:19,image:SY,title:"MetaHVL硬件敏捷验证与协同仿真",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第六个分享《MetaHVL硬件敏捷验证与协同仿》。",date:"2023.08.26",url:"https://www.bilibili.com/video/BV1DN4y197Pm/"},{key:20,image:bY,title:"计算机体系结构MIT课程学习社区经验分享",text:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。本场分享主题为【计算机体系结构MIT课程学习社区经验分享】,旨在了解学习社区各位同学学习的状态和面临的挑战,邀请已完成课程的学员分享学习和动手操作LAB的经验和教训,以此更好地辅助大家完成课程。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1cs4y1r7T3/"},{key:21,image:kY,title:"计算机体系结构 l MIT课程学习新手上路宣讲",text:"达坦科技在2023年始,发起成立计算机体系结构- MIT课程学习社区,号召感兴趣的工程师和同学系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。为此,达坦科技软硬件联合开发工程师米明恒在2023年9月23日(周六)上午10:30为大家带来了一场计算机体系结构 l MIT课程学习新手上路宣讲。",date:"2023.09.24",url:"https://www.bilibili.com/video/BV1u8411i7Qw/"},{key:22,image:CY,title:"Stream Transaction Extender设计与验证",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第二部分,由电子科技大学副教授肖寅东(Readon)进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1pM4y1j7Lm/"},{key:23,image:DY,title:"面向Multi-Die FPGA的设计与部署自动化方法探索",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第三部分,由西安交通大学副教授邸志雄进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1og4y1c7RS/"},{key:24,image:EY,title:"Get Started with SpinalHDL with a Simplified Setup",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办了 《2023 SpinalHDL应用前景探索》的线上研讨会,这是研讨会第一个视频,Get Started with SpinalHDL with a Simplified Setup",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1TW4y1F7uQ/"},{key:25,image:TY,title:"Some Tips on Using Memory Black Box in SpinalHDL",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第二个视频,由yportne13带来“Some Tips on Using Memory Black Box in SpinalHDL”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1LC4y1g7c7/"},{key:26,image:jY,title:"Pipelining API Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第三个视频,由Charles Papon带来“Pipelining API Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Zj411n7SC/"},{key:27,image:OY,title:"SpinalHDL Intro for New Users",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第四个视频,由Andreas Wallner带来“SpinalHDL Intro for New Users”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:28,image:PY,title:"Pcie Brief Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第五个视频,由Chenbo带来“Pcie Brief Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:29,image:RY,title:"The J1Sc Family",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第六个视频,由Christopher Lozinsk带来“The J1Sc Family”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Jc411o7A6/"}],{Heading:LY,Paragraph:AY}=Me,{CNHead4:IY,CNTitleLarge:NY}=LY,{CNMarkSmall:$Y,CNBodySmall:zY}=AY,mc=new Map([["tech-talk",{label:"前沿科技分享",description:"探索前沿技术,拥抱创新与改变",list:FH,recommend:27}],["oss-showcase",{label:"开源产品分享",description:"软硬件融合创新实践的观察与输出",list:BH,recommend:2}],["rust-showcase",{label:"Rust语言应用及案例分享",description:"Rust编程语言的应用、实践与探索",list:sY,recommend:12}],["hardware-acceleration",{label:"硬件加速",description:"硬件加速领域的实践、经验与挑战",list:MY,recommend:21}]]),HY=f.main``,YY=f.div` +`,ow=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(Kz,{id:"join-us",children:l.jsxs(Qz,{children:[l.jsx(qz,{children:"加入我们"}),l.jsx(b8,{}),l.jsx(H8,{}),l.jsx(K8,{}),l.jsx(wz,{})]})}),l.jsx(Bz,{})]})},Zz="/zh-cn/assets/video-demo-cover-6531bf08.png",hc="/zh-cn/assets/arrow-up-right-f6ca128c.svg",Jz="/zh-cn/assets/cover1-0f766121.jpg",eH="/zh-cn/assets/cover2-6c924915.jpg",tH="/zh-cn/assets/cover3-a8cadd7b.jpg",rH="/zh-cn/assets/cover4-da59baaf.jpg",nH="/zh-cn/assets/cover5-55104208.jpg",iH="/zh-cn/assets/cover6-bf6d56c4.jpg",oH="/zh-cn/assets/cover7-461ad08e.jpg",sH="/zh-cn/assets/cover8-18bb5252.jpg",aH="/zh-cn/assets/cover9-0cfe7433.jpg",lH="/zh-cn/assets/cover10-7707f5f7.jpg",cH="/zh-cn/assets/cover11-18bf7e52.jpg",uH="/zh-cn/assets/cover12-2ec52bb9.jpg",dH="/zh-cn/assets/cover13-20980f41.jpg",fH="/zh-cn/assets/cover14-6dff9a13.jpg",hH="/zh-cn/assets/cover15-f2819b4b.jpg",mH="/zh-cn/assets/cover16-6b3eea77.jpg",pH="/zh-cn/assets/cover17-2d99b802.jpg",gH="/zh-cn/assets/cover19-9503f8ee.jpg",vH="/zh-cn/assets/cover20-a198bfe8.jpg",yH="/zh-cn/assets/cover21-c1808615.jpg",wH="/zh-cn/assets/cover22-a24d3264.jpg",_H="/zh-cn/assets/cover23-91837162.jpg",xH="/zh-cn/assets/cover24-f34d429f.jpg",SH="/zh-cn/assets/cover25-11f1a4dd.jpg",bH="/zh-cn/assets/cover26-574c835d.jpg",kH="/zh-cn/assets/cover27-cab7b800.jpg",CH="/zh-cn/assets/cover28-61988539.jpg",DH="/zh-cn/assets/cover29-cfa296fc.jpg",EH="/zh-cn/assets/cover30-6bc9e17a.jpg",TH="/zh-cn/assets/cover31-de17416a.jpg",jH="/zh-cn/assets/cover32-64d8c4cf.jpg",OH="/zh-cn/assets/cover33-747e46a5.jpg",PH="/zh-cn/assets/cover34-b47433e8.jpg",RH="/zh-cn/assets/cover35-474e265e.jpg",MH="/zh-cn/assets/cover40-e2bf253f.jpg",LH="/zh-cn/assets/cover41-56007738.jpg",AH="/zh-cn/assets/cover42-075bcf74.jpg",IH="/zh-cn/assets/cover43-d1896502.jpg",NH="/zh-cn/assets/cover50-2dc33471.jpg",$H="/zh-cn/assets/cover51-235c2ee6.jpg",zH="/zh-cn/assets/cover52-06cc8093.jpg",HH="/zh-cn/assets/cover53-11208fe4.jpg",YH="/zh-cn/assets/cover54-00d520f8.jpg",FH=[{key:1,image:Jz,title:"Virtio-net相关知识介绍与Rust-for-Linux基本知识",text:"本场workshop由达坦科技李弘宇进行内容分享,主要介绍了Virtio-net相关知识介绍与Rust-for-Linux基本知识。欢迎参加达坦科技DatenLord相关开源项目:https://github.com/datenlord/linux/tree/rust_virtio",date:"2022.08.17",url:"https://www.bilibili.com/video/BV17G4y1a7Bv/"},{key:2,image:eH,title:"roce-sim Workshop分享",text:"本场workshop由达坦科技王恒宇进行内容分享,主要介绍了roce-sim相关知识分享,如果您对这方面有兴趣,欢迎参与达坦科技开源项目:Github链接:https://github.com/datenlord/roce-sim",date:"2022.08.25",url:"https://www.bilibili.com/video/BV1UB4y137Tn/"},{key:3,image:tH,title:"Cocotb Workshop分享",text:"本场workshop由达坦科技DatenLord 翁万正进行内容分享,主要进行了cocotb相关知识介绍。",date:"2022.09.23",url:"https://www.bilibili.com/video/BV19e4y1k7EE/"},{key:4,image:rH,title:"使用Copilot在分布式系统中容忍暂时变慢的节点",text:"本场workshop由达坦科技DatenLord 田野进行内容分享,主要进行了“使用Copilot在分布式系统中容忍暂时变慢的节点“相关知识介绍。",date:"2022.09.30",url:"https://www.bilibili.com/video/BV15e411T7pX/"},{key:5,image:nH,title:"硬件设计的集合方法",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“硬件设计的集合方法”相关知识介绍。",date:"2022.10.09",url:"https://www.bilibili.com/video/BV1FK411Q7JV/"},{key:6,image:iH,title:"VLSI Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了VLSI相关知识介绍。",date:"2022.10.15",url:"https://www.bilibili.com/video/BV1bK411Q7GB/"},{key:7,image:oH,title:"Corumdum介绍",text:"本场workshop由西安电子科技大学 ISN网络与交换团队 硕士研究生李钊进行内容分享,主要进行了Corumdum相关知识介绍。",date:"2022.10.16",url:"https://www.bilibili.com/video/BV1qG41177Pq/"},{key:8,image:sH,title:"可编程交换机:原理与使用",text:"本场workshop由上海交通大学IPADS实验室博士二年级 张汉泽进行内容分享,主要进行了“可编程交换机:原理与使用”相关知识分享。可编程交换机由安装包处理规则的控制面与负责高速包处理的数据面构成,两者由一根PCIe总线相连。控制面支持高级语言编程,而数据面逻辑需要用P4语言编写。在可编程交换机上设计系统主要面临数据面内存有限与P4编程模型受限两大挑战。",date:"2022.10.23",url:"https://www.bilibili.com/video/BV1jm4y1w7w3/"},{key:9,image:aH,title:"形式化验证入门",text:"本场workshop由达坦科技DatenLord王璞进行内容分享,主要进行了形式化验证入门相关知识介绍。",date:"2022.10.26",url:"https://www.bilibili.com/video/BV1DG411L78p/"},{key:10,image:lH,title:"利用RDMA加速FaaS服务",text:"本场workshop由达坦科技DatenLord李弘宇进行内容分享,主要进行了“利用RDMA加速FaaS服务”相关知识介绍。",date:"2022.11.06",url:"https://www.bilibili.com/video/BV1et4y1K7Sw/"},{key:11,image:cH,title:"Rust for Linux",text:"本场workshop由苏宇恒进行内容分享,主要进行了“Rust for Linux”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1G8411a7CE/"},{key:12,image:uH,title:"Intel用户态中断",text:"本场workshop由韩明聪进行内容分享,主要进行了“Intel用户态中断”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1tG4y1t7Lg/"},{key:13,image:dH,title:"VLSI DSP Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“VLSI DSP Intro”相关知识介绍。",date:"2022.11.11",url:"https://www.bilibili.com/video/BV18P4y1y7iP/"},{key:14,image:fH,title:"DSP Sharing Part2",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要就DSP相关知识进行第二次workshop分享",date:"2022.11.12",url:"https://www.bilibili.com/video/BV1bM411k7YP/"},{key:15,image:hH,title:"eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架",text:"本场workshop由浙江大学学生/eunomia-bpf 开发者 郑昱笙进行内容分享,主要内容围绕“eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架”相关知识。",date:"2022.11.20",url:"https://www.bilibili.com/video/BV1u84y1C7pQ/"},{key:16,image:mH,title:"RDMA网络拥塞管理架构",text:"本场workshop由北京邮电大学网络与交换国家重点实验室、计算机学院,副研究员、博导:张乙然进行内容分享,主要内容围绕“RDMA网络拥塞管理架构”进行知识介绍。",date:"2022.11.27",url:"https://www.bilibili.com/video/BV1Ve4y1g7gx/"},{key:17,image:pH,title:"使用RDMA加速服务器无感知计算容器启动",text:"本场workshop由上海交通大学助理教授魏星达进行分享,主要内容围绕“使用RDMA加速服务器无感知计算容器启动”进行知识介绍。",date:"2022.12.04",url:"https://www.bilibili.com/video/BV1qG4y1G784/"},{key:19,image:gH,title:"基于智能网卡的数据处理系统",text:"本场workshop由浙江大学百人计划研究员 王则可进行分享,主要内容为“基于智能网卡的数据处理系统”介绍。",date:"2022.12.18",url:"https://www.bilibili.com/video/BV1Eg411J7fJ/"},{key:20,image:vH,title:"异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构",text:"本场workshop由何安平副教授进行分享,主要内容为“异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构”介绍。",date:"2022.12.25",url:"https://www.bilibili.com/video/BV1sA411D7on/"},{key:21,image:yH,title:"使用 TLA+ 为分布式算法验证正确性",text:"本场workshop由达坦科技DatenLord田野进行分享,主要内容为“使用 TLA+ 为分布式算法验证正确性”介绍。",date:"2023.01.09",url:"https://www.bilibili.com/video/BV1pG4y1y7an/"},{key:22,image:wH,title:"喷泉码技术简介",text:"本场workshop由兰州大学信息科学与工程学院副教授、通信工程专业系主任袁磊 进行分享,主要内容为“喷泉码技术简介”介绍。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1SM411b77k/"},{key:23,image:_H,title:"数据库隔离级别及MVCC",text:"本场workshop由达坦科技DatenLord施继成进行分享,主要内容为“数据库隔离级别及MVCC”介绍。",date:"2023.01.29",url:"https://www.bilibili.com/video/BV1sR4y1b7Cu/"},{key:24,image:xH,title:"互联网传输协议优化研究",text:"本场workshop由中国人民大学副教授李彤教授进行分享,主要内容为“互联网传输协议优化研究”介绍。",date:"2023.02.06",url:"https://www.bilibili.com/video/BV1X84y157vL/"},{key:25,image:SH,title:"高性能RDMA网络协议栈",text:"高性能RDMA网络协议栈是RDMA高性能网络的核心组成部分之一,它提供了支持RDMA技术的网络协议和驱动程序。在本周的前沿科技分享中,我们邀请到了湖南大学信息科学与工程学院的陈果教授来给我们分享高性能RDMA网络协议栈的话题。",date:"2023.02.28",url:"https://www.bilibili.com/video/BV1Y24y1n7Dk/"},{key:26,image:bH,title:"GPU抢占式任务调度",text:"GPU编程可以大幅提升计算速度和效率,从而使得许多计算任务得以在合理时间内完成。随着GPU硬件技术的发展和大规模数据处理需求的增加,GPU编程的应用范围不断扩大。在本周的前沿科技分享中,我们邀请到了上海交通大学并行与分布式研究所的韩明聪博士来给我们分享GPU抢占式任务调度。",date:"2023.03.05",url:"https://www.bilibili.com/video/BV1cY4y1y7ND/"},{key:27,image:kH,title:"聊聊RaptorQ纠错码",text:"喷泉码具有极高的纠错能力,且具有低延迟、地复杂度、高效率等优点,使其在冷存储、分布式存储、无线通信等领域得到广泛应用。达坦科技致力于软硬件融合的解决方案,喷泉码的高效实现在硬件上,作为公司长期的技术储备,在本周的前沿科技分享中,达坦科技的联合创始人兼CTO施继成将为大家分享聊聊 RaptorQ 纠错码 。",date:"2023.03.15",url:"https://www.bilibili.com/video/BV1wL411C7DL/"},{key:28,image:CH,title:"Buddy Compiler 简介和愿景",text:"在本次分享中,中国科学院软件研究所博士生张洪滨将介绍Buddy Compiler 编译流程、协同设计、硬件支持。Buddy Compiler 是领域特定的编译器框架,致力于打造基于 MLIR 和 RISC-V 的软硬件协同设计生态。其目标是实现从 DSL 到 DSA 的编译流程和协同设计,愿景是让领域特定的协同设计不再困难。",date:"2023.03.21",url:"https://www.bilibili.com/video/BV1YT41167GB/"},{key:29,image:DH,title:"新一代计算架构:超异构计算",text:"AGI带来的变化之一是算力将进一步从CPU转到GPU,在本周的前沿技术分享中,我们邀请到了上海矩向科技创始人兼CEO黄朝波为大家分享新一代计算架构:超异构计算。",date:"2023.04.04",url:"https://www.bilibili.com/video/BV1Rm4y1q7Dx/"},{key:30,image:EH,title:"通过Chainsaw设计DSP电路",text:"DSP在数据压缩、编码和加密方面都发挥了重要的作用;SpinalHDL具有更高的抽象层次和更强的表达能力,可以大大简化DSP电路设计的复杂度和提高开发效率;而Chainsaw框架可以在不同的FPGA平台上运行,提高了设计的灵活性和可移植性。在本周的前沿技术分享中,我们邀请到了中山大学在读博士李天瑞为大家分享通过Chainsaw设计DSP电路。",date:"2023.04.18",url:"https://www.bilibili.com/video/BV14o4y1j7bH/"},{key:31,image:TH,title:"Something About Cache Security",text:"在本周的前沿技术分享中,我们邀请到了浙江大学在读硕士研究生缪晨露为大家分享她在MICRO和HPCA上发表的两篇论文的精华,演讲主题是Something About Cache Security。",date:"2023.04.25",url:"https://www.bilibili.com/video/BV1p24y1F7fN/"},{key:32,image:jH,title:"Rust嵌入式开发生态介绍及入门",text:"在本周的前沿技术分享中,我们邀请到了一位爱好硬件的软件工程师米明恒,来为大家分享Rust嵌入式开发生态介绍及入门。",date:"2023.05.04",url:"https://www.bilibili.com/video/BV1J24y1T7EH/"},{key:33,image:OH,title:"RDMA赋能数据中心/超算中心间远程互联",text:"在本周的前沿技术分享中,我们邀请到了南京大学田臣教授,来为大家分享RDMA赋能数据中心/超算中心间远程互联。",date:"2023.06.04",url:"https://www.bilibili.com/video/BV1cz4y1B7cx/"},{key:34,image:PH,title:"Paper Reading: DPU任务卸载",text:"达坦科技一直在探索用硬件加速做分布式跨云存储,在本周的前沿技术分享中,我们邀请到了中南大学在读博士生卢军,来为大家分享DPU任务卸载的相关研究。",date:"2023.06.17",url:"https://www.bilibili.com/video/BV1R14y1S79T/"},{key:35,image:RH,title:"Rust在物理引擎研发中的应用",text:"在本周的前沿技术分享中,我们邀请到了Motphys CEO崔汉青,来为大家分享Rust在物理引擎研发中的应用。",date:"2023.06.27",url:"https://b23.tv/BZuSvyW"},{key:40,image:MH,title:"基于BSV的RTL仿真加速设计研究",text:"BSV的仿真加速可以提升硬件开发调试的效率。在本周的前沿技术分享中,我们邀请到了梁之杰,来为大家分享基于BSV的RTL仿真加速设计研究。",date:"2023.07.09",url:"https://www.bilibili.com/video/BV1ou411L7Yy/"},{key:41,image:LH,title:"RDMA网络的系统测试方案",text:"在本周的前沿技术分享中,我们邀请到了孔心皓,来为大家分享RDMA 网络的系统测试方案。",date:"2023.07.16",url:"https://www.bilibili.com/video/BV1tz4y147rw/"},{key:42,image:AH,title:"RapidWright技术分享会",text:"在本周的前沿技术分享中,我们邀请到了西南交通大学邸志雄副教授和他的学生向瀚章,来为大家分享开源FPGA设计工具RapidWright技术。",date:"2023.07.28",url:"https://www.bilibili.com/video/BV14z4y1x7a8/"},{key:43,image:IH,title:"基于Karmada实现Kubernetes应用跨集群故障转移",text:"在本周的前沿技术分享中,我们邀请到了开源爱好者,云兴科技软件研发工程师梁远鹏,来为大家分享基于Karmada实现Kubernetes应用跨集群故障转移。",date:"2023.08.01",url:"https://www.bilibili.com/video/BV1rN411Y7aZ/"},{key:50,image:NH,title:"大模型训练和基础设施",text:"在本周的前沿技术分享中,我们邀请到了范一呈,来为大家分享大模型训练和基础设施。",date:"2023.09.01",url:"https://www.bilibili.com/video/BV1ZN4y1R7HP/"},{key:51,image:$H,title:"RustBelt与Rust形式化方法",text:"在本周的前沿技术分享中,我们邀请到了王俊吉,来为大家分享RustBelt与Rust形式化方法。",date:"2023.09.04",url:"https://www.bilibili.com/video/BV1Vw411D7rT/"},{key:52,image:zH,title:"网络的智能该放在哪里:网卡、交换机还是xPU",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:53,image:HH,title:"以ARM为镜的RISC-V",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:54,image:YH,title:"面向网络测量的可编程交换机优化技术",text:"在本周的前沿技术分享中,我们邀请到了北京大学计算机学院黄群助理教授,来为大家分享面向网络测量的可编程交换机优化技术。",date:"2023.10.20",url:"https://www.bilibili.com/video/BV1i84y1974F/"}],VH="/zh-cn/assets/cover1-42e6189a.jpg",WH="/zh-cn/assets/cover2-af26ed46.jpg",UH="/zh-cn/assets/cover3-9c9d21fa.jpg",BH=[{key:1,image:VH,title:"Xline-跨数据中心一致性的元数据管理",text:"天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline是一款开源分布式KV存储系统,基于Curp共识算法实现,旨在提供跨云元数据管理的功能。相比于传统共识协议Raft或Paxos,Curp在天空计算的场景中有着更好的性能表现。本次分享将聚焦于共识算法,从天空计算的背景和挑战出发,介绍Curp共识算法,以及Revision机制与Curp无序性语义之间的冲突,最后,简述下Xline未来的优化方向。欢迎了解更多关于Xline的信息:Https://github.com/datenlord/Xline",date:"2023.02.09",url:"https://www.bilibili.com/video/BV1XY411q7X8/"},{key:2,image:WH,title:"源码解读:Xline Curp共识协议的设计与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.04.30",url:"https://www.bilibili.com/video/BV1dL411h7YK/"},{key:3,image:UH,title:"Xline的Lease机制与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.06.09",url:"https://www.bilibili.com/video/BV1FX4y1h7X5/"}],GH="/zh-cn/assets/cover1-a1358db9.jpg",XH="/zh-cn/assets/cover2-b899ea12.jpg",KH="/zh-cn/assets/cover3-e0bf4798.jpg",QH="/zh-cn/assets/cover4-15b0b4f1.jpg",qH="/zh-cn/assets/cover5-7c4c2482.jpg",ZH="/zh-cn/assets/cover6-1c4d5c5f.jpg",JH="/zh-cn/assets/cover7-4f7454c0.jpg",eY="/zh-cn/assets/cover8-7e30c0fc.jpg",tY="/zh-cn/assets/cover9-e8c86c60.jpg",rY="/zh-cn/assets/cover10-bb13b118.jpg",nY="/zh-cn/assets/cover11-c29e9692.jpg",iY="/zh-cn/assets/cover12-6877e246.jpg",oY="/zh-cn/assets/cover13-5a4d97b0.jpg",sY="/zh-cn/assets/cover14-052a8b36.jpg",aY=[{key:7,image:JH,title:"2022年Rust开发者大会Workshop One:用Rust实现RDMA高性能编程",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是本场workshop的第一部分,将为大家介绍如何用Rust实现RDMA高性能编程。",date:"2022.08.03",url:"https://www.bilibili.com/video/BV13e4y1D7Ch/"},{key:8,image:eY,title:"2022年Rust开发者大会Workshop Two:Async RDMA",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是第二部分workshop,将为大家介绍Async RDMA。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:9,image:tY,title:"2022年Rust开发者大会Workshop Three:Workshop动手实验环节",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题Workshop。这是本场Worshop的第三个部分:workshop动手环节 方便大家体验用Rust构建RDMA应用。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1oN4y1V7Hn/"},{key:1,image:GH,title:"Rust China Hackathon2022空中路演",text:"由Rust中文社区举办的题为「Rust For Fun」的首届Rust China Hackathon已经顺利完赛。达坦科技作为本届Hackathon的协办方,赞助参与本次企业组赛道。最终获得优胜奖的两支队伍在线上了举办一场空中路演。分享了:他们是如何思考拆解赛题的?在着手设计时碰到哪些难点和挑战?以及最终提交的代码设计思路和亮点。欢迎对Concurrent Indexing感兴趣的伙伴观看本条视频。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1xY41197Za/"},{key:2,image:XH,title:"4.8 Beijing Rust Meetup|张汉东《理解 Unsafe Rust》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由《Rust 编程之道》作者、Rust 中文社区布道者张汉东老师进行,主题为《理解 Unsafe Rust》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1c24y1A7aK/"},{key:3,image:KH,title:"4.8 Beijing Rust Meetup|冯洋《RUFES》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场由南京大学计算机科学与技术系助理研究员冯洋老师进行《基于实际场景应用分析的Rust库模糊测试技术报告》的演讲分享。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Qo4y1n7tS/"},{key:4,image:QH,title:"4.8 Beijing Rust Meetup|施继成《Rust for Linux 6.2》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:5,image:qH,title:"4.8 Beijing Rust Meetup|叶天星《用Rust实现Git传输协议、Git对象解析和数据库存储》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:6,image:ZH,title:"4.8 Beijing Rust Meetup|茌海《Monoio:一个基于 io-uring 的 Rust Runtime》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:10,image:rY,title:"如何用Rust写分布式系统",text:"分享会介绍分布式KV Store (Xline) 整体的组成,以及不同组件之间如何去交互。在广域网下的分布式系统如何高效地达成共识,以及分布式系统如何实现容错。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Hs4y1r7dD/"},{key:11,image:nY,title:"Building microsecond-scale system with modern networking in Rust",text:"随着新型网络技术,如RDMA的普及,现代分布式应用的延迟降到了毫秒甚至微秒级别。这为构建系统软件带来了新的挑战。Rust的zero-cost抽象及内存管理能力能够为构建新型分布式应用带来新的机遇。我将分享利用Rust在用户态及内核态构建新型系统软件的相关经验,包括如何利用Rust抽象RDMA硬件的底层抽象及如何在内核构建一个毫秒级的容器启动机制。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Zo4y1P7Sg/"},{key:12,image:iY,title:"30分钟体验Rust for Linux内核模块开发",text:"本主题会提供构建好的docker开发环境,在30分钟内演示如何使用r4l开发一个简易内核模块,并介绍目前r4l的发展现状。可以自备好电脑现场体验。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV12j411U78o/"},{key:13,image:oY,title:"DatenLord 2023 Hackathon赛题宣讲会",text:"达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛主题为 Explore the Possibilities 赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来吧!",date:"2023.11.25",url:"https://www.bilibili.com/video/BV1su4y157iB/"},{key:14,image:sY,title:"DatenLord Hackathon2023空中路演",text:"DatenLord Hackathon 2023已经顺利完赛。达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台。我们邀请参赛者为DatenLord的极端场景设计并实现缓存 p2p 传输和同步模块。本次空中路演邀请了最终获得优胜奖的两支队伍进行思路分享,包括他们的解题思路,碰到的难点和挑战,以及如何应对的方法和设计亮点。欢迎感兴趣的大家进行观看,有问题也欢迎在评论区进行交流~~不要忘记一键三连哦~~",date:"2024.01.07",url:"https://www.bilibili.com/video/BV1ic411t7Nf/"}],lY="/zh-cn/assets/cover1-b9371555.jpg",cY="/zh-cn/assets/cover2-41a903e3.jpg",uY="/zh-cn/assets/cover2-41a903e3.jpg",dY="/zh-cn/assets/cover2-41a903e3.jpg",fY="/zh-cn/assets/cover2-41a903e3.jpg",hY="/zh-cn/assets/cover2-41a903e3.jpg",mY="/zh-cn/assets/cover2-41a903e3.jpg",pY="/zh-cn/assets/cover2-41a903e3.jpg",gY="/zh-cn/assets/cover2-41a903e3.jpg",vY="/zh-cn/assets/cover13-a69a12b0.jpg",yY="/zh-cn/assets/cover14-3a97e013.jpg",wY="/zh-cn/assets/cover14-3a97e013.jpg",_Y="/zh-cn/assets/cover14-3a97e013.jpg",xY="/zh-cn/assets/cover14-3a97e013.jpg",SY="/zh-cn/assets/cover14-3a97e013.jpg",bY="/zh-cn/assets/cover14-3a97e013.jpg",kY="/zh-cn/assets/cover20-c97bc11b.jpg",CY="/zh-cn/assets/cover21-9f52ba13.jpg",DY="/zh-cn/assets/cover22-187b655a.jpg",EY="/zh-cn/assets/cover23-1e515665.jpg",TY="/zh-cn/assets/cover24-020d0c34.jpg",jY="/zh-cn/assets/cover25-cb84d871.jpg",OY="/zh-cn/assets/cover26-7a726e97.jpg",PY="/zh-cn/assets/cover27-401eea81.jpg",RY="/zh-cn/assets/cover28-6ddc6bee.jpg",MY="/zh-cn/assets/cover29-0d2deb11.jpg",LY=[{key:1,image:lY,title:"Utilizing SpinalHDL for Large-scale Datapath Design",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的一个workshop:Utilizing SpinalHDL for Large-scale Datapath Design,由李天瑞进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1PM411m7DB/"},{key:2,image:cY,title:"A Network Attached Deep Learning Accelerator for FPGA Clusters",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的三个workshop:A Network Attached Deep Learning Accelerator for FPGA Clusters,由Philipp Kreowsky Justin Knapheide进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1HM411m7mS/"},{key:3,image:uY,title:"Coding a microprogrammed protocol receiver in SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的五个workshop:Coding a microprogrammed protocol receiver in SpinalHDL,由Michael Meier进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1oK411z7VD/"},{key:4,image:dY,title:"Utilizing SpinalHDL to Accelerate Neuroscience",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的二个workshop:Utilizing SpinalHDL to Accelerate Neuroscience,由Jeff-Ciesielski进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1GG4y1J7gU/"},{key:5,image:fY,title:"SpinalHDL in Computer Architecture Research",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的四个workshop:SpinalHDL in Computer Architecture Research,由Sallar Ahmadi-Pour ( saahm)进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1gA411X7f8/"},{key:6,image:hY,title:"NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第六个workshop:NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix,由Dolu1990进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV13K41167q5/"},{key:7,image:mY,title:"Recent progress on formal verification support on SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第七个workshop:Recent progress on formal verification support on SpinalHDL,由Xiao Yindong (Readon)进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV1bG411N7fk/"},{key:8,image:pY,title:"SpinalHDL for ASIC",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第八个workshop:SpinalHDL for ASIC,由Sebastien-riou进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV16e4y1L7dV/"},{key:9,image:gY,title:"From Peripheral Plugins to Product documentation",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第九个workshop:From Peripheral Plugins to Product documentation,由Andreas Wallner进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV12v4y1Q7cg/"},{key:13,image:vY,title:"Coroutines Applied to a Tilelink Interconnect Elaboration",text:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第一部分,由Charles Popen进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1Vz4y1J7ck/"},{key:14,image:yY,title:"RISC-V敏捷硬件开发-软件定义芯片",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第一个分享《RISC-V敏捷硬件开发-软件定义芯片》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Qh4y1K7pH/"},{key:15,image:wY,title:"香山处理器与敏捷开发工具链的最新进展",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第二个分享《香山处理器与敏捷开发工具链的最新进展》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Dz4y1T7V6/"},{key:16,image:_Y,title:"数据流式编程在硬件设计中的应用",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第三个分享《数据流式编程在硬件设计中的应用》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV12N411B7TN/"},{key:17,image:xY,title:"EDA创新推动敏捷芯片设计",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第四个分享《EDA创新推动敏捷芯片设计》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Tz4y1M7vt/"},{key:18,image:SY,title:"Automated CPU design with AI",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第五个分享《Automated CPU design with AI》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV13w411Q7zi/"},{key:19,image:bY,title:"MetaHVL硬件敏捷验证与协同仿真",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第六个分享《MetaHVL硬件敏捷验证与协同仿》。",date:"2023.08.26",url:"https://www.bilibili.com/video/BV1DN4y197Pm/"},{key:20,image:kY,title:"计算机体系结构MIT课程学习社区经验分享",text:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。本场分享主题为【计算机体系结构MIT课程学习社区经验分享】,旨在了解学习社区各位同学学习的状态和面临的挑战,邀请已完成课程的学员分享学习和动手操作LAB的经验和教训,以此更好地辅助大家完成课程。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1cs4y1r7T3/"},{key:21,image:CY,title:"计算机体系结构 l MIT课程学习新手上路宣讲",text:"达坦科技在2023年始,发起成立计算机体系结构- MIT课程学习社区,号召感兴趣的工程师和同学系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。为此,达坦科技软硬件联合开发工程师米明恒在2023年9月23日(周六)上午10:30为大家带来了一场计算机体系结构 l MIT课程学习新手上路宣讲。",date:"2023.09.24",url:"https://www.bilibili.com/video/BV1u8411i7Qw/"},{key:22,image:DY,title:"Stream Transaction Extender设计与验证",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第二部分,由电子科技大学副教授肖寅东(Readon)进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1pM4y1j7Lm/"},{key:23,image:EY,title:"面向Multi-Die FPGA的设计与部署自动化方法探索",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第三部分,由西安交通大学副教授邸志雄进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1og4y1c7RS/"},{key:24,image:TY,title:"Get Started with SpinalHDL with a Simplified Setup",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办了 《2023 SpinalHDL应用前景探索》的线上研讨会,这是研讨会第一个视频,Get Started with SpinalHDL with a Simplified Setup",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1TW4y1F7uQ/"},{key:25,image:jY,title:"Some Tips on Using Memory Black Box in SpinalHDL",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第二个视频,由yportne13带来“Some Tips on Using Memory Black Box in SpinalHDL”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1LC4y1g7c7/"},{key:26,image:OY,title:"Pipelining API Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第三个视频,由Charles Papon带来“Pipelining API Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Zj411n7SC/"},{key:27,image:PY,title:"SpinalHDL Intro for New Users",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第四个视频,由Andreas Wallner带来“SpinalHDL Intro for New Users”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:28,image:RY,title:"Pcie Brief Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第五个视频,由Chenbo带来“Pcie Brief Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:29,image:MY,title:"The J1Sc Family",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第六个视频,由Christopher Lozinsk带来“The J1Sc Family”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Jc411o7A6/"}],{Heading:AY,Paragraph:IY}=Me,{CNHead4:NY,CNTitleLarge:$Y}=AY,{CNMarkSmall:zY,CNBodySmall:HY}=IY,mc=new Map([["tech-talk",{label:"前沿科技分享",description:"探索前沿技术,拥抱创新与改变",list:FH,recommend:27}],["oss-showcase",{label:"开源产品分享",description:"软硬件融合创新实践的观察与输出",list:BH,recommend:2}],["rust-showcase",{label:"Rust语言应用及案例分享",description:"Rust编程语言的应用、实践与探索",list:aY,recommend:12}],["hardware-acceleration",{label:"硬件加速",description:"硬件加速领域的实践、经验与挑战",list:LY,recommend:21}]]),YY=f.main``,FY=f.div` max-width: 1440px; margin-inline: auto; padding: 1rem 1.76rem 1.68rem; @@ -2033,39 +2033,39 @@ Error generating stack: `+o.message+` &:last-child { padding-bottom: 0; } -`,Th=f(IY)` +`,Th=f(NY)` padding-bottom: 0.48rem; text-align: center; -`,FY=f.div` +`,VY=f.div` display: grid; grid-template-rows: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr); grid-gap: 0.29rem; -`,VY=f.div` +`,WY=f.div` display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 0.43rem 0.29rem; `,eb=f.div` display: flex; flex-direction: column; -`,WY=f(eb)` +`,UY=f(eb)` display: flex; flex-direction: column; grid-area: 1 / 1 / 3 / 2; -`,UY=f.div` +`,BY=f.div` display: flex; justify-content: space-between; height: 100%; -`,BY=f.div``,sw=f.img` +`,GY=f.div``,sw=f.img` display: block; width: 100%; border-radius: 0.06rem; -`,GY=f.img` +`,XY=f.img` display: block; width: 50%; height: min-content; border-radius: 0.06rem; -`,XY=f.img` +`,KY=f.img` float: left; width: 50%; padding-right: 0.21rem; @@ -2073,9 +2073,9 @@ Error generating stack: `+o.message+` border-radius: 0.06rem; `,aw=f.div` padding-top: 0.29rem; -`,KY=f.div` +`,QY=f.div` width: 47%; -`,pc=f($Y)` +`,pc=f(zY)` padding-bottom: 0.11rem; color: ${e=>e.theme.secondary01}; `,gc=f.div` @@ -2087,27 +2087,27 @@ Error generating stack: `+o.message+` &:hover { color: #531dab; } -`,vc=f(NY)``,yc=f.img` +`,vc=f($Y)``,yc=f.img` width: 0.215rem; height: 0.215rem; -`,wc=f(zY)` +`,wc=f(HY)` color: #667085; -`,_c=()=>{var a,c,d,h;const t=ti().pathname.split("/").join(""),r=(a=mc.get(t))==null?void 0:a.label,n=(c=mc.get(t))==null?void 0:c.description,i=(d=mc.get(t))==null?void 0:d.list.reverse(),o=(h=mc.get(t))==null?void 0:h.recommend;return N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:Zz,subTitle:n,children:r}),l.jsx(HY,{children:l.jsxs(YY,{children:[l.jsxs(Eh,{children:[l.jsx(Th,{children:"最新视频"}),l.jsx(FY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C},E)=>E===0?l.jsxs(WY,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g):E<3?l.jsxs(BY,{children:[l.jsx(XY,{src:v}),l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]},E):null)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"推荐视频"}),i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>{if(g===o)return l.jsxs(UY,{children:[l.jsx(GY,{src:v}),l.jsxs(KY,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"全部视频"}),l.jsx(VY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>l.jsxs(eb,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g))})]})]})})]})};//! moment.js +`,_c=()=>{var a,c,d,h;const t=ti().pathname.split("/").join(""),r=(a=mc.get(t))==null?void 0:a.label,n=(c=mc.get(t))==null?void 0:c.description,i=(d=mc.get(t))==null?void 0:d.list.reverse(),o=(h=mc.get(t))==null?void 0:h.recommend;return N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:Zz,subTitle:n,children:r}),l.jsx(YY,{children:l.jsxs(FY,{children:[l.jsxs(Eh,{children:[l.jsx(Th,{children:"最新视频"}),l.jsx(VY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C},E)=>E===0?l.jsxs(UY,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g):E<3?l.jsxs(GY,{children:[l.jsx(KY,{src:v}),l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]},E):null)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"推荐视频"}),i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>{if(g===o)return l.jsxs(BY,{children:[l.jsx(XY,{src:v}),l.jsxs(QY,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"全部视频"}),l.jsx(WY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>l.jsxs(eb,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g))})]})]})})]})};//! moment.js //! version : 2.29.4 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com -var tb;function U(){return tb.apply(null,arguments)}function QY(e){tb=e}function Zr(e){return e instanceof Array||Object.prototype.toString.call(e)==="[object Array]"}function lo(e){return e!=null&&Object.prototype.toString.call(e)==="[object Object]"}function Oe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function wg(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(Oe(e,t))return!1;return!0}function ar(e){return e===void 0}function qn(e){return typeof e=="number"||Object.prototype.toString.call(e)==="[object Number]"}function bl(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function rb(e,t){var r=[],n,i=e.length;for(n=0;n>>0,n;for(n=0;n=0&&he.test(s);)s=s.replace(he,p),he.lastIndex=0,m-=1;return s}var hr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Vi(s){var u=this._longDateFormat[s],m=this._longDateFormat[s.toUpperCase()];return u||!m?u:(this._longDateFormat[s]=m.match(ue).map(function(p){return p==="MMMM"||p==="MM"||p==="DD"||p==="dddd"?p.slice(1):p}).join(""),this._longDateFormat[s])}var Cr="Invalid date";function mr(){return this._invalidDate}var Us="%d",Bs=/\d{1,2}/;function Gs(s){return this._ordinal.replace("%d",s)}var ii={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Ol(s,u,m,p){var _=this._relativeTime[m];return G(_)?_(s,u,m,p):_.replace(/%d/i,s)}function Pl(s,u){var m=this._relativeTime[s>0?"future":"past"];return G(m)?m(u):m.replace(/%s/i,u)}var oi={};function Dt(s,u){var m=s.toLowerCase();oi[m]=oi[m+"s"]=oi[u]=s}function Et(s){return typeof s=="string"?oi[s]||oi[s.toLowerCase()]:void 0}function si(s){var u={},m,p;for(p in s)c(s,p)&&(m=Et(p),m&&(u[m]=s[p]));return u}var Xs={};function mt(s,u){Xs[s]=u}function af(s){var u=[],m;for(m in s)c(s,m)&&u.push({unit:m,priority:Xs[m]});return u.sort(function(p,_){return p.priority-_.priority}),u}function Co(s){return s%4===0&&s%100!==0||s%400===0}function Xt(s){return s<0?Math.ceil(s)||0:Math.floor(s)}function ge(s){var u=+s,m=0;return u!==0&&isFinite(u)&&(m=Xt(u)),m}function L(s,u){return function(m){return m!=null?(H(this,s,m),n.updateOffset(this,u),this):I(this,s)}}function I(s,u){return s.isValid()?s._d["get"+(s._isUTC?"UTC":"")+u]():NaN}function H(s,u,m){s.isValid()&&!isNaN(m)&&(u==="FullYear"&&Co(s.year())&&s.month()===1&&s.date()===29?(m=ge(m),s._d["set"+(s._isUTC?"UTC":"")+u](m,s.month(),Ml(m,s.month()))):s._d["set"+(s._isUTC?"UTC":"")+u](m))}function J(s){return s=Et(s),G(this[s])?this[s]():this}function re(s,u){if(typeof s=="object"){s=si(s);var m=af(s),p,_=m.length;for(p=0;p<_;p++)this[m[p].unit](s[m[p].unit])}else if(s=Et(s),G(this[s]))return this[s](u);return this}var fe=/\d/,ie=/\d\d/,ce=/\d{3}/,ne=/\d{4}/,_e=/[+-]?\d{6}/,ae=/\d\d?/,_t=/\d\d\d\d?/,ct=/\d\d\d\d\d\d?/,tt=/\d{1,3}/,zt=/\d{1,4}/,tn=/[+-]?\d{1,6}/,rn=/\d+/,xn=/[+-]?\d+/,nn=/Z|[+-]\d\d:?\d\d/gi,Sn=/Z|[+-]\d\d(?::?\d\d)?/gi,Ks=/[+-]?\d+(\.\d{1,3})?/,bn=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ai;ai={};function K(s,u,m){ai[s]=G(u)?u:function(p,_){return p&&m?m:u}}function Ve(s,u){return c(ai,s)?ai[s](u._strict,u._locale):new RegExp(rr(s))}function rr(s){return pt(s.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(u,m,p,_,j){return m||p||_||j}))}function pt(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Wi={};function me(s,u){var m,p=u,_;for(typeof s=="string"&&(s=[s]),g(u)&&(p=function(j,A){A[u]=ge(j)}),_=s.length,m=0;m<_;m++)Wi[s[m]]=p}function kn(s,u){me(s,function(m,p,_,j){_._w=_._w||{},u(m,_._w,_,j)})}function Rl(s,u,m){u!=null&&c(Wi,s)&&Wi[s](u,m._a,m,s)}var Tt=0,Cn=1,on=2,xt=3,zr=4,Dn=5,Ui=6,yk=7,wk=8;function _k(s,u){return(s%u+u)%u}var ut;Array.prototype.indexOf?ut=Array.prototype.indexOf:ut=function(s){var u;for(u=0;u 0;){if(_=Al(j.slice(0,m).join("-")),_)return _;if(p&&p.length>=m&&lC(j,p)>=m-1)break;m--}u++}return ea}function uC(s){return s.match("^[^/\\\\]*$")!=null}function Al(s){var u=null,m;if(Qe[s]===void 0&&e&&e.exports&&uC(s))try{u=ea._abbr,m=Bb,m("./locale/"+s),li(u)}catch{Qe[s]=null}return Qe[s]}function li(s,u){var m;return s&&(h(u)?m=Tn(s):m=df(s,u),m?ea=m:typeof console<"u"&&console.warn&&console.warn("Locale "+s+" not found. Did you forget to load it?")),ea._abbr}function df(s,u){if(u!==null){var m,p=rv;if(u.abbr=s,Qe[s]!=null)te("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=Qe[s]._config;else if(u.parentLocale!=null)if(Qe[u.parentLocale]!=null)p=Qe[u.parentLocale]._config;else if(m=Al(u.parentLocale),m!=null)p=m._config;else return Js[u.parentLocale]||(Js[u.parentLocale]=[]),Js[u.parentLocale].push({name:s,config:u}),null;return Qe[s]=new $e(Te(p,u)),Js[s]&&Js[s].forEach(function(_){df(_.name,_.config)}),li(s),Qe[s]}else return delete Qe[s],null}function dC(s,u){if(u!=null){var m,p,_=rv;Qe[s]!=null&&Qe[s].parentLocale!=null?Qe[s].set(Te(Qe[s]._config,u)):(p=Al(s),p!=null&&(_=p._config),u=Te(_,u),p==null&&(u.abbr=s),m=new $e(u),m.parentLocale=Qe[s],Qe[s]=m),li(s)}else Qe[s]!=null&&(Qe[s].parentLocale!=null?(Qe[s]=Qe[s].parentLocale,s===li()&&li(s)):Qe[s]!=null&&delete Qe[s]);return Qe[s]}function Tn(s){var u;if(s&&s._locale&&s._locale._abbr&&(s=s._locale._abbr),!s)return ea;if(!o(s)){if(u=Al(s),u)return u;s=[s]}return cC(s)}function fC(){return ht(Qe)}function ff(s){var u,m=s._a;return m&&E(s).overflow===-2&&(u=m[Cn]<0||m[Cn]>11?Cn:m[on]<1||m[on]>Ml(m[Tt],m[Cn])?on:m[xt]<0||m[xt]>24||m[xt]===24&&(m[zr]!==0||m[Dn]!==0||m[Ui]!==0)?xt:m[zr]<0||m[zr]>59?zr:m[Dn]<0||m[Dn]>59?Dn:m[Ui]<0||m[Ui]>999?Ui:-1,E(s)._overflowDayOfYear&&(uon)&&(u=on),E(s)._overflowWeeks&&u===-1&&(u=yk),E(s)._overflowWeekday&&u===-1&&(u=wk),E(s).overflow=u),s}var hC=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mC=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,pC=/Z|[+-]\d\d(?::?\d\d)?/,Il=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],gC=/^\/?Date\((-?\d+)/i,vC=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,yC={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function iv(s){var u,m,p=s._i,_=hC.exec(p)||mC.exec(p),j,A,oe,ve,ze=Il.length,Kt=hf.length;if(_){for(E(s).iso=!0,u=0,m=ze;u =0)return j[p]}function zD(s,u){var m=s.since<=s.until?1:-1;return u===void 0?n(s.since).year():n(s.since).year()+(u-s.offset)*m}function HD(){var s,u,m,p=this.localeData().eras();for(s=0,u=p.length;sj&&(u=j),rE.call(this,s,u,m,p,_))}function rE(s,u,m,p,_){var j=Zg(s,u,m,p,_),A=qs(j.year,0,j.dayOfYear);return this.year(A.getUTCFullYear()),this.month(A.getUTCMonth()),this.date(A.getUTCDate()),this}X("Q",0,"Qo","quarter"),Dt("quarter","Q"),mt("quarter",7),K("Q",fe),me("Q",function(s,u){u[Cn]=(ge(s)-1)*3});function nE(s){return s==null?Math.ceil((this.month()+1)/3):this.month((s-1)*3+this.month()%3)}X("D",["DD",2],"Do","date"),Dt("date","D"),mt("date",9),K("D",ae),K("DD",ae,ie),K("Do",function(s,u){return s?u._dayOfMonthOrdinalParse||u._ordinalParse:u._dayOfMonthOrdinalParseLenient}),me(["D","DD"],on),me("Do",function(s,u){u[on]=ge(s.match(ae)[0])});var Sv=L("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),Dt("dayOfYear","DDD"),mt("dayOfYear",4),K("DDD",tt),K("DDDD",ce),me(["DDD","DDDD"],function(s,u,m){m._dayOfYear=ge(s)});function iE(s){var u=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return s==null?u:this.add(s-u,"d")}X("m",["mm",2],0,"minute"),Dt("minute","m"),mt("minute",14),K("m",ae),K("mm",ae,ie),me(["m","mm"],zr);var oE=L("Minutes",!1);X("s",["ss",2],0,"second"),Dt("second","s"),mt("second",15),K("s",ae),K("ss",ae,ie),me(["s","ss"],Dn);var sE=L("Seconds",!1);X("S",0,0,function(){return~~(this.millisecond()/100)}),X(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,function(){return this.millisecond()*10}),X(0,["SSSSS",5],0,function(){return this.millisecond()*100}),X(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),X(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),X(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),X(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Dt("millisecond","ms"),mt("millisecond",16),K("S",tt,fe),K("SS",tt,ie),K("SSS",tt,ce);var ci,bv;for(ci="SSSS";ci.length<=9;ci+="S")K(ci,rn);function aE(s,u){u[Ui]=ge(("0."+s)*1e3)}for(ci="S";ci.length<=9;ci+="S")me(ci,aE);bv=L("Milliseconds",!1),X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");function lE(){return this._isUTC?"UTC":""}function cE(){return this._isUTC?"Coordinated Universal Time":""}var F=M.prototype;F.add=tD,F.calendar=lD,F.clone=cD,F.diff=gD,F.endOf=DD,F.format=_D,F.from=xD,F.fromNow=SD,F.to=bD,F.toNow=kD,F.get=J,F.invalidAt=AD,F.isAfter=uD,F.isBefore=dD,F.isBetween=fD,F.isSame=hD,F.isSameOrAfter=mD,F.isSameOrBefore=pD,F.isValid=MD,F.lang=gv,F.locale=pv,F.localeData=vv,F.max=MC,F.min=RC,F.parsingFlags=LD,F.set=re,F.startOf=CD,F.subtract=rD,F.toArray=OD,F.toObject=PD,F.toDate=jD,F.toISOString=yD,F.inspect=wD,typeof Symbol<"u"&&Symbol.for!=null&&(F[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),F.toJSON=RD,F.toString=vD,F.unix=TD,F.valueOf=ED,F.creationData=ID,F.eraName=HD,F.eraNarrow=YD,F.eraAbbr=FD,F.eraYear=VD,F.year=qg,F.isLeapYear=Pk,F.weekYear=QD,F.isoWeekYear=qD,F.quarter=F.quarters=nE,F.month=Kg,F.daysInMonth=Tk,F.week=F.weeks=Nk,F.isoWeek=F.isoWeeks=$k,F.weeksInYear=eE,F.weeksInWeekYear=tE,F.isoWeeksInYear=ZD,F.isoWeeksInISOWeekYear=JD,F.date=Sv,F.day=F.days=qk,F.weekday=Zk,F.isoWeekday=Jk,F.dayOfYear=iE,F.hour=F.hours=sC,F.minute=F.minutes=oE,F.second=F.seconds=sE,F.millisecond=F.milliseconds=bv,F.utcOffset=FC,F.utc=WC,F.local=UC,F.parseZone=BC,F.hasAlignedHourOffset=GC,F.isDST=XC,F.isLocal=QC,F.isUtcOffset=qC,F.isUtc=uv,F.isUTC=uv,F.zoneAbbr=lE,F.zoneName=cE,F.dates=z("dates accessor is deprecated. Use date instead.",Sv),F.months=z("months accessor is deprecated. Use month instead",Kg),F.years=z("years accessor is deprecated. Use year instead",qg),F.zone=z("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",VC),F.isDSTShifted=z("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",KC);function uE(s){return We(s*1e3)}function dE(){return We.apply(null,arguments).parseZone()}function kv(s){return s}var je=$e.prototype;je.calendar=le,je.longDateFormat=Vi,je.invalidDate=mr,je.ordinal=Gs,je.preparse=kv,je.postformat=kv,je.relativeTime=Ol,je.pastFuture=Pl,je.set=lt,je.eras=ND,je.erasParse=$D,je.erasConvertYear=zD,je.erasAbbrRegex=UD,je.erasNameRegex=WD,je.erasNarrowRegex=BD,je.months=kk,je.monthsShort=Ck,je.monthsParse=Ek,je.monthsRegex=Ok,je.monthsShortRegex=jk,je.week=Mk,je.firstDayOfYear=Ik,je.firstDayOfWeek=Ak,je.weekdays=Bk,je.weekdaysMin=Xk,je.weekdaysShort=Gk,je.weekdaysParse=Qk,je.weekdaysRegex=eC,je.weekdaysShortRegex=tC,je.weekdaysMinRegex=rC,je.isPM=iC,je.meridiem=aC;function Vl(s,u,m,p){var _=Tn(),j=k().set(p,u);return _[m](j,s)}function Cv(s,u,m){if(g(s)&&(u=s,s=void 0),s=s||"",u!=null)return Vl(s,u,m,"month");var p,_=[];for(p=0;p<12;p++)_[p]=Vl(s,p,m,"month");return _}function Sf(s,u,m,p){typeof s=="boolean"?(g(u)&&(m=u,u=void 0),u=u||""):(u=s,m=u,s=!1,g(u)&&(m=u,u=void 0),u=u||"");var _=Tn(),j=s?_._week.dow:0,A,oe=[];if(m!=null)return Vl(u,(m+j)%7,p,"day");for(A=0;A<7;A++)oe[A]=Vl(u,(A+j)%7,p,"day");return oe}function fE(s,u){return Cv(s,u,"months")}function hE(s,u){return Cv(s,u,"monthsShort")}function mE(s,u,m){return Sf(s,u,m,"weekdays")}function pE(s,u,m){return Sf(s,u,m,"weekdaysShort")}function gE(s,u,m){return Sf(s,u,m,"weekdaysMin")}li("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(s){var u=s%10,m=ge(s%100/10)===1?"th":u===1?"st":u===2?"nd":u===3?"rd":"th";return s+m}}),n.lang=z("moment.lang is deprecated. Use moment.locale instead.",li),n.langData=z("moment.langData is deprecated. Use moment.localeData instead.",Tn);var jn=Math.abs;function vE(){var s=this._data;return this._milliseconds=jn(this._milliseconds),this._days=jn(this._days),this._months=jn(this._months),s.milliseconds=jn(s.milliseconds),s.seconds=jn(s.seconds),s.minutes=jn(s.minutes),s.hours=jn(s.hours),s.months=jn(s.months),s.years=jn(s.years),this}function Dv(s,u,m,p){var _=Hr(u,m);return s._milliseconds+=p*_._milliseconds,s._days+=p*_._days,s._months+=p*_._months,s._bubble()}function yE(s,u){return Dv(this,s,u,1)}function wE(s,u){return Dv(this,s,u,-1)}function Ev(s){return s<0?Math.floor(s):Math.ceil(s)}function _E(){var s=this._milliseconds,u=this._days,m=this._months,p=this._data,_,j,A,oe,ve;return s>=0&&u>=0&&m>=0||s<=0&&u<=0&&m<=0||(s+=Ev(bf(m)+u)*864e5,u=0,m=0),p.milliseconds=s%1e3,_=Xt(s/1e3),p.seconds=_%60,j=Xt(_/60),p.minutes=j%60,A=Xt(j/60),p.hours=A%24,u+=Xt(A/24),ve=Xt(Tv(u)),m+=ve,u-=Ev(bf(ve)),oe=Xt(m/12),m%=12,p.days=u,p.months=m,p.years=oe,this}function Tv(s){return s*4800/146097}function bf(s){return s*146097/4800}function xE(s){if(!this.isValid())return NaN;var u,m,p=this._milliseconds;if(s=Et(s),s==="month"||s==="quarter"||s==="year")switch(u=this._days+p/864e5,m=this._months+Tv(u),s){case"month":return m;case"quarter":return m/3;case"year":return m/12}else switch(u=this._days+Math.round(bf(this._months)),s){case"week":return u/7+p/6048e5;case"day":return u+p/864e5;case"hour":return u*24+p/36e5;case"minute":return u*1440+p/6e4;case"second":return u*86400+p/1e3;case"millisecond":return Math.floor(u*864e5)+p;default:throw new Error("Unknown unit "+s)}}function SE(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+ge(this._months/12)*31536e6:NaN}function On(s){return function(){return this.as(s)}}var bE=On("ms"),kE=On("s"),CE=On("m"),DE=On("h"),EE=On("d"),TE=On("w"),jE=On("M"),OE=On("Q"),PE=On("y");function RE(){return Hr(this)}function ME(s){return s=Et(s),this.isValid()?this[s+"s"]():NaN}function Gi(s){return function(){return this.isValid()?this._data[s]:NaN}}var LE=Gi("milliseconds"),AE=Gi("seconds"),IE=Gi("minutes"),NE=Gi("hours"),$E=Gi("days"),zE=Gi("months"),HE=Gi("years");function YE(){return Xt(this.days()/7)}var Pn=Math.round,jo={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function FE(s,u,m,p,_){return _.relativeTime(u||1,!!m,s,p)}function VE(s,u,m,p){var _=Hr(s).abs(),j=Pn(_.as("s")),A=Pn(_.as("m")),oe=Pn(_.as("h")),ve=Pn(_.as("d")),ze=Pn(_.as("M")),Kt=Pn(_.as("w")),Rn=Pn(_.as("y")),ui=j<=m.ss&&["s",j]||j 在一个接收外部 command 的系统中,通常一个 command 至少要执行一次,我们称其为 at-least-once semantics。如果一个 command 执行失败,系统内部经常会实现一套重试结构来尝试恢复这个问题,这就会引出一个问题:重复命令的提交可能会对系统的状态造成影响。 例如要实现 linearizable semantics (用户的每个操作外部看来是立即执行的、恰好执行一次、在它发起调用和返回之间的某一个时间点执行),我们就需要对 command 去重。在没有 command 去重的 Raft 实现中,一个 command 可能会被执行多次,leader 可能在 commit 之后返回给 client 期间崩溃,client 如果向一个新的 leader 重试相同的 command ,最后就会导致一个 command 被执行了两次。 解决这个问题可以有两种方案:一种是类似 etcd 的方法,区分出可以重试的命令和不可以重试的命令,将不可以重试的命令的错误结果返回给用户,并不提供任何保证,即使这个命令可能已经被系统执行了。另一种方案是实现一套 command 的 track 机制,检查系统中执行了的命令来实现 command 的去重,当系统实现了这种去重机制,可以实现 command 执行的 exactly-once semantics,进而实现更高级别的一致性保证。 Etcd 中的 gRPC client interceptor,重试的实现 首先要清楚去重的目的是什么:防止重复 command 对状态机造成影响。那么就会有两个阶段可以对 command 进行去重,一是接收到 command 的阶段,另一个是在应用到状态机时对 command 去重。 无论是哪个方法,我们都需要一个数据结构来追踪已接收并执行的 command 的进度,这样才可以对客户端发来的 command 去重处理。 在应用到状态机阶段时进行 command 的去重处理,自然可以利用状态机的后端存储来获取到之前执行的 command (例如 Log::get_cmd_ids 可以获取 log 中所有的 command id),利用这个 command id set 可以对即将应用到状态机的 command 进行去重处理。 在接收到 command 阶段进行去重处理,就需要额外维护一套数据结构进行处理,通常这套数据结构需要维护在内存中保证高效的读写速度,所以要求这套数据结构不能占用非常大的空间,可能要具备 GC 的机制。 对于第一种方案,首要的问题是 log compaction 机制会让去重机制失效。在 raft 系统中,大家都会实现 log compaction 来避免 log 占用过多内存,如果一个 command log 已经被 compact,那么下次接受到相同的 command 就无法去重了。其次的问题是重复的 command 会在发送到状态机之前还会进行 prepare,speculative execute 处理,消耗额外的 CPU,最后的问题就是读状态机的操作是昂贵的,这种去重手段的性能损耗会很大。 综上,我们可以确定在接受到 command 的阶段就进行去重处理,尽早地拒绝重复 command 的提交。 Xline curp 内的 command 是一个靠外部实现的 trait,我们没有像 etcd 一样区别对待一些 command 的重试行为,所以我们没有在 command trait 中定义是否具有重试的特征。 目前 curp client 中对所有的 command 都会有重试,所以我们在 curp server 处实现了一套简单的去重机制: CommandBoard 中有一个 IndexSet,用于记录之前已经执行过的 command 的 ID 于是我们可以在 O(1) 的开销下在 propose 阶段对命令进行去重 为了保证 CURP 在发生 leadership transfer 时不会丢失当前正在的执行的 command 的 ID,我们在恢复 Speculative Pool 中也会恢复这个结构 最后为了避免这个 IndexSet 占用过多内存,之前在 Xline 源码解读文章中提到的 GC 机制会定时清理这个结构。 不过,在极端的网络条件下,client 在发起 command 和收到返回之间的间隔超过了 GC 的间隔,IndexSet 中记录的 ProposeId 被 GC 清理了,client 重试这个命令会导致这个命令的去重失效。 我们在 madsim 的测试中发现了这种极端情况(由于 madsim 的时钟的流速比现实快很多,最后触发了这种问题),需要提出一个新的去重结构来解决问题。本文的后半部分将介绍 RIFL(Reusable Infrastructure for Linearizability) 的工作原理,后续的文章中我们将详细介绍如何在 Xline 中实现 RIFL。 RIFL (Reusable Infrastructure for Linearizability), 是一种在大规模集群中保证 RPC(command) exactly-once semantics 的一套基础设施。为了将 RIFL 的术语和 Xline 系统的术语的统一,本篇章中 RPC 和 Command 具有相同的语义。 在 RIFL 中,首先要给每一个 RPC 分配一个 unique identifier,它由一个 64-bit 的 client_id 和在这个 client_id 下分配的 64-bit 的递增 sequence_number 组成。 client_id 需要由一个 system-wide 的结构生成,在 RIFL 中使用了一个全局的 Lease Manager 模块实现,Lease Manager 会为每个 client 分配一个 client_id,并创建一个与之对应的 lease,client 需要不断 keep alive 这个 lease,server 则需要检查这个 lease 来判断 client 是否崩溃。 其次,RIFL 需要一个 RPC 的完成记录和追踪信息持久化,然后,RIFL 在系统迁移时,RPC 的完成记录也需要一并迁移,这样可以保证 RIFL 在系统迁移过程中也能保证 RPC 不会重复执行,重复执行的 RPC 将会直接取出之前的完成记录。 最后 RPC 的完成记录需要在 Client 确认下清除(或者 Client 的奔溃后清除),这样可以安全地清理掉一些不必要的存储。 下面是 RIFL 中的一些主要组件以及对应的功能: Request Tracker: 在 client 端追踪发送出去的命令 Lease Manager: 一个统一的 Lease Manager 模块,client 使用它为 client_id 续租, server 使用它检查 client_id 的租约是否到期
+a. getClientId(): client 获取自己的 client_id,如果不存在的话就询问 lease server 创建一个
+b. checkAlive(clientId): server 检查这个 client_id 的租约是否到期来判断该 client 是否存活 Result Tracker: 在 server 端追踪接收到的命令,以及 client 确认的进度
+a. checkDuplicate(clientId, sequenceNumber): 根据完成记录来判断这个 RPC 是否重复
+b. recordCompletion(clientId, sequenceNumber, completionRecord): 在返回给 client 之前标记这个 RPC 为已执行,并存储 completionRecord
+c. processAck(clientId, firstIncomplete): 为这个 client 回收 firstIncomplete 之前的所有 RPC 的完成记录。 当 Server 收到一个 RPC(client_id, seq_num, first_incomplete) 时,会根据 checkDuplicate 来检查这个 RPC 的状态: 其次,Server 会根据传来的 RPC 中 first_incomplete 字段来调用 proccessAck,回收掉已经被确认的 RPC 的完成记录。最后,当这个 RPC 执行完成,返回给 Client 之前,会调用 recordCompletion 来将完成记录持久化,并标记这个 RPC 为 COMPLETED。 除此之外,Server 会检查 client_id 的租约是否还有效来判断一个 client 是否还存活,如果失效,则回收掉这个 client_id 下的所有的完成记录 在 RIFL 的结构中,很容易发现一处开销来自于 client 和 server 与 Lease Manager 之间通信的开销,RIFL paper 中提到了 server 可以缓存某个 client_id lease 的过期时间,在即将过期时查询 Lease Manager,这样可以省去一些的网络通信。 在上述的过程中 checkDuplicate 或者 proccessAck 中至少会有一个 O(n) 复杂度的操作(按 sequenceNumber 顺序记录进行 checkDuplicate 或者无序记录 sequnceNumber 但需要遍历过滤小于 first_incomplete 进行 processAck),和之前使用 IndexSet 方案的 O(1) 复杂度相比,RIFL 会在这里会有一部分开销。我们可以将 processAck 单独作为一个 RPC 用于通知 server 回收完成记录来优化一些性能。 最后,由于回收的第一种机制仅是检查 first_incomplete,这可能会遇到某个耗时很长的 RPC 阻塞了回收后续 RPC 的完成记录,最后可能导致 server 内存占用过多。RIFL paper 中提到了可以为某个 client 设置最大 inflight RPC 的数量,过多的 RPC 将会被拒绝,另外,也可以考虑提前回收后续的 RPC 完成记录,这样可能会使 RIFL 更加复杂。 以上是 RIFL 为 unary RPC 维护 exactly-once semantics 的机制,paper 中 §6 Implementing Transactions with RIFL 中描述了 RIFL 对多个对象的 transactions 维护 exactly-once semantics 的机制,由于 Xline 系统的 transaction 会作为一个单一 command 发送给 server,所以不需要单独处理,感兴趣的读者可以看看,这里就不展开赘述了。 本文前半部分从 command 去重机制的契机开始,介绍了去重的必要性以及目前 Xline 的去重机制存在的一些问题。后半部分详细讲解了 RIFL(Reusable Infrastructure for Linearizability) 的工作原理,并对其进行了一些性能分析。后续的文章中将继续介绍我们是如何将 RIFL 应用到我们的 Xline 当中,以及对 RIFL 做了哪些必要的更改与优化。 传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord 推出开源的分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。 Xline 中所使用的共识协议,即非 Paxos ,也非 Raft,而是一种新的名为 Curp 的共识协议,其全称为 “Consistent Unordered Replication Protocol”。CURP 协议发表于 2019 年,其协议主要论述的是主从备份的场景,共识场景仅仅在附录中有简单表述,缺乏严肃验证。 本次直播分享,达坦科技联合思否,邀请达坦科技的联合创始人兼 CTO 施继成做一个关于 CURP 协议的工业化实践的直播,分享将论述 CURP 协议的正确性,同时以 KV 存储软件 Xline 为例子讲述如何在工业产品中使用该共识算法。 会议号:474-6575-9473 8 月 27 日,作为 2022 年第二届 RISC-V 中国峰会的同期活动,达坦科技成功举办硬件敏捷开发与验证方法学研讨。虽然是线上分享活动,但大家热情依旧,会后在“硬件敏捷开发和验证方法学讨论群”中积极互动提问。长达四小时的就新一代 HDL 在数字芯片设计方面的实践经验分享,究竟碰撞出了什么新的火花呢?下面我们一起来回顾研讨会的精彩内容。 华南理工大学计算机科学与工程学院赖晓铮副教授首先分享了 “让硬件设计像软件设计一样简单”的愿景,即开发人员编写的代码只占工作量的 10%,剩下 90%由开源芯片生态系统提供。 请点击如下链接: 在 2023 年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了 MIT6.175 和 MIT6.375 的关键内容以及 Lab 实践的学习笔记。 6.175 和 6.375 的课程和 Lab 学习都有一定的难度,要求采用 Bluespec 语言实现 RISC-V 处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab 环节还涉及软硬件联合开发,要求基于所实现的 RISC-V 处理器运行真实的 RISC-V 程序,并给出性能评估。希望第一期学员(GitHub:kazutoiris )的学习笔记对想从事数字芯片设计的工程师有所帮助。 因为 Valid 快于 Ready,所以当 Ready 由有效变为无效时,线路上多发了一拍数据。这一拍数据就要新增一个 buffer 去进行缓存。 因为第一拍数据送入之前为满,而之后都是处于空的状态,所以可以当成 Depth-1 Bypass FIFO ,在空时可同时进行 deq 和 enq 操作。 (这里可以考虑一下传给 master 的 Ready 信号。如果 buffer 为空,那么必然是 Ready 的;如果 buffer 为满,那么必然不是 Ready 的。这样就可以省掉一个寄存器去为 slave 的 Ready 打一拍。) Ready 从有效变为无效的时候,Ready 到达晚一拍,Valid 有一拍有效数据已经送出去了。等 Ready 到达 master,已经多送出了两拍有效数据。所以这两拍数据必须被缓存起来 在数据传输刚开始的时候,第一拍数据是从 FIFO 中直出的。第二拍的时候,slave 的 Ready 送至 master。在之后的数据传输过程中,其中停滞的只有一个数据。 显而易见,可以使用 Depth-2 Conflict-Free FIFO,在非满非空的时候可以同时 deq 和 enq。master 的 Ready 信号就是 notFull,slave 的 Valid 信号就是 notEmpty。可见,所有输出均为寄存器输出。 MESI 协议将“Exclusive”状态添加到 MSI 状态机中,可以减少只在单个缓存中存在的缓存行的回写次数。 MOSI 协议将“Owner”状态添加到 MSI,可以减少由从其他处理器读取而触发的写回操作。 达坦科技硬件设计学习社区持续开放,点击原文了解社区学习详情。若想询问加入细节,请添加下方小助手微信号或info@datenlord.com 随着互联网和云计算的业务规模越来越大,单个数据中心已经无法满足业务的需求,业务系统从单数据中心向多数据中心发展,多地多中心多活部署的需求也越来越普遍。多数据中心架构最大的挑战是,如何保证数据跨数据中心访问的一致性和性能。比如索引、权限、配置等这类需要跨数据中心共享访问的元数据,如何在多中心竞争修改的场景下,仍然能保持一致性,并且保证访问性能。 传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord 推出开源的分布式 KV 存储 Xline,就是针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。 本周六(10 月 15 日)下午 3 点,达坦科技和 Rust 语言中文社区合作,由达坦科技的联合创始人施继成在 Rust 唠嗑室做开源分布式存储技术的分享,介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。欢迎大家预约收看! 2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。 2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。 分享人:Tianrui Li 万字长文,详述 TRIDENT: Poseidon 哈希算法的硬件加速与实现! 在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。 在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。 本周四(2 月 2 日)晚上 8 点,达坦科技和分布式实验室合作,由达坦科技 Rust 分布式存储工程师赵佳炜讲述共识算法与跨数据中心一致性的元数据管理,并介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。 直播亮点: 请添加分布式实验室小助手的微信,报名参与直播: 达坦科技(DatenLord)推出的开源分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并保证数据的一致性,方便业务系统实现多地多中心多活部署。 GitHub 链接:https:github.com/datenlord/Xline GitHub 链接:https:github.com/datenlord/Xline Xline 是一个基于 Curp 协议的,用于管理元数据的分布式 KV 存储。 现有的分布式 KV 存储大多采用 Raft 共识协议,需要两次 RTT 才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。 但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个 RTT,从而提高性能。因此,Xline 旨在实现高性能的数据访问和跨数据中心场景下的强一致性。 数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到 19 世纪 60 年代,由 MIT 的 Jack Dennis 教授开创。 图 14 mkIfThenElse 节点示意图 此外,PAClib 中还提供了 图 15 mkForLoop 节点示意图 注意,由于 如上述代码片段和图 20 所示,通过 图 21 在不同位置插入流水线寄存器 如上述代码片段和图 21 所示,通过 图 22 节点的串联 如上述代码片段和图 22 所示,通过 参考资料: [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. http://www.cs.ox.ac.uk/ralf.hinze/WG2.8/27/slides/rishiyur2.pdf. 生成式 AI 作为人工智能的重要分支,在语言模型、图像生成、音乐创作等领域都取得了突破性地进展。技术的发展,也伴随着机遇、挑战与难题。本周日(8 月 6 日)在北京,将由亚马逊云科技和真格基金主办,达坦科技和 INP 协办举行一场关于生成式 AI 的闭门沙龙,主题为“机遇与挑战——生成式 AI 的发展趋势和落地应用”。 生成式 AI 作为人工智能的重要分支,在语言模型、图像生成、音乐创作等领域都取得了突破性地进展。技术的发展,也伴随着机遇、挑战与难题。本周日(8 月 6 日)在北京,将由亚马逊云科技和真格基金主办,达坦科技和 INP 协办举行一场关于生成式 AI 的闭门沙龙,主题为“机遇与挑战——生成式 AI 的发展趋势和落地应用”。 我们邀请了国内外知名的 AI Infra/应用创业者、硬核 NLP/LLM 专家、咨询大咖,分享在生成式 AI 研究和实践中的经验,通过具体的案例,探讨生成式 AI 在不同领域的落地应用和挑战,揭示其对产业升级和创新的重要作用。 本次闭门沙龙邀请到的 AI Infra/应用创业者、硬核 NLP/LLM 专家、咨询大咖有(以下介绍按照姓氏字母排序):为什么要对 command 去重?
+
+
+// unaryClientInterceptor returns a new retrying unary client interceptor.
+//
+// The default configuration of the interceptor is to not retry *at all*. This behaviour can be
+// changed through options (e.g. WithMax) on creation of the interceptor or on call (through grpc.CallOptions).
+func (c *Client) unaryClientInterceptor(optFuncs ...retryOption) grpc.UnaryClientInterceptor {
+ intOpts := reuseOrNewWithCallOptions(defaultOptions, optFuncs)
+ return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
+ ctx = withVersion(ctx)
+ grpcOpts, retryOpts := filterCallOptions(opts)
+ callOpts := reuseOrNewWithCallOptions(intOpts, retryOpts)
+ ...
+ var lastErr error
+ for attempt := uint(0); attempt < callOpts.max; attempt++ {
+ if err := waitRetryBackoff(ctx, attempt, callOpts); err != nil {
+ return err
+ }
+
+ ...
+
+ lastErr = invoker(ctx, method, req, reply, cc, grpcOpts...)
+ if lastErr == nil {
+ return nil
+ }
+
+ ...
+
+ // 在这里基于 callOpts 和 lastErr 判断是否可以重试
+ if !isSafeRetry(c, lastErr, callOpts) {
+ return lastErr
+ }
+ }
+ return lastErr
+ }
+}
+
去重在什么阶段完成?
+目前的 command 去重设计的缺陷
+
+
+ /// Command board is a buffer to track cmd states and store notifiers for requests that need to wait for a cmd
+#[derive(Debug)]
+pub(super) struct CommandBoard<C: Command> {
+ ...
+ /// The cmd has been received before, this is used for dedup
+ pub(super) sync: IndexSet<ProposeId>,
+ ...
+}
+
+
+pub(super) fn handle_propose(
+ &self,
+ cmd: Arc<C>,
+ ) -> Result<((Option<ServerId>, u64), Result<bool, ProposeError>), CurpError> {
+ ...
+ if !self.ctx.cb.map_write(|mut cb_w| cb_w.sync.insert(id)) {
+ return Ok((info, Err(ProposeError::Duplicated)));
+ }
+ ...
+ }
+
+/// Recover from all voter's spec pools
+fn recover_from_spec_pools(
+ &self,
+ st: &mut State,
+ log: &mut Log<C>,
+ spec_pools: HashMap<ServerId, Vec<PoolEntry<C>>>,
+) {
+ ...
+ for cmd in recovered_cmds {
+ let _ig_sync = cb_w.sync.insert(cmd.id()); // may have been inserted before
+ ...
+ }
+ }
+
RIFL 介绍
+RIFL 简介
+RIFL 具体组件及功能
+
+
+
+
+a. newSequenceNum(): 为一个 RPC 生成一个递增的序列号
+b. firstIncomplete(): 获取当前最小的还未收到 RPC 回复的序列号
+c. rpcComplete(sequenceNumber): 标记当前 sequenceNumber 为收到,后续用于更新 firstIncomplete
+
+RIFL 性能分析
+小结
+Summary
+CURP 协议
芯片敏捷设计与验证之路
https://t.elecfans.com/live/2113.html收看本次研讨会的回放。
也欢迎添加小助手微信,加入“硬件敏捷开发和验证方法学讨论群”,进行延伸讨论与互动,并第一时间获得后续相关活动的讯息。MIT 6.175
@@ -66,7 +66,7 @@ case class Delay1() extends C
-
+
-
+
-
+
-
+
内容简介
数据通路加速
推荐阅读
Xline 是什么?我们为什么要做 Xline?
https://medium.com/@datenlord/curp-revisit-the-consensus-protocol-384464be1600数据流式编程的思想
+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"},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=`数据流式编程的思想
数据流式编程思想简介
mkIfThenElse
可以实现分支逻辑。输入数据是一个 Tuple2#(a, Bool)
类型,该节点会根据 Bool 类型的取值将数据包路由到 pipeT
或者 pipeF
子节点。其内部具有一个 FIFO 结构用于存储 Token,从而实现在 pipeT 和 pipeF 两个节点所需处理周期不一致时起到保序的作用。mkIfThenElse_unordered
变种实现,当对输入和输出之间的数据没有严格的顺序要求时,可以使用这个变种来简化设计。For 循环 使用 mkForLoop
可以创建条件分支,其定义及示意图如下:mkForLoop
需要通过 n_iters
参数传入循环次数。在实现逻辑上,Loop Control Logic 内部有一个共享队列,外部进入的新数据和经过循环体执行过一次处理的数据,都会被放到这个队列中。每个新进入的数据都会被打上一个 Tag,Tag 的值为循环次数,这个 Tag 伴随着数据在循环中流动,每流动一次,Tag 减一,Loop Control Logic 在从共享队列中取出数据时,会根据 Tag 的计数值决定将其送入 mkLoopBody
节点还是 mkFinal
节点。内部有两条 Rule,分别独立负责把新数据和正在循环的数据放入 FIFO 中,为循环提供了内在动力(图中 Pump 标注路径)。mkLoopBody
也可能是一个需要多拍才能完成的节点,因此可以有多个数据包同时在流水线中进行循环。mkMap_fn_with_funnel_indexed
函数的第一个参数来决定实例化多少个 f_radix4
计算单元,从而改变计算的并行度。
-
+
let permuter = mkFn_to_Pipe_Buffered (False, f_permute,
param_buf_permuter_output);
mkFn_to_Pipe_Buffered
函数的两个输入参数来控制是否加入 FIFO,从而实现在流水线或组合逻辑之间的切换,使得程序可以在时序上做出简单的调整。
-
+
return mkCompose (grouper,
mkCompose (mapper,
mkCompose (ungrouper, permuter)));
mkCompose
可以实现多个 Node 之间的顺序连接。
是否要出海?中美两地的生态差异?
AI PaaS+SaaS 工具选择最佳实践+避坑指南。
-以及其他你在报名表中提交的想要讨论的话题......
近年来随着 Bluespec、Chisel、SpinalHDL、PyMTL 等一众新一代 HDL 的推出,业界逐步感受到新一代 HDL 在数字芯片设计效率方面的提升。相比 Verilog 和 VHDL,这些新一代 HDL 在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合 HLS,这些新一代 HDL 支持 RTL 级描述能力,在芯片性能的把控方面远超 HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究 CPU 设计,而 CPU 是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。
+const t="/zh-cn/assets/cover-9c53ea5f.png",l="/zh-cn/assets/image1-0a18e154.png",e=[t,l],r={label:"欢迎加入达坦科技硬件设计学习社区",description:"近年来随着Bluespec、Chisel、SpinalHDL、PyMTL等一众新一代HDL的推出,业界逐步感受到新一代HDL在数字芯片设计效率方面的提升。相比Verilog和VHDL,这些新一代HDL在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合HLS,这些新一代HDL支持RTL级描述能力,在芯片性能的把控方面远超HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究CPU设计,而CPU是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。",cover:"./cover.png",location:"新加坡",date:"2023-01-12",title:"Welcome to join Datan Technology hardware design learning community"},s=[{label:"学习目的",level:2},{label:"学习内容",level:2},{label:"适合人群",level:2},{label:"学习方式",level:2},{label:"学习规划",level:2},{label:"参与方式",level:2}],o=`近年来随着 Bluespec、Chisel、SpinalHDL、PyMTL 等一众新一代 HDL 的推出,业界逐步感受到新一代 HDL 在数字芯片设计效率方面的提升。相比 Verilog 和 VHDL,这些新一代 HDL 在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合 HLS,这些新一代 HDL 支持 RTL 级描述能力,在芯片性能的把控方面远超 HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究 CPU 设计,而 CPU 是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。
虽然国内大专院校计算机科学和电子工程专业都有开设体系结构或组成原理等相关课程,但是在实操环节缺失很多内容,特别是 CPU 里缓存、内存管理、异常处理相关的部分,基本上都不涉及。但是随着数字芯片的规模越来越大,芯片设计的复杂度指数级上升,对数字芯片的设计人员有很高的要求。当有志从事数字芯片设计的同学从学校走向社会,如何理解数字芯片设计的精髓,提升设计能力,成为能否胜任数字芯片设计工作的关键。
为此,达坦科技在 2023 年始,发起成立硬件设计学习社区,诚邀所有对硬件敏捷开发设计感兴趣的同学加入我们的学习社区。这里有志同道合的小伙伴,共同学习目标的互助自学小组,有耐心答疑的助教。我们一起花一个月的时间,系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。
无论用哪一种语言,Bluespec、Chisel、SpinalHDL 来进行硬件设计,背后扎实的硬件设计基础知识都是必不可少的,特别是体系结构,因为体系结构的主要研究对象是指令集架构、处理器架构、存储器层次结构、总线和 IO 等,而 CPU 作为当今最复杂的数字芯片之一,非常适合作为学习实践相关知识的一只“麻雀”。
虽然国内大专院校计算机科学和电子工程专业都有开设体系结构或组成原理等相关课程,但是在实操环节缺失很多内容,特别是 CPU 缓存、内存管理、异常处理相关的部分,基本上都不涉及。当达坦科技做校招或招募在校实习生的时候,看到了潜在求职者在理论和实践之间的脱节。
@@ -22,4 +22,4 @@ const l="/zh-cn/assets/cover-f142cd17.jpg",e="/zh-cn/assets/image1-9d5b5029.jpg"欢迎您预约直播,或者登陆腾讯会议观看直播:
会议号:474-6575-9473
作为2023RISC-V中国峰会的同期活动,8月25日下午,达坦科技成功在线上举办第二届硬件敏捷开发与验证方法学研讨会。长达三小时的就新一代HDL在数字芯片设计开发和验证效率方面的实践经验分享,究竟碰撞出了什么新的火花呢?下面我们一起来回顾研讨会的精彩内容。
《RISC-V敏捷硬件开发-软件定义芯片》
@@ -19,4 +19,4 @@ const t="/zh-cn/assets/cover-cf0f8eeb.png",e=[t],a={label:"第二届硬件敏捷《MetaHVL硬件敏捷验证与协同仿真》
华南理工大学计算机学院副教授赖晓铮的分享主题是《MetaHVL硬件敏捷验证与协同仿真》。赖老师从芯片设计的规模和芯片设计的成本是不成比例(规模是线性提升,成本是指数提升)的现状出发,提出硬件设计的流程有更敏捷的需求。而敏捷是包含设计和验证两个维度的全流程敏捷。他分享了运用创新EDA方法学和工具以进一步分离设计与实现;此外,提高设计抽象层次的同时,也需要提高验证的抽象层次。赖老师介绍了他在Meta-HVL项目研究的中期结论,即小规模设计的加速比明显,规模越大,DUT运行时间占比越大,则验证加速起到的作用越小。因此,时间应该花在提高验证的效率上,而不是把时间和资源花在加速验证代码的运行上。
如何提升数字芯片的开发和验证效率一直是业界关注的焦点。新一代HDL打开了全新的数字芯片敏捷设计和验证的方法学大门。在本次研讨会上,业界和学界的各位专家分享了他们在各自领域的硬件敏捷开发与验证实践经验,希望这些前沿的探索可以为关注该领域的学习者和实践者提供一次深入探讨和交流的机会,以此进一步促进硬件敏捷开发与验证方法学的发展与落地。
`;export{e as assetURLs,p as default,a as metadata,l as toc}; +如何提升数字芯片的开发和验证效率一直是业界关注的焦点。新一代HDL打开了全新的数字芯片敏捷设计和验证的方法学大门。在本次研讨会上,业界和学界的各位专家分享了他们在各自领域的硬件敏捷开发与验证实践经验,希望这些前沿的探索可以为关注该领域的学习者和实践者提供一次深入探讨和交流的机会,以此进一步促进硬件敏捷开发与验证方法学的发展与落地。
`;export{e as assetURLs,r as default,a as metadata,l as toc}; diff --git a/zh-cn/assets/index-28dd2373.js b/zh-cn/assets/index-69ce89cf.js similarity index 95% rename from zh-cn/assets/index-28dd2373.js rename to zh-cn/assets/index-69ce89cf.js index cec9790..dc1b8d9 100644 --- a/zh-cn/assets/index-28dd2373.js +++ b/zh-cn/assets/index-69ce89cf.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/image1-b170e804.jpg",o="/zh-cn/assets/image2-29d090cb.png",a="/zh-cn/assets/image1-50beaba8.png",n=[t,o,a],e={label:"叮!您收到了一封来自达坦科技的Hackthon邀请函",description:"DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!",location:"中国香港",date:"2023-11-17",title:"Ding! You've received a Hackthon invitation from Dartan Technologies!"},l=[{label:"Hackathon2023",level:2},{label:"主题",level:2},{label:"大赛时间线",level:2},{label:"背景介绍",level:2},{label:"赛题介绍",level:2},{label:"评估标准",level:2},{label:"赛题宣讲会",level:2}],s=`DatenLord Hackathon 2023 正式启动! 达坦科技基于其跨云分布式文件系统 DatenLord 项目,结合 AI 大模型时代背景,搭建了擂台,在此正式向您发出邀约!
本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台 PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!
如有任何问题欢迎联系达坦科技微信小助手:DatenLord_Tech 或发送邮件至
info@datenlord.com
让我们一起在 Hackathon2023 的舞台上尽情释放创意的火花,期待与优秀的你碰撞出新的想法!
`;export{n as assetURLs,s as default,e as metadata,l as toc}; +让我们一起在 Hackathon2023 的舞台上尽情释放创意的火花,期待与优秀的你碰撞出新的想法!
`;export{n as assetURLs,l as default,e as metadata,s as toc}; diff --git a/zh-cn/assets/index-5f61d62d.js b/zh-cn/assets/index-71801d47.js similarity index 95% rename from zh-cn/assets/index-5f61d62d.js rename to zh-cn/assets/index-71801d47.js index 6bb52de..1fe4386 100644 --- a/zh-cn/assets/index-5f61d62d.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",s=[t,o],n={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"},e=[{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年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{s as assetURLs,r as default,n as metadata,e as toc}; +感兴趣的观众可以添加海报中的达坦科技小助手二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨。
`;export{s as assetURLs,r as default,e as metadata,n as toc}; diff --git a/zh-cn/assets/index-90593fbc.js b/zh-cn/assets/index-86e42443.js similarity index 99% rename from zh-cn/assets/index-90593fbc.js rename to zh-cn/assets/index-86e42443.js index 9099a01..e71ef1d 100644 --- a/zh-cn/assets/index-90593fbc.js +++ b/zh-cn/assets/index-86e42443.js @@ -1,4 +1,4 @@ -const s="data:image/png;base64,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",a="data:image/png;base64,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",n="data:image/png;base64,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",e="data:image/png;base64,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",l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABGCAAAAABp19w+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAPnSURBVFjD7ZZdTFtlGMd/UJhrGWAdlY91MO0mY4EOyFzAhIaBaYJbJMgFURc1DKfGiyGaxWYxdYshkixuQPwITozuioSQ7EInmhmihu7DlZZtpaFUmbU10kbo2jEYX1605RzkbAZkJkvOc3POeZ7/+Z2c//uc57xxC9yriL9nZBkto2W0jJbRMlpG/3/ohMUzdyAYDOVUrpgw6wwGgyHD9jujg/UAz6wcfdEEkLscvWhIXF0VkL/y99bUlgJ5ywtxwu5pthK6MlZhquM1NN3L06JldIFmNWSuwG6JtAg9CI+vhswAFN4dfQfFv8asRXqNBPScBQpWgx4BdZZEXuhr1xLFDZc7IV+nAJi+HC5JAbg6tE8ZLc9fd43l6FNjRpZyV7RYMfFFD0BWRzL0m4ADL8D3R/mpNVLv/8gD0FgDYIUiKbRgyICg6KnuUb/8SUeZ7zg4TaoTBXw2BefANgXwxyGTp9x82szJkaiRMavnwlLouf5Fq7tb0Z3an5d7EDt8zKniEAShErgFjDfZaDxakV1Rxi8RqzVRIwN1e3+VQI+AJhMASzuY04Br5OCyVW7yjsJGqKiCVJh/24exBgj7SAfsQldb/SgkvBYUnVCdAxNnOnkRK9X8AE8lAPvO7oiH805ogHnH+x79zqU9u/u5omwJ9KLCPgxXTZNeP6ojxdQY1XwFewASKQC6gPbbATeUmaJG6qOMB1+R6hBBcQ245UvONeaVJMK6dbg8qIoAnJTAvA1Uo0p1la5UGzNSejzE0ILCD8UnxJILUJ4I0KfeCRNAi16oDi4aeblr+mnxTI4XK4IuIAyblzz9EuwCCFirFBAGMkVVKxTi9cLFpk3Dx/wSaBsU8mlDCNIgLeZSAOA6bAU4QwWwEXgoWg/MRnp24a13mG+rOpSEQwJthfzb57YkwyMwHMn91VQ7DigjrD+/1G8DkjQQbd7e2g5+B3XmkK8Yu2f/kJ/tEmggvX/yScCg4scZgCv1tj2pgA7cMNVMIwB1cAlg+ngz5cTBNr7DwOY27bcUp4vQincjx6HfSPow8ch6SND24Uhx957ujH/9oAJI7WUwyfHBUFNkxOjsYz9vmDrf02rf1bIVVfeMV/25/qU4Vcb0ezMHdCJ07Afme9OH2hwZIpY2H6B+oiHqae/JSVC9YYzeMtn+NcBjz5cDWI5NssOcAfSZ+UYpgWbGdTM3JbZ8o2MbslMF0ZR3QvnoeuF63BPWZsXaNuRe0CsADl/Ye7hF/NUsrFXcNBgGxgxOIbF2uycFPNxszJXskP8YD9TzbPhVKa/XIMZvaEUzdU3R/4j7cxMso2W0jJbRMvr+QP8NsluKv9sZ0eAAAAAASUVORK5CYII=",p="data:image/png;base64,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",t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAARbSURBVGje7ZhtTFtVGMd/UJjQCayOyngZ6OqGEOgYmQRMIAxMIzBBxIQ4lpkguvkJxgwbMabZTIjEJdsg0YXNF+YnEoLug8uYzky3gEBg5WWAlCoE6bJBhI7aAePFD325rWuFy4hL9J5PPec5//vrff7POefe67XM42nej4krgSWwBJbAElgCS2AJLIH/y2Afxy/DpMk0E5Up+goLgyaTaSbt+bWCTcUAr4kHt1cCRIsFO1LtVZgFxInPmbIgBYgRK/MS3iQWMqFhi3gy/e+ibBQrciouPSjXwqUXkkSLnMA98MJauNyEhEcBr0kPLLSupTYE8GIrxK8FPAyKMNEqYR3rXfT39AafOJUMYK7TnBwI0Dew198WXhrV341SB4HVohTxf1cAO+un65sAwuoCoKUSeOsA/HCcG2es8ZZPxgDK8gG6YJd4sJDqm4K+Ka9J8fbZulTjSRislJ+K57NZuAq6WYDbpZVj6dqvtJwetllkt3jRLB682OKwuPEMqvP7Y6LfoRs+5XziDJggE7gPTJXrKDueEZmRyq9Wi5U2iyYLc34TDR4GZSgArbWgDQZuEYVelxk+PgKbISMLgmDpmBFNPmA2EgJ0C6u4awKZR9LUHfdgQf855EXBdP1HvEkXefwE2T7AXmK94edBKIGlvkMG9U7XVZi07+NI99SFvvp9F9wXl0PfPQR9lZbxCeTvJ5KvUfAt7AHwJR5oAGrnJw2QWmmzSG27xqaDHu72w+8fGrKDBf0t4L4xIFoTk+wLGzagH0O+C2CQZFjSgXzEX5GlSomwW7TiRhtetOOLEfdgQT8Biaecp7RBui/ANcVOmAaq1UK0x2FRZ8NcrodTtRi+9lBcPZCESQ+YYavLlA7YDTDZlSUDMxDqFO2CBMbHob08fOjExEr3/hBYBwmcK5mBYAi2538SYBSeA7hIBrAZeMoWn1ywrsLl9z5gqSardCP9osFdEDd/9ZkAeBaGrGN/lBdMAf5W0p0L6u3ARiXYFmtzQR2/gyJ0wJhI99j+gQlW/xzidDqFtFheAtLkXH8A0Fus2xMEqMAAs1WUAVAIHQBzJ6tIxwu28x1pbK2JuEJiyKrB9uJKvEHjl/JcwO+olmOvz/3Sr5OX5XoD+depPjB/0VCuAuCVH3vP+mwbHeiY2l0aSajc0v5Nkzqe4OC5y2T/E8r1q6n90cd4xIhCa92sW2uMgOLFEpuXzactID+ssUkstZcAdhSlA7SesBCr3QJc03LZH7jS7EI4Yt1PS3U5Fe7APND/GR1oL6qRu09GBgmTZsen/bf5Cf2pMXNEmD1XM4ZltQygoi2nonrTQQydLuCXA23g7KPuUo1vrDAoU6lctH6uXRQKp06AbcO0tKGZuFQHfxOvXFyP2GTwdJUm2vMEV4/XD/xEMW+YD616utc6fqGfuhfh4VTsvW0+Z1EWBYYKfq4n2HMr1ckBLK8e/pfBbtr/7/1YAktgCSyBJbAElsCO9hdp+FP075MrqAAAAABJRU5ErkJggg==",c="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABGCAAAAABkyax5AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAATISURBVFjD7ZhtbFNVGMd/2xw0l21uSkM2HQPGJkzGYDpgBC8SlaBimjE3A3zgRTQKhGD8oCIYlQ8wjS8ENLwaEUTIBAkD4wJmEEeWDAbSjjoHS7c1bs7hLmDXrbDt+qFr77nt7VIaSDTp8+mc5/zPr895znPuubcxKvfOYu8hOwqPwqPwKDwK19l9kUza4oLY4mzAcTA+nv7hq+4evF/prYHeD4DuNiukPxFKqUZi/fNkWe5QVVVVK+SzIWWR5dzhLobjALSbZ4aURQavl16VKPcAXJgRWhYZ/EK+qRT3GaDHPvUuwwdqH2M+lAN2JofWBVdL168X7DeZ9GTBCJ27pXVmnK/d7M7FPKeq0Z6DNc3s83pqstOGhv/xeS1kP9RYVcVGWfDbVqfN8MNt0jgoruKHHOoK/BJPGVvH62m62rn1rSxbjiuq2lMpy/I+beDPeXKj1ntvnaqq6jJZvtYtV2nuWtnyV+hS7Fixg7n7nk8G09ztsKvWN9C73v1GlpDyqQAl8ONvTNKmFyxR3uoOtaEdq5qxvJPo7UxcDF8MDK7u48ZZFk3ncOcCzJE4fC59pABYktv0aQh499pO5qz1OyzQfNbbvHiKpTGa0Mp4AFMRyncFIixuGaeuGMN3tyFpbEYBV73Nw0zJEuacL/Ru7QtAnm4D88fwtSHcdgRWJwtDZmgBoK2alwS/q3qQmDqLgCqPWUR1gwHcUwbS06KyD1oBqEDSzrh9/2ucKPcOLCD9AX3tzYbTBvCTTigZLuj6FZAA+o4yRVvgll1OnNuuDGZB1rMx5VCj9fyHqAbQBe4AxgG0uMXF7xCzsJdAy7M3d/lX4wvJUw0po0WZDRgD0Ag5hGuPgjUoLfWA/sF8HsgYhI8NGz7WVwViWqzABFHVVg1kAbRDgt990hCZUOhrJcKNIHgPkCLqy4HlSQAuJG0/XZeN4E/5W5IRfARwvyBXjoBUDMB1hOovKho6LfFwPQieAdwWRMeApd5suISs+Oz3b278PWyvET1FUfztWAF+TQj8IGRafL/fH4TwDNjaUkMHHwB/eLDUvXZ7g5uUMpO38yBdQYDJm9IDHiv+sEgKgse/DlW+0D2bbEgf+e6vFJRgRpeTXCN2r3f79HBKJsCGWwB0rPmZzD3ZvpFk/W54zQqPGMFdGERO3Doz9uW/KP/YPyttoPRL7a5NxiAvF3k83giuiCdOu6Az9n91yLkegIUvivfLRGgYFQipIx/qfmp9eZre3yCuSLj9TSuLrjpakjJGZyXq9HlweXYA+5qTvIHtFdMbtgfA6wefdoFwSE01el9Nzmy6FOirh/Gf1O97n1tBK5puCs75EFZIw80A1yUyN7dsG5nAIr2/vRPhCIfzfj5/PycW6l3naGrfk8hmz3C9/xhp07VeOJGnLuBQn86jODG7Fx5QCWC7j1ISe2dwFqGcCUz5gc3SjqOBwkq39Ax3CDe/wlZd1q1MG1Yo46DybdHdsZMPE+8UzuJnlTLxn7Y68sGFmYpswdu30b1S95IUHjzmzfzq77Wuq4lcmETcadtzgmq3bW6pfl6Yn1g311j6/B2HXHxbVTtXyHKlIOmU3+3RT4qJ6H/FplEJAK3JSUPKIoOHaf/fb/8oPAqPwv/L8H8BwYY2Ks9nd80AAAAASUVORK5CYII=",r="data:image/png;base64,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",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAASkSURBVGje7Zh/TJR1HMdfJ8jgSPEERBDBRCAcnErGkA2G4G6iBiNdbMVsM8iaaxCWSeZuukbS3FRoSWSU1dpsjOVaJjSbqYOEgOOHgByXMOJa3OVx8kNAPPrjfjxHnLaHaG71fP763vez9/N6ns/78/1+n+dk0zyaWPCIuBJYAktgCSyBJbAElsAS+L8MdneMdEazeTg0VfQVprrMZvNw0hNzBZv3ADwjHlxfCBApFuwotSwrDYgWXzP/nZuAKLEymfAlMZUK55aLJ9PxCv6VYkVOzaUF/7lwaYM40SIncCs8NRcuzbD+n4DnpAem6ubSGwL4fh3EzAXcA4og0SphHWtn6O9ode7RYW4AE40j8YsB2jt3eNnSlj7tYKjSB6wWbRJ/uwLYWT90tgogqHwR1BYCL+6GH45w7ZQ1X/tBP0B+JkATbBAPFkrdLOirMqoUuWXlifrj0FUoPxHDx+NwCTTjAL/lFfYnqz9Xc7LHZpHd4vsj4sH3ax0WV54i7Ex2VORLtMBpzsQOgxlSgbuAqUBD/pGUkJREfrFa7G+zyJi1/ZZocA/4BwJQVwpqP+AGoWg1qSsGesEXUtLABywH9agygRE9AUCLsIqbDLg9gDOuvTXu2mNBXwEZoTB0voIXaCKDK7DNHdjx3doF8FMX5ICl41i/ct3MVRj33IYQl9i7FV8BqtxlLsAOfUs3tBeODRiQH4olU6XgW9gMsJAY4BxQOmnUQWKhzSKl7RpL9rp+XMvbHW+FtL9f01y+dBZY0N8A7uoXRaqi4heChwfafuQbALqIB4sG5L1eirSwTcF2i/5uo73y88sqWVTAYcPpQ7PAgt4AsSecZdcheSHAZcU6GAKKlUK21WFR47mJdNenajNlEU+SGKSv2e/51+ZqhTjMWmAEVs6QNcBGAGNTmhuMAIFO2SZYz8AA1Bes6D5qcAn2gmGQrYLbs7paA+v5KGcY/MDPXn8jQB+sAThPCuAL2J0yTllX4fTrh7GUpOV50+ESvOvZ3ARADz6zwE0QPXlp1SJ4HLqtc7cLdpqs97sU+P0zZTjg7Q+2xVq9s5xfQRHYqY+lpT+704Dr9xC/fdke8EcvMd6zwEBA7dgWIEnO1XsAbXs0m32AMNDBeBH5AGRBA8DE8SKSkUE435PEypLgGmIDHtJin4BT19ubK/YalZ/K0wHPN9Uc3DVxs0Mjz09fAGRepXj35HldQRgAT//YVua+uq+zwbQxL4RA+Vj911XKGPz8Ji6y7SHcjm94w+n0s7/66PfrUaitm3VdiR5QJOTYvKw+OQby11Q2yVjpBYCI55MB6o6OsVa9HLis5qIXUFM9A7jfup8ac0yHVMwGc087GrnY3lS9g4+FCH3A+MCQ12pP4bepfyQ4yF6rYd200g3gwPXtB4qX7EXXOAO8dTHA6Ku6dxNmzE/PV4wmJTUPJnW5Tk7mb22ZnjbtMzhm3JmvcINlRapIlznLe12la+Bmm1BG2fz9UX62gohjvi5TH365JRzLvdrRL/4NMKY7wa5PxQvFtkHiO465+Ss1KBQPSDTbB2HC3Hw+saj4/30fS2AJLIElsASWwBLYEX8COk7eiUf+0c0AAAAASUVORK5CYII=",A="data:image/png;base64,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",i="data:image/png;base64,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",h="/zh-cn/assets/003b1add7c7cb3a3e1dc779588014fab-6e38a540.png",j="/zh-cn/assets/bfdd9f38cc1b1220f25734c917e16153-633580be.png",g="/zh-cn/assets/e05d5510aaeaf46a9e2cdf6ae3b818a2-b38efa29.png",d="/zh-cn/assets/7e948d626ced5b735cff1801c43863a5-6ab26544.png",u="/zh-cn/assets/dd296480837e3618f70d3410d656da79-b4b17dcf.jpeg",m=[s,a,n,e,l,p,t,c,r,o,A,i,h,j,g,d,u],y={label:"Xline 持久化存储设计与实现",description:"在 Xline 早期的原型阶段,我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度,提高了项目的开发和迭代速度,但带来的影响也是显著的:由于数据都存储在内存当中,因此一旦当进程 crash 后,节点的数据恢复需要依赖于从其他正常节点上拉取全量数据,这就需要较长的恢复时间。基于此方面的考虑,Xline 在最新发布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据持久化到磁盘当中,同时向上层调用方屏蔽掉无关的底层细节。",location:"中国香港",author:["达坦科技"],tags:["Xline"],date:"2023-05-25",title:"Xline Persistent Storage Design and Implementation"},f=[{label:"引言",level:2},{label:"B+ Tree 读写放大分析",level:3},{label:"LSM Tree 读写放大分析",level:3},{label:"总结",level:3},{label:"持久化存储层设计与实现",level:2},{label:"整体架构与写入流程",level:3},{label:"接口设计",level:3},{label:"实现相关",level:3},{label:"性能评估",level:2}],k=`在 Xline 早期的原型阶段,我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度,提高了项目的开发和迭代速度,但带来的影响也是显著的:由于数据都存储在内存当中,因此一旦当进程 crash 后,节点的数据恢复需要依赖于从其他正常节点上拉取全量数据,这就需要较长的恢复时间。
基于此方面的考虑,Xline 在最新发布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据持久化到磁盘当中,同时向上层调用方屏蔽掉无关的底层细节。
## 存储引擎选型
@@ -476,4 +476,4 @@ StorageEngine Trait 定义(engine/src/engine_api.rs):在 v0.3.0 的新版本中,我们除了引入了 Persistent Storage Layer 以外,还对 CURP 的部分内容做了一些大型的重构。在重构完毕,添加新功能后,前不久通过了 validation test 和 Integration test。性能部分的测试信息,已经在 Xlinev0.4.0 中释放出来。
性能报告请参考链接:
-https://github.com/datenlord/Xline/blob/master/img/xline-key-perf.png
`;export{m as assetURLs,k as default,y as metadata,f as toc}; +https://github.com/datenlord/Xline/blob/master/img/xline-key-perf.png
`;export{m as assetURLs,f as default,y as metadata,k as toc}; diff --git a/zh-cn/assets/index-5076d4ea.js b/zh-cn/assets/index-90047cd2.js similarity index 98% rename from zh-cn/assets/index-5076d4ea.js rename to zh-cn/assets/index-90047cd2.js index 7701ffe..28a7f70 100644 --- a/zh-cn/assets/index-5076d4ea.js +++ b/zh-cn/assets/index-90047cd2.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",s=[e,l,t,i,a],p={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",i="/zh-cn/assets/image2-03115587.png",t="/zh-cn/assets/image3-8a8d1c33.png",a="/zh-cn/assets/image4-c1593056.png",s=[e,l,i,t,a],p={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 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的 meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。
那为什么 Xline 要使用 CURP 这样一种新的协议,而非 Raft 或者 Multi-Paxos 来作为底层的共识协议呢?为了说明这个问题,我们不妨先来看看 Raft 以及 Multi-Paxos 都存在什么样的问题?
下图是 Raft 协议达成共识的一个时序流程:
- +在这个时序图中,我们可以了解到 Raft 协议达成共识的流程:
下图是 Multi-Paxos 协议达成共识的一个时序流程:
- +在这个时序图中,我们可以了解到 Multi-Paxos 协议达成共识的流程:
Xline 是一款提供跨数据中心强一致性的分布式 KV 存储,其核心问题之一便是如何在跨数据中心这种高延迟的广域网环境中提供高性能的强一致性保证。传统的分布式共识算法,如 Raft 和 Multi-Paxos,通过让所有操作都满足持久化存储和有序性前提来保证状态机一致性。而 CURP 协议则是对达成共识的场景做了更细粒度的划分,将协议分割成了前端(fast path)和后端(slow path),前端只保证了提案会被持久化到集群当中,而后端不仅保证了持久化,也保证了所有保存了该提案的节点会按照相同的顺序执行命令,保证了状态机的一致性。
关于 CURP 协议的简介就到这里,更多的细节欢迎参考我们的其他文章和分享,如下:
Curp 共识协议的重新思考
DatenLord | Xline Geo-distributed KV Storage
`;export{s as assetURLs,o as default,p as metadata,n as toc}; +DatenLord | Xline Geo-distributed KV Storage
`;export{s as assetURLs,r as default,p as metadata,n as toc}; diff --git a/zh-cn/assets/index-6f20c5b7.js b/zh-cn/assets/index-9cbd4195.js similarity index 95% rename from zh-cn/assets/index-6f20c5b7.js rename to zh-cn/assets/index-9cbd4195.js index 48c76f1..34d9912 100644 --- a/zh-cn/assets/index-6f20c5b7.js +++ b/zh-cn/assets/index-9cbd4195.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-eeda38bf.png",e=[l],i={label:"Xline v0.2.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Xline v0.2.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.2.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],n=` +const e="/zh-cn/assets/cover-eeda38bf.png",l=[e],i={label:"Xline v0.2.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Xline v0.2.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.2.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],n=`Xline 是一个基于 Curp 协议的,用于管理元数据的分布式 KV 存储。 现有的分布式 KV 存储大多采用 Raft 共识协议,需要两次 RTT 才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。
但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个 RTT,从而提高性能。因此,Xline 旨在实现高性能的数据访问和跨数据中心场景下的强一致性。
@@ -36,4 +36,4 @@ const l="/zh-cn/assets/cover-eeda38bf.png",e=[l],i={label:"Xline v0.2.0:一个如果你有兴趣参与探讨 Rust 作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于 Rust 编程语言相关应用的线下 Meetup。我们的主题是 Rust💡X,意在探讨用 Rust 编程语言“点亮”的任何应用、实践和探索。
+const e="/zh-cn/assets/cover-c938ebe8.png",t="/zh-cn/assets/image1-a88ec652.jpg",s="/zh-cn/assets/image2-0d688c12.png",r=[e,t,s],n={label:"4.8 Beijing Rust Meetup | Call For Presenters",description:"如果你有兴趣参与探讨Rust作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于Rust编程语言相关应用的线下Meetup。我们的主题是Rust💡X,意在探讨用Rust编程语言“点亮”的任何应用、实践和探索。",cover:"./cover.png",location:"中国香港",date:"2023-03-31",title:"4.8 Beijing Rust Meetup | Call For Presenters"},i=[{label:"嘉宾演讲 (Presenter & Topic)",level:2},{label:"提交议题 (Call for Presenters)",level:2},{label:"Meetup 报名方式 (Registration)",level:2}],o=`如果你有兴趣参与探讨 Rust 作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于 Rust 编程语言相关应用的线下 Meetup。我们的主题是 Rust💡X,意在探讨用 Rust 编程语言“点亮”的任何应用、实践和探索。
时间: 2023 年 4 月 8 日 14:00 地点: 环球财讯中心 M 层 北京市西城区宣武门外大街甲 1 号
欢迎扫描下方二维码或点击阅读原文,即可报名。
-`;export{n as assetURLs,o as default,r as metadata,i as toc}; +`;export{r as assetURLs,o as default,n as metadata,i as toc}; diff --git a/zh-cn/assets/index-7df3558a.js b/zh-cn/assets/index-a9e0a78f.js similarity index 90% rename from zh-cn/assets/index-7df3558a.js rename to zh-cn/assets/index-a9e0a78f.js index faf9950..837bef0 100644 --- a/zh-cn/assets/index-7df3558a.js +++ b/zh-cn/assets/index-a9e0a78f.js @@ -1,4 +1,4 @@ -const s="/zh-cn/assets/cover-9c53ea5f.png",n="/zh-cn/assets/image1-52cf1c3c.jpg",t="/zh-cn/assets/image1-0a18e154.png",o=[s,n,t],a={label:"SpinalHDL应用前景探索线上研讨会",description:"新一代硬件描述语言SpinalHDL的发明人Charles Papon说,SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注,那么SpinalHDL有哪些最新的进展和落地实践呢?",cover:"./cover.png",location:"中国香港",date:"2022-12-08",title:"SpinalHDL Application Prospect Exploration Online Seminar"},p=[{label:"线上研讨会",level:2}],r=`新一代硬件描述语言 SpinalHDL 的发明人 Charles Papon 说,SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注,那么 SpinalHDL 有哪些最新的进展和落地实践呢?
+const s="/zh-cn/assets/cover-9c53ea5f.png",n="/zh-cn/assets/image1-52cf1c3c.jpg",t="/zh-cn/assets/image1-0a18e154.png",o=[s,n,t],r={label:"SpinalHDL应用前景探索线上研讨会",description:"新一代硬件描述语言SpinalHDL的发明人Charles Papon说,SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注,那么SpinalHDL有哪些最新的进展和落地实践呢?",cover:"./cover.png",location:"中国香港",date:"2022-12-08",title:"SpinalHDL Application Prospect Exploration Online Seminar"},a=[{label:"线上研讨会",level:2}],p=`新一代硬件描述语言 SpinalHDL 的发明人 Charles Papon 说,SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注,那么 SpinalHDL 有哪些最新的进展和落地实践呢?
达坦科技(DatenLord) 致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。达坦科技采用硬件加速提升存储性能,目前采用 FPGA、ASIC 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用。
为了让对开源硬件感兴趣的朋友进一步了解 SpinalHDL,在北京时间 2022 年 12 月 16 日下午 17:00-21:00,达坦科技联合 SpinalHDL 社区举办一场题为《SpinalHDL 应用前景探索》的线上研讨会(Webinar),本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程 (Flow)。
@@ -11,4 +11,4 @@ const s="/zh-cn/assets/cover-9c53ea5f.png",n="/zh-cn/assets/image1-52cf1c3c.jpg" 会议号:830 6630 7799对开源硬件感兴趣的朋友,可以添加小助手微信,加入达坦科技硬件群。
-`;export{o as assetURLs,r as default,a as metadata,p as toc}; +`;export{o as assetURLs,p as default,r as metadata,a as toc}; diff --git a/zh-cn/assets/index-2ee8a4ba.js b/zh-cn/assets/index-aa8ef45e.js similarity index 99% rename from zh-cn/assets/index-2ee8a4ba.js rename to zh-cn/assets/index-aa8ef45e.js index 5a6af97..c9d3b59 100644 --- a/zh-cn/assets/index-2ee8a4ba.js +++ b/zh-cn/assets/index-aa8ef45e.js @@ -1,4 +1,4 @@ -const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png",e="/zh-cn/assets/image3-b15b4acb.png",n="/zh-cn/assets/image4-e5ed8af3.png",l="/zh-cn/assets/image5-74f0a1a0.png",t="/zh-cn/assets/image6-5ab2a1df.png",a="/zh-cn/assets/image7-bfc65522.png",p="/zh-cn/assets/image8-462cfa81.png",s="/zh-cn/assets/image9-ecae19a3.png",d="/zh-cn/assets/image10-1092617f.png",P="/zh-cn/assets/image11-2508217f.png",c="/zh-cn/assets/image12-69f6226d.png",r="/zh-cn/assets/image13-62fe53ff.png",h="/zh-cn/assets/image14-048f6e24.png",g="/zh-cn/assets/image15-c04accbc.png",m="/zh-cn/assets/image16-2de227b5.png",S="/zh-cn/assets/image17-ecbf7b1e.png",F="/zh-cn/assets/image18-88f5d1b8.png",R="/zh-cn/assets/image19-5df924ff.png",D="/zh-cn/assets/image20-5dfde1d6.png",b="/zh-cn/assets/image21-90c388d7.png",A=[i,o,e,n,l,t,a,p,s,d,P,c,r,h,g,m,S,F,R,D,b],T={label:"万字长文,详述TRIDENT:Poseidon 哈希算法的硬件加速与实现!",description:"本文主要介绍了DatenLord团队在今年的Xilinx全球自适应计算挑战赛上获得 Big Data Analytics赛道一等奖的作品——TRIDENT:Poseidon哈希算法的硬件实现与加速。该项目基于Xilinx Varium C1100 FPGA加速卡,为 Filecoin 区块链应用中的Poseidon哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT基于 SpinalHDL 设计了Poseidon加速器 IP 并基于 Vivado中Block Design 工具搭建完整的FPGA硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为Filecoin应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从Poseidon哈希算法概述、基于SpinalHDL和Cocotb的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个TRIDENT项目进行详细的介绍。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2022-06-30",title:"Ten thousand words long article, detailing the hardware acceleration and implementation of TRIDENT: Poseidon hash algorithm!"},u=[{label:"引言",level:2},{label:"0.1 Poseidon 与零知识证明",level:3},{label:"0.2 Filecoin 分布式存储网络",level:3},{label:"Poseidon 哈希算法概述",level:2},{label:"1.1Poseidon 参数",level:3},{label:"1.2 Poseidon 详细计算流程",level:3},{label:"1.3Poseidon 算法特点",level:3},{label:"基于 SpinalHDL 和 Cocotb 的硬件设计与验证",level:2},{label:"2.1 SpinalHDL 和 Cocotb 概述",level:3},{label:"2.2 SpinalHDL 在硬件设计中的优势",level:3},{label:"2.3Cocotb 在验证中的优势",level:3},{label:"总体方案设计",level:2},{label:"3.1 开发平台",level:3},{label:"3.2 加速系统设计",level:3},{label:"加速器 IP 设计",level:2},{label:"4.1 模加电路的设计",level:3},{label:"4.2 模乘电路的设计",level:3},{label:"4.3 加速器架构设计",level:3},{label:"性能测试",level:2},{label:"5.1 Vivado Implementation 报告",level:3},{label:"总结",level:2}],C=`本文主要介绍了 DatenLord 团队在今年的 Xilinx 全球自适应计算挑战赛上获得 Big Data Analytics 赛道一等奖的作品——TRIDENT: Poseidon 哈希算法的硬件实现与加速。该项目基于 Xilinx Varium C1100 FPGA 加速卡,为 Filecoin 区块链应用中的 Poseidon 哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT 基于 SpinalHDL 设计了 Poseidon 加速器 IP 并基于 Vivado 中 Block Design 工具搭建完整的 FPGA 硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为 Filecoin 应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从 Poseidon 哈希算法概述、基于 SpinalHDL 和 Cocotb 的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个 TRIDENT 项目进行详细的介绍。
+const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png",e="/zh-cn/assets/image3-b15b4acb.png",n="/zh-cn/assets/image4-e5ed8af3.png",l="/zh-cn/assets/image5-74f0a1a0.png",t="/zh-cn/assets/image6-5ab2a1df.png",a="/zh-cn/assets/image7-bfc65522.png",p="/zh-cn/assets/image8-462cfa81.png",s="/zh-cn/assets/image9-ecae19a3.png",d="/zh-cn/assets/image10-1092617f.png",P="/zh-cn/assets/image11-2508217f.png",c="/zh-cn/assets/image12-69f6226d.png",r="/zh-cn/assets/image13-62fe53ff.png",h="/zh-cn/assets/image14-048f6e24.png",g="/zh-cn/assets/image15-c04accbc.png",m="/zh-cn/assets/image16-2de227b5.png",R="/zh-cn/assets/image17-ecbf7b1e.png",S="/zh-cn/assets/image18-88f5d1b8.png",F="/zh-cn/assets/image19-5df924ff.png",D="/zh-cn/assets/image20-5dfde1d6.png",A="/zh-cn/assets/image21-90c388d7.png",b=[i,o,e,n,l,t,a,p,s,d,P,c,r,h,g,m,R,S,F,D,A],u={label:"万字长文,详述TRIDENT:Poseidon 哈希算法的硬件加速与实现!",description:"本文主要介绍了DatenLord团队在今年的Xilinx全球自适应计算挑战赛上获得 Big Data Analytics赛道一等奖的作品——TRIDENT:Poseidon哈希算法的硬件实现与加速。该项目基于Xilinx Varium C1100 FPGA加速卡,为 Filecoin 区块链应用中的Poseidon哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT基于 SpinalHDL 设计了Poseidon加速器 IP 并基于 Vivado中Block Design 工具搭建完整的FPGA硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为Filecoin应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从Poseidon哈希算法概述、基于SpinalHDL和Cocotb的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个TRIDENT项目进行详细的介绍。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2022-06-30",title:"Ten thousand words long article, detailing the hardware acceleration and implementation of TRIDENT: Poseidon hash algorithm!"},T=[{label:"引言",level:2},{label:"0.1 Poseidon 与零知识证明",level:3},{label:"0.2 Filecoin 分布式存储网络",level:3},{label:"Poseidon 哈希算法概述",level:2},{label:"1.1Poseidon 参数",level:3},{label:"1.2 Poseidon 详细计算流程",level:3},{label:"1.3Poseidon 算法特点",level:3},{label:"基于 SpinalHDL 和 Cocotb 的硬件设计与验证",level:2},{label:"2.1 SpinalHDL 和 Cocotb 概述",level:3},{label:"2.2 SpinalHDL 在硬件设计中的优势",level:3},{label:"2.3Cocotb 在验证中的优势",level:3},{label:"总体方案设计",level:2},{label:"3.1 开发平台",level:3},{label:"3.2 加速系统设计",level:3},{label:"加速器 IP 设计",level:2},{label:"4.1 模加电路的设计",level:3},{label:"4.2 模乘电路的设计",level:3},{label:"4.3 加速器架构设计",level:3},{label:"性能测试",level:2},{label:"5.1 Vivado Implementation 报告",level:3},{label:"总结",level:2}],C=`本文主要介绍了 DatenLord 团队在今年的 Xilinx 全球自适应计算挑战赛上获得 Big Data Analytics 赛道一等奖的作品——TRIDENT: Poseidon 哈希算法的硬件实现与加速。该项目基于 Xilinx Varium C1100 FPGA 加速卡,为 Filecoin 区块链应用中的 Poseidon 哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT 基于 SpinalHDL 设计了 Poseidon 加速器 IP 并基于 Vivado 中 Block Design 工具搭建完整的 FPGA 硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为 Filecoin 应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从 Poseidon 哈希算法概述、基于 SpinalHDL 和 Cocotb 的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个 TRIDENT 项目进行详细的介绍。
Poseidon 是一种全新的面向零知识证明(ZKP: Zero-Knowledge Proof)密码学协议设计的哈希算法。相比同类算法,包括经典的 SHA-256、SHA-3 以及 Pedersen 哈希函数,在零知识证明的应用场景下,Poseidon 能够显著地降低证明生成和验证的计算复杂度,极大地提升零知识证明系统整体的运行效率。基于上述优点,Poseidon 目前已被广泛应用在了各种区块链项目当中,包括去中心化存储系统 Filecoin、加密货币 Mina Protocol 和 Dusk Network 等,主要用于加速其中的零知识证明系统。
RF 次 Full Round 循环和 RP 次 Partial Round 循环组成。两种循环的计算流程基本相似,都依次包括 AddRoundConstant、SBox 和 MDSMixing 三个阶段,在这三个阶段分别完成常数模加、五次方模幂和向量—矩阵乘法,两者唯一的区别在于 Partial Round 在 Sbox 阶段只需要完成中间状态第一个元素的计算。Full Round 和 Partial Round 每次循环/迭代的计算流程如下图(a)和(b)所示。如果将 Poseidon 哈希函数的所有循环都依次展开,可以将其看成是一条单向的数据流,在该数据流上不断地进行模加、模幂和矩阵运算。
基于上述算法流程的定义,本次课题中实现的 Poseidon 加速器的具体硬件架构如下图所示。在 Poseidon 单次迭代的算法流程的基础上, 加速器的实现针对具体的 FPGA 架构特点和硬件资源限制做了如下几点优化:
- +在上文中介绍的 FPGA 硬件系统和其中 Poseidon 加速器 IP 的基础上,我们通过 Vivado 集成开发环境将其实现在了 Varium C1100 FPGA 加速卡上,该板卡搭载了 Xilinx Virtex UltraScale+系列的 FPGA 芯片,具体芯片型号为具体型号为 XCU55N-FSVH2892-2L-E。整个硬件系统实现(Implementation)后的报告以及计算性能的测试结果如下:
整体硬件加速系统综合实现后逻辑资源消耗情况如下表所示:
- +各项 FPGA 资源中 DSP Slices(70.01%)和 LUT(61.15%)的消耗最多, 主要用于 255-Bit Montgomery 模乘电路的实现上。这两项资源的不足也限制了在加速器中配置更多模乘器来提升计算并行度和整体的加速性能。
在时序上,实现(Implementation)后 Poseidon 加速器刚好能够满足 100MHz 工作频率的要求。关键路径上,建立(set up)时间的余量为 0.069ns,保持(hold)时间的余量为 0.01ns。
除了资源和时序外,FPGA 实现后的功耗信息如下图所示。由下图可见,在运行我们设计的加速器硬件时,FPGA 芯片的整体功耗在 24.7W 左右。而我们在性能测试中使用的 RTX 3070 GPU 加速卡的运行功耗在 120W 左右。
- +### 5.2 计算性能测试
TRIDENT 项目中设计了两种方式测试 Poseidon 加速器的计算性能:
TRIDENT 项目旨在为 Filecoin 分布式存储系统中涉及的 Poseidon 哈希计算实例提供一套完整的 FPGA 加速方案。硬件上,我们基于 Xilinx Varium C1100 FPGA 板卡搭建了一个完整的加速系统,该系统主要由 XDMA、FIFO 以及 Poseidon 加速器 IP 三部分组成,并通过 PCIe 接口与服务器主机进行数据传输。软件上,我们为 Filecoin 的具体软件实现 Lotus 提供了访问底层 FPGA 加速器的接口,并通过 Lotus-Bench 对加速器的计算性能进行测试和比较。
整个硬件加速系统的核心模块—Poseidon 加速器 IP 的设计主要可以分成单元运算电路和整体架构两个部分。其中单元运算电路包括 255-Bit 的模乘和模加,对于模加器,TRIDENT 中采用基于加法的取余方式避免了多余的比较器电路开销。对于 255-Bit 模乘电路,我们基于 Karatsuba-Offman 算法将高位宽的乘法分解成若干并行的小乘法器实现,同时采用 Montgomery Reduction 算法将取余过程中复杂的除法运算转换成乘法实现。在加速器架构的设计上,我们针对具体的 FPGA 硬件资源限制,基于流水线和折叠技术设计了一个串行的 Poseidon 计算架构。性能表现上,目前 FPGA 加速器电路能够工作在 100MHz 并为 Filecoin 提供两倍于 AMD Ryzen 5900X 处理器的加速性能。但和 RTX 3070 GPU 相比还存在 2~3 倍的差距,仍然有较大的提升空间。
@@ -278,4 +278,4 @@ const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png优化加速器架构:由于需要适配 Filecoin Poseidon 计算实例中不同大小的输入数据,目前在输入较小的情况下加速器中存在一些冗余的运算单元。通过进一步优化加速器的整体架构,使得在不同长度的输入数据下,所有运算单元都能得到更好的利用,能够进一步提升整体的加速性能。
循环冗余校验码,即 Cyclic Redundancy Check (CRC), 是一种在各种通信系统中广泛应用的检错机制。CRC 算法的工作原理和哈希函数类似,具体来说,其对任意长度的数据计算出一段唯一的标识(校验和), 然后根据这个标识来判断该数据在传输过程中是否发生变化。CRC 检错码在实际生活中有着广泛的应用,诸如网络通信,存储系统等场景下都需要 CRC 来保证数据传输的正确性。而不同的应用场景往往需要采用不同的 CRC 配置参数,同时对计算的性能也有不同的需求。例如,在基于 Ethernet 协议的网络传输中需要采用 IEEE802-3 协议所规定的 CRC 参数,同时需要高吞吐率的 CRC 实现以和网络带宽相匹配。
对于一个具体的通信系统,CRC 既可以通过软件编程也可以硬件电路的形态来实现。相较于网络上丰富的软件库,开源的 CRC 硬件实现却相对落后,尤其是面向高性能的应用场景。例如,下述链接都提供了参数可配置的 CRC 硬件电路生成器,但这些实现方式都是直接将 CRC 算法映射到组合逻辑电路上,这往往会导致较长的组合逻辑延时进而降低电路的整体工作频率,无法满足高吞吐率的需求。
则
+则
+[1] Y. Sun and M. S. Kim, "A Table-Based Algorithm for Pipelined CRC Calculation," 2010 IEEE International Conference on Communications, Cape Town, South Africa, 2010, pp. 1-5, doi: 10.1109/ICC.2010.5501903.
-[2] Sun Y, Kim M S. A pipelined CRC calculation using lookup tables[C]//2010 7th IEEE Consumer Communications and Networking Conference. IEEE, 2010: 1-2.
`;export{y as assetURLs,F as default,f as metadata,x as toc}; +[2] Sun Y, Kim M S. A pipelined CRC calculation using lookup tables[C]//2010 7th IEEE Consumer Communications and Networking Conference. IEEE, 2010: 1-2.
`;export{f as assetURLs,w as default,y as metadata,x as toc}; diff --git a/zh-cn/assets/index-0c28844a.js b/zh-cn/assets/index-b21d7686.js similarity index 99% rename from zh-cn/assets/index-0c28844a.js rename to zh-cn/assets/index-b21d7686.js index c500077..4f83997 100644 --- a/zh-cn/assets/index-0c28844a.js +++ b/zh-cn/assets/index-b21d7686.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}],f=` +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}],A=`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关于项目更多的详细信息可关注链接:
-https://github.com/wengwz/blue-ethernet
`;export{I as assetURLs,f as default,P as metadata,D as toc}; +https://github.com/wengwz/blue-ethernet
`;export{I as assetURLs,A as default,P as metadata,D as toc}; diff --git a/zh-cn/assets/index-82a24597.js b/zh-cn/assets/index-b28c82c1.js similarity index 97% rename from zh-cn/assets/index-82a24597.js rename to zh-cn/assets/index-b28c82c1.js index 0a7213c..0941791 100644 --- a/zh-cn/assets/index-82a24597.js +++ b/zh-cn/assets/index-b28c82c1.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-c17c52cc.png",s="/zh-cn/assets/image1-0dff4570.png",c="/zh-cn/assets/image2-e09cfdc8.png",o="/zh-cn/assets/image3-2b589463.png",p="/zh-cn/assets/image4-5841c9d6.png",a="/zh-cn/assets/image5-92344f1d.png",d="/zh-cn/assets/image6-b429f851.png",t="/zh-cn/assets/image7-97920b5a.png",i="/zh-cn/assets/image8-ecf5c6f3.png",r="/zh-cn/assets/image9-f47bad66.png",n="/zh-cn/assets/image10-b50adc27.png",l="/zh-cn/assets/image11-99ec2a51.png",m=[e,s,c,o,p,a,d,t,i,r,n,l],g={label:"从数学角度思考程序与验证正确性",description:"本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。",cover:"./cover.png",location:"中国香港",author:["田野"],tags:["Xline"],date:"2023-03-02",title:"Thinking about programs mathematically and verifying correctness"},h=[{label:"我们该如何写出正确的程序?",level:2},{label:"程序中会有什么样错误?",level:3},{label:"经验",level:3},{label:"形式化方法",level:3},{label:"TLA+",level:2},{label:"简单的例子",level:3},{label:"Two-Phase Commit",level:2},{label:"总结",level:2},{label:"我们的项目:Xline",level:2}],A=` +const e="/zh-cn/assets/cover-c17c52cc.png",s="/zh-cn/assets/image1-0dff4570.png",c="/zh-cn/assets/image2-e09cfdc8.png",o="/zh-cn/assets/image3-2b589463.png",a="/zh-cn/assets/image4-5841c9d6.png",p="/zh-cn/assets/image5-92344f1d.png",d="/zh-cn/assets/image6-b429f851.png",r="/zh-cn/assets/image7-97920b5a.png",i="/zh-cn/assets/image8-ecf5c6f3.png",t="/zh-cn/assets/image9-f47bad66.png",n="/zh-cn/assets/image10-b50adc27.png",l="/zh-cn/assets/image11-99ec2a51.png",m=[e,s,c,o,a,p,d,r,i,t,n,l],h={label:"从数学角度思考程序与验证正确性",description:"本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。",cover:"./cover.png",location:"中国香港",author:["田野"],tags:["Xline"],date:"2023-03-02",title:"Thinking about programs mathematically and verifying correctness"},g=[{label:"我们该如何写出正确的程序?",level:2},{label:"程序中会有什么样错误?",level:3},{label:"经验",level:3},{label:"形式化方法",level:3},{label:"TLA+",level:2},{label:"简单的例子",level:3},{label:"Two-Phase Commit",level:2},{label:"总结",level:2},{label:"我们的项目:Xline",level:2}],A=`本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。
程序设计的目标永远是写出正确的程序。随着时间的推移,我们的程序越来越复杂,其中可能存在的错误也越来越多。想要写出正确的程序,首先应该了解程序中可能出现的错误有哪些。
@@ -67,7 +67,7 @@ const e="/zh-cn/assets/cover-c17c52cc.png",s="/zh-cn/assets/image1-0dff4570.png"在其中用到了"或"连接两个状态,我们可以用布尔逻辑中的逻辑或 ∨
来表示。这样,我们就可以清晰地表示出程序的状态转换关系了。为了美观,在 TLA+ 中,首句前也可以补上相同的布尔逻辑符号:
我们最终得到了这个简单程序在初始状态后的两个状态,下面我们将初始状态补全,并按照 TLA+ 语言的要求补全整个 specification:
- +二阶段提交(英语:Two-phase Commit)是指在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法。通常,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的 ACID 特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。—— Two-Phase Commit (Wikipedia)
在 Leslie Lamport's The TLA+ Video Course 中,Lamport 以这样的方式类比解释 Two-Phase Commit:
- +在婚礼上,牧师是协调者,新郎和新娘是参与者。当新郎和新娘都同意婚事时,牧师才会正式宣布婚事。如果有一方不同意,牧师就会中止婚事:
msgs
作为消息池,用于记录所有正在传输的消息,初始值是一个空集。下面我们来定义系统做可能发生的动作。
- +[type → "prepare", rm → r]
是一个 TLA+ 中的 record,类似于其它编程语言中的 struct。当 TM
的状态为 init
,且在消息池中存在来自 r
的 Prepared
消息,tmPrepared
在下一个状态的值会是 tmPrepared
和 {r}
的并集。
上面的两个动作分别是 Transaction Manager 进行 Commit 与 Abort。
- +上述 4 个 Resource Manager 动作分别是 Resource Manager 选择 Prepare 与 Abort,以及处理由 Transaction Manager 决定的 Commit 与 Abort。
其中,存在语法如 rmState' = [rmState except ![r] = "prepared"]
,意为"在下一个状态中,rmState[r]
的值变为 prepared
,其它部分不变"。
如果我们用形如 rmState[r]' = "prepared"
的形式来表示,我们并没有显式地说明 rmState
的其它部分在下一个状态的值,因此是不正确的。
TLA+被广泛用于分布式系统算法的研究和开发中。在我们的项目 Xline 中,TLA+被用来在设计阶段验证共识算法的正确性。
Xline 是一个用于元数据管理的分布式 KV 存储。我们在 Xline 中使用 CURP 协议(https://www.usenix.org/system/files/nsdi19-park.pdf)的修改版作为共识协议,TLA+将被用于其正确性验证中。
-如果你想了解更多关于 Xline 的信息,请参考我们的 Github:https://github.com/datenlord/Xline
`;export{m as assetURLs,A as default,g as metadata,h as toc}; +如果你想了解更多关于 Xline 的信息,请参考我们的 Github:https://github.com/datenlord/Xline
`;export{m as assetURLs,A as default,h as metadata,g as toc}; diff --git a/zh-cn/assets/index-0850e6f5.js b/zh-cn/assets/index-bccae718.js similarity index 98% rename from zh-cn/assets/index-0850e6f5.js rename to zh-cn/assets/index-bccae718.js index ec0052b..b0e677f 100644 --- a/zh-cn/assets/index-0850e6f5.js +++ b/zh-cn/assets/index-bccae718.js @@ -1,4 +1,4 @@ -const o="/zh-cn/assets/image1-f1a8209b.jpg",p="/zh-cn/assets/image2-f5de5635.jpg",t=[o,p],l={label:"喷泉码浅谈",description:"喷泉码(Fountain Code)是一种在无线通信、数据传输和网络编码领域中使用的错误纠正技术。它与传统的纠错码和编码方法有所不同,喷泉码被设计用于在不确定信道条件下的高效数据传输。",location:"新疆",author:["施继成"],tags:["RDMA"],date:"2023-08-31",title:"Fountain Code"},a=[{label:"喷泉码简介",level:2},{label:"LT 编码",level:2},{label:"Raptor 算法",level:2},{label:"总结",level:2}],r=`**喷泉码(Fountain Code)**是一种在无线通信、数据传输和网络编码领域中使用的错误纠正技术。它与传统的纠错码和编码方法有所不同,喷泉码被设计用于在不确定信道条件下的高效数据传输。
传统的纠错码(如海明码、RS 码等)通常需要在发送方对数据进行编码,接收方则使用相同的编码进行解码和纠错。这些方法一般具有固定的码率(Code Rate),即针对一定长度的原始数据,编码后的长度是固定的,这些方法在面对不稳定的信道或严重的信道丢失时可能效果不佳。相比之下,喷泉码通过在发送方生成随机的冗余数据,然后将其注入到原始数据中,以创造出一个“喷泉”流——相应的码率也也就不固定了。接收方可以从这个流中采样任意数量的数据包,并将它们合并以恢复原始数据。
喷泉码的一种常见应用是在无线传感器网络中,其中网络节点之间的通信可能受到弱信号、干扰和多径传播等因素的影响。通过使用喷泉码,节点可以在较差的通信条件下实现可靠的数据传输。
@@ -30,9 +30,9 @@ const o="/zh-cn/assets/image1-f1a8209b.jpg",p="/zh-cn/assets/image2-f5de5635.jpg上述所说的局限性是受到信息论的约束的,无法进一步降低。那么我们有没有办法实现一种方式来降低计算资源的消耗呢?比如我们如果不需要恢复出全部的原始数据呢?受到这个思路的启发 Raptor 算法应运而生。
Raptor 本质上是一类混合编码方式,结合 LT 编码和 LDPC 编码,同时获取了两种编码的好处。如下图所示:
- -Raptor 编码首先通过 LDPC 编码进行一次固定码率编码,形成一个中间编码层,然后再对该编码层进行 LT 编码,生成最终的编码数据块。当然 Raptor 编码也会有其他变种,不过原理大同小异,例如下图所示:
+Raptor 编码首先通过 LDPC 编码进行一次固定码率编码,形成一个中间编码层,然后再对该编码层进行 LT 编码,生成最终的编码数据块。当然 Raptor 编码也会有其他变种,不过原理大同小异,例如下图所示:
+该编码具有三层结构,中间编码结果经过了两层固定码率编码,分别是 Hamming 编码和 LDPC 编码,然后再进行 LT 编码生成最终的编码块。
针对 Raptor 编码的解码方式一般有两种。第一种和编码方式完全相反,首先利用 LT 编码的解码方式恢复出部分的中间编码块,然后利用固定编码的解码方式恢复出原始的数据块。第二种方式则是将上述所有的多层编码方式都变成一种矩阵运算,针对收到数据后利用矩阵的高斯消元方法解出原始的数据块。
现有为人所熟知的 Raptor 编码主要有 RFC 5053 和 RFC 6330 RaptorQ 编码。两者的实现细节有诸多区别,但是内在的思路和上述的方法是类似的,有兴趣的读者可以进一步进行阅读和学习。
diff --git a/zh-cn/assets/index-f6eeef5e.js b/zh-cn/assets/index-c719bd5c.js similarity index 97% rename from zh-cn/assets/index-f6eeef5e.js rename to zh-cn/assets/index-c719bd5c.js index 77dbcfc..2516e15 100644 --- a/zh-cn/assets/index-f6eeef5e.js +++ b/zh-cn/assets/index-c719bd5c.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/image1-86fdf634.png",t="/zh-cn/assets/image2-639b53e5.png",a="/zh-cn/assets/image3-c2c092f7.jpg",p=[e,t,a],s={label:"Curp 共识协议的重新思考",description:"共识协议是一种让分布式系统中多个节点保持信息一致的通信协议,即使少数节点发生故障也依然能够保证信息的准确和一致。而每当我们在讨论共识协议的时候往往会想到 classic paxos 或者 raft 协议,这两个协议是很多其他协议的基础,后续的很多协议都可以看成是它们的变种,例如Multi-Paxos 和Fast-Paxos 等等。我们今天先从这两个协议入手,先来回顾一下这两个协议是如何工作的。",location:"中国香港",tags:["Xline"],date:"2022-07-07",title:"Rethinking of the Curp Consensus Protocol"},r=[{label:"共识简介",level:2},{label:"Curp 共识协议",level:2},{label:"Curp 协议总结和讨论",level:2}],l=`共识协议是一种让分布式系统中多个节点保持信息一致的通信协议,即使少数节点发生故障也依然能够保证信息的准确和一致。而每当我们在讨论共识协议的时候往往会想到 classic paxos 或者 raft 协议,这两个协议是很多其他协议的基础,后续的很多协议都可以看成是它们的变种,例如 Multi-Paxos 和 Fast-Paxos 等等。我们今天先从这两个协议入手,先来回顾一下这两个协议是如何工作的。
首先来看 classic paxos 协议,如下图所示。Paxos 分为两个阶段(Phase),第一个阶段是 Prepare,主要任务是在 Log 上占一个 Slot,第二个阶段为 Accept,主要是确定这个 Slot 已经明确被占用了,且在两个阶段间没有被其他人抢占。当 Client 收到绝大多数人的 Accept Ok 回复之后,说明该条记录已经被提交,在整个系统达成了共识。这里 Client 和 Proposer 可以视为一个整体,整个过程在两个阶段分别有一次消息传递,总共发生两次消息传递。
@@ -38,4 +38,4 @@ A5:首先恢复流程需要选举一个新的 Master(Leader),该流程和 Ra通过上一个章节的论述,我们不难发现 Curp 协议和 Raft 协议非常像,其中的不同点就在于“等待池子”,这个池子的目的在于给冲突的请求排序,多个冲突请求一定不能被所有节点的“池子”同时接受,此时最多只有一个请求被 commit,也有可能所有请求都需要等待 master 的同步。也就是这个改动,让协议在某些情况下有更优秀的性能表现。
所以总结一下, Curp 协议在乐观情况下一个消息传递就能达到共识,悲观情况下会退化成 Raft 协议,需要两个消息传递才能达成共识。
-关于 Curp 协议的更多细节请参考原始论文:https://www.usenix.org/system/files/nsdi19-park.pdf
`;export{p as assetURLs,l as default,s as metadata,r as toc}; +关于 Curp 协议的更多细节请参考原始论文:https://www.usenix.org/system/files/nsdi19-park.pdf
`;export{p as assetURLs,l as default,r as metadata,s as toc}; diff --git a/zh-cn/assets/index-0b4fd2ad.js b/zh-cn/assets/index-cc44974b.js similarity index 90% rename from zh-cn/assets/index-0b4fd2ad.js rename to zh-cn/assets/index-cc44974b.js index 9311f36..6662ee7 100644 --- a/zh-cn/assets/index-0b4fd2ad.js +++ b/zh-cn/assets/index-cc44974b.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",a=[p,n,s,t],o={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},r=[],g=`SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。
+const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg",t="/zh-cn/assets/image2-f93efd4a.jpg",s="/zh-cn/assets/image1-50beaba8.png",o=[p,n,t,s],a={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},r=[],g=`SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。
达坦科技(DatenLord) 致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。
达坦科技采用硬件加速提升存储性能,目前采用 FPGA、ASIC 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用。在 2022 年 12 月,达坦科技曾联合 SpinalHDL 社区举办一场题为《SpinalHDL 应用前景探索》的线上研讨会,收获海内外 SpinalHDL 爱好者的欢迎。
而在北京时间 2023 年 7 月 7 日下午 14:00-17:00,达坦科技将联合 SpinalHDL 社区,以及四川芯测电子技术有限公司举办一场题为 SpinalHDL 的使用和开发经验研讨会,旨在和大家分享 SpinalHDL 最新的实践、挑战和经验的分享。
@@ -11,6 +11,6 @@ const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg"无法到现场的观众,也欢迎观看在线直播分享:
直播预约:腾讯会议+视频号
474-6575-9473
对开源硬件感兴趣的朋友,可以添加小助手微信,加入达坦科技硬件群。
-`;export{a as assetURLs,g as default,o as metadata,r as toc}; +`;export{o as assetURLs,g as default,a as metadata,r as toc}; diff --git a/zh-cn/assets/index-b2f220f4.js b/zh-cn/assets/index-d735fd77.js similarity index 95% rename from zh-cn/assets/index-b2f220f4.js rename to zh-cn/assets/index-d735fd77.js index aac8d66..7ea28fa 100644 --- a/zh-cn/assets/index-b2f220f4.js +++ b/zh-cn/assets/index-d735fd77.js @@ -1,4 +1,4 @@ -const i="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png",n="/zh-cn/assets/image2-b3df764b.png",l="/zh-cn/assets/image3-6b1d2584.png",s="/zh-cn/assets/image4-034a33e9.png",t="/zh-cn/assets/image5-6a5e807d.png",o=[i,e,n,l,s,t],a={label:"达坦科技2023开源毕业设计实习招募中",description:"自1984年Richard Stallman发起GMU和Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One的理念传播开后,之后的40年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了IT投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟",cover:"./cover.png",location:"海南",date:"2023-01-06",title:"Datan Technology 2023 Open Source Graduation Design Internship Recruitment"},p=[{label:"毕设项目的背景",level:2},{label:"细分方向",level:2},{label:"开源毕设导师组",level:2},{label:"开源毕设项目的流程",level:2},{label:"申请流程",level:2}],r=`自 1984 年 Richard Stallman 发起 GMU 和 Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One 的理念传播开后,之后的 40 年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了 IT 投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟
+const o="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png",n="/zh-cn/assets/image2-b3df764b.png",l="/zh-cn/assets/image3-6b1d2584.png",s="/zh-cn/assets/image4-034a33e9.png",t="/zh-cn/assets/image5-6a5e807d.png",i=[o,e,n,l,s,t],p={label:"达坦科技2023开源毕业设计实习招募中",description:"自1984年Richard Stallman发起GMU和Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One的理念传播开后,之后的40年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了IT投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟",cover:"./cover.png",location:"海南",date:"2023-01-06",title:"Datan Technology 2023 Open Source Graduation Design Internship Recruitment"},r=[{label:"毕设项目的背景",level:2},{label:"细分方向",level:2},{label:"开源毕设导师组",level:2},{label:"开源毕设项目的流程",level:2},{label:"申请流程",level:2}],a=`自 1984 年 Richard Stallman 发起 GMU 和 Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One 的理念传播开后,之后的 40 年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了 IT 投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟
相比而言,硬件开源之路更为崎岖。因为对物理器件的依赖度更高,复杂度更高,修改难度大,硬件开源之路走得比较缓慢。虽然是一条少有人走的路,但其正确性毋庸置疑。开源芯片生态(Open Source Chip Ecosystem-OSCE)的优势,包括可以节约市场化时间,以及知识产权的成本,EDA 工具、设施和劳动力。硬件开发者也期盼硬件设计可以像软件设计一样简单。
@@ -46,4 +46,4 @@ const i="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png"欢迎您预约直播,或者登陆腾讯会议观看直播:
对开源毕设感兴趣的朋友,欢迎添加小助手微信,加入达坦科技开源毕设群。
-`;export{o as assetURLs,r as default,a as metadata,p as toc}; +`;export{i as assetURLs,a as default,p as metadata,r as toc}; diff --git a/zh-cn/assets/index-1f712296.js b/zh-cn/assets/index-d758c903.js similarity index 92% rename from zh-cn/assets/index-1f712296.js rename to zh-cn/assets/index-d758c903.js index 966fd1e..362a09e 100644 --- a/zh-cn/assets/index-1f712296.js +++ b/zh-cn/assets/index-d758c903.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg",e="/zh-cn/assets/image2-ee430ce0.png",s=[t,o,e],a={label:"达坦科技受邀在2022中国计算机学会芯片大会做硬件加速研究分享",description:"2022年7月29日至7月30日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。",cover:"./cover.jpg",location:"新加坡",date:"2022-08-04",title:"Dartan Technology Invited to Do Hardware Acceleration Research Sharing at 2022 China Computer Society Chip Conference"},n=[],i=` +const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg",e="/zh-cn/assets/image2-ee430ce0.png",a=[t,o,e],s={label:"达坦科技受邀在2022中国计算机学会芯片大会做硬件加速研究分享",description:"2022年7月29日至7月30日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。",cover:"./cover.jpg",location:"新加坡",date:"2022-08-04",title:"Dartan Technology Invited to Do Hardware Acceleration Research Sharing at 2022 China Computer Society Chip Conference"},n=[],c=`2022 年 7 月 29 日至 7 月 30 日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。
2022 年 CCF 芯片大会由中科院计算所孙凝晖院士、中科院微电子所刘明院士担任大会主席,集结国内外知名专家学者,围绕智能化时代的芯片技术主题,论述芯片领域国际最前沿、权威和新颖的学术观点,包括芯片设计与 EDA、新型体系架构、前沿存储技术、容错计算应用等方面的关键技术和应用前景。
达坦科技致力于软硬件深度融合的跨云存储平台,其硬件负责人吴迪带领研发团队在今年的Xilinx 全球自适应计算挑战赛上刚获得Big Data Analytics 赛道一等奖。此次,达坦科技提交的论文“基于 SpinalHDL 和 Cocotb 的 Poseidon 哈希算法硬件加速器的敏捷开发”也成功入选,并受邀在大会做分享。达坦科技的翁万正在 30 日下午领域专用架构与敏捷设计论文分组,向与会者介绍了研究背景、方法技术和实验结果。
@@ -6,4 +6,4 @@ const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg"Poseidon 是一种全新的面向零知识证明的(ZKP:Zero-Knowledge Proof)密码学协议设计的哈希算法。相比经典的 SHA-256 和 Keccak 哈希函数, 在零知识证明的应用场景下, Poseidon 能够显著地减少哈希函数的约束条件进而降低证明的计算复杂度, 极大提升零知识证明系统的运行效率。Poseidon 哈希函数的计算涉及高位宽模乘和矩阵乘法运算, 需要消耗大量计算资源。为了提升哈希计算的效率, 达坦基于流水线和折叠技术提出了一种面向 FPGA 平台的 Poseidon 硬件加速器架构。
在该整体架构下, 针对高位宽模乘, 达坦科技基于 Karatsuba 乘法拆分算法实现了一种高性能蒙哥马利模乘器。针对函数中的向量—矩阵乘法计算, 达坦科技基于脉动矩阵结构提出了一种高吞吐率的硬件实现。最终, 在搭载有 Xilinx Virtex Ultrascale+ FPGA 芯片的 Varium C1100 加速卡上, 硬件加速器每秒最高能完成 0.99M 次哈希计算, 达到 AMD Ryzen 5900X 处理器 Poseidon 计算速度的两倍。
-除了打造全新的广域网共识算法,达坦科技专注于自研面向存储网络的硬件加速,以期软硬件的深度融合能提升存储的性能。目前达坦科技的硬件项目 TRIDENT,已经在 Github 上开源,欢迎参与讨论:https://github.com/datenlord/TRIDENT。
`;export{s as assetURLs,i as default,a as metadata,n as toc}; +除了打造全新的广域网共识算法,达坦科技专注于自研面向存储网络的硬件加速,以期软硬件的深度融合能提升存储的性能。目前达坦科技的硬件项目 TRIDENT,已经在 Github 上开源,欢迎参与讨论:https://github.com/datenlord/TRIDENT。
`;export{a as assetURLs,c as default,s as metadata,n as toc}; diff --git a/zh-cn/assets/index-29c0b7ce.js b/zh-cn/assets/index-ddfbefca.js similarity index 99% rename from zh-cn/assets/index-29c0b7ce.js rename to zh-cn/assets/index-ddfbefca.js index 1b821d3..c1f1943 100644 --- a/zh-cn/assets/index-29c0b7ce.js +++ b/zh-cn/assets/index-ddfbefca.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-1329fc54.png",a="/zh-cn/assets/image1-b7df4899.png",s="/zh-cn/assets/image2-a77c94e1.jpg",t=[e,a,s],r={label:"计算机体系结构 | MIT Training Q&A及小贴士",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。6.175和6.375的课程和Lab学习都有一定的难度,要求采用Bluespec语言实现RISC-V处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab环节还涉及软硬件联合开发,要求基于所实现的RISC-V处理器运行真实的RISC-V程序,并给出性能评估。",cover:"./cover.png",location:"中国香港",author:["达坦科技"],tags:["硬件加速"],date:"2022-06-11",title:"Computer Architecture l MIT Training Q&A and Tips"},i=[{label:"MIT Training Q & A",level:2},{label:"MIT Training 小贴士",level:2},{label:"Related Resources",level:2}],c=` +const e="/zh-cn/assets/cover-1329fc54.png",a="/zh-cn/assets/image1-b7df4899.png",s="/zh-cn/assets/image2-a77c94e1.jpg",t=[e,a,s],r={label:"计算机体系结构 | MIT Training Q&A及小贴士",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。6.175和6.375的课程和Lab学习都有一定的难度,要求采用Bluespec语言实现RISC-V处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab环节还涉及软硬件联合开发,要求基于所实现的RISC-V处理器运行真实的RISC-V程序,并给出性能评估。",cover:"./cover.png",location:"中国香港",author:["达坦科技"],tags:["硬件加速"],date:"2022-06-11",title:"Computer Architecture l MIT Training Q&A and Tips"},i=[{label:"MIT Training Q & A",level:2},{label:"MIT Training 小贴士",level:2},{label:"Related Resources",level:2}],n=`在 2023 年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。6.175 和 6.375 的课程和 Lab 学习都有一定的难度,要求采用 Bluespec 语言实现 RISC-V 处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab 环节还涉及软硬件联合开发,要求基于所实现的 RISC-V 处理器运行真实的 RISC-V 程序,并给出性能评估。
继 MIT6.175 和 MIT6.375 学习笔记之后,我们又整理了到目前为止,硬件设计学习社区里大家碰到的一些共同问题,希望我们的回复以及学习贴士对于想啃下这两门高难度课程,并想从事数字芯片设计的工程师或同学有所帮助。
计算机体系结构| MIT6.175 和 MIT6.375 学习笔记
达坦科技硬件设计学习社区持续开放,若想询问加入细节,请添加下方小助手微信号或邮件info@datenlord.com
-`;export{t as assetURLs,c as default,r as metadata,i as toc}; +`;export{t as assetURLs,n as default,r as metadata,i as toc}; diff --git a/zh-cn/assets/index-2530d06d.js b/zh-cn/assets/index-dfd283a0.js similarity index 95% rename from zh-cn/assets/index-2530d06d.js rename to zh-cn/assets/index-dfd283a0.js index 6fe7046..3bca56e 100644 --- a/zh-cn/assets/index-2530d06d.js +++ b/zh-cn/assets/index-dfd283a0.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/image1-50beaba8.png",n=[l],a={label:"2023年SpinalHDL应用前景探索线上研讨会----征集演讲嘉宾",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。",location:"中国香港",date:"2023-11-09",title:"Exploring the Future of SpinalHDL Applications in 2023 Online Workshop"},p=[{label:"SpinalHDL 是什么?",level:2},{label:"达坦科技是谁?",level:2},{label:"为什么达坦科技要推广 SpinalHDL?",level:2},{label:"Call For Presenter",level:2}],i=`SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。
达坦科技(DatenLord)致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。
@@ -18,4 +18,4 @@ const l="/zh-cn/assets/image1-50beaba8.png",n=[l],a={label:"2023年SpinalHDL应如您有意向社区,以及 SpinalHDL 的爱好者做分享,请于 2023 年 11 月 30 日之前,直接将姓名(或 GitHub 昵称)+ 议题摘要提交至以下 GitHub 链接:
https://github.com/SpinalHDL/SpinalHDL/discussions/1235
对开源硬件感兴趣的朋友可以添加达坦科技小助手微信加入达坦科技硬件群。
`;export{n as assetURLs,i as default,a as metadata,p as toc}; +对开源硬件感兴趣的朋友可以添加达坦科技小助手微信加入达坦科技硬件群。
`;export{a as assetURLs,i as default,n as metadata,p as toc}; diff --git a/zh-cn/assets/index-e7ccea1d.js b/zh-cn/assets/index-eb1ecfd7.js similarity index 92% rename from zh-cn/assets/index-e7ccea1d.js rename to zh-cn/assets/index-eb1ecfd7.js index 0c3885e..ab04b63 100644 --- a/zh-cn/assets/index-e7ccea1d.js +++ b/zh-cn/assets/index-eb1ecfd7.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-3674aa81.jpg",e=[t],n={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"},s=[{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"},n=[{label:"内容介绍",level:2}],a=`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,n as metadata,s as toc}; +施继成首先介绍了做Xline这个产品的动机。最初2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念。与我们都熟知的cloud computing(“云计算”)不同的是,sky computing,如其表面意义所讲,是天空中有很多的云,是解决跨云的问题。如何打破不同云之间的隔阂,或者打通和最大化利用跨云数据是当前面临的一个难题,也是我们的目标所在。如今谈论云计算时,我们不需要考虑云资源的部署,可扩展性等问题,因为云厂商已经都帮忙做了。但是,一旦跨云,则无论算力的迁移,或数据的迁移,都是摆在我们眼前要攻克的难题。达坦科技在做的就是解决“如何做跨云数据交互”的问题,我们致力于将分布式系统从数据中心范围扩散至全球范围,这样即使单个数据中心宕机,却仍不影响用户使用数据。
`;export{e as assetURLs,a as default,s as metadata,n as toc}; diff --git a/zh-cn/assets/index-1c57aced.js b/zh-cn/assets/index-ef7b41da.js similarity index 95% rename from zh-cn/assets/index-1c57aced.js rename to zh-cn/assets/index-ef7b41da.js index 457eab3..b6db4ca 100644 --- a/zh-cn/assets/index-1c57aced.js +++ b/zh-cn/assets/index-ef7b41da.js @@ -1,4 +1,4 @@ -const n="/zh-cn/assets/image1-b917417e.jpg",o="/zh-cn/assets/image1-50beaba8.png",p=[n,o],t={label:"倒计时5天:SpinalHDL应用前景探索线上研讨会",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。达坦科技采用硬件加速提升存储性能,目前采用FPGA实现存储相关场景的性能加速。SpinalHDL是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广SpinalHDL在业界的落地应用。在2023年12月10日,我们将联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。",location:"中国香港",date:"2023-12-05",title:"Countdown to 5 days: SpinalHDL application prospect exploration online seminar"},a=[{label:"Tooling and flow:",level:2},{label:"Projects :",level:2}],s=`SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。
+const n="/zh-cn/assets/image1-b917417e.jpg",o="/zh-cn/assets/image1-50beaba8.png",p=[n,o],a={label:"倒计时5天:SpinalHDL应用前景探索线上研讨会",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。达坦科技采用硬件加速提升存储性能,目前采用FPGA实现存储相关场景的性能加速。SpinalHDL是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广SpinalHDL在业界的落地应用。在2023年12月10日,我们将联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。",location:"中国香港",date:"2023-12-05",title:"Countdown to 5 days: SpinalHDL application prospect exploration online seminar"},t=[{label:"Tooling and flow:",level:2},{label:"Projects :",level:2}],s=`SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。
达坦科技采用硬件加速提升存储性能,目前采用 FPGA 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用。
在 2023 年 12 月 10 日,我们将联合 SpinalHDL 社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL 应用前景探索》 的线上研讨会,分为两个 Track。
会议链接:
https://zoom.us/j/82302372789?pwd=OYsFCbiW06KqC4U83ZKsZwefM75gJr.1
对开源硬件和敏捷开发感兴趣的朋友,可以添加达坦科技小助手的微信,加入达坦科技硬件群。
-`;export{p as assetURLs,s as default,t as metadata,a as toc}; +`;export{p as assetURLs,s as default,a as metadata,t as toc}; diff --git a/zh-cn/index.html b/zh-cn/index.html index ee95ff0..18b9d0f 100644 --- a/zh-cn/index.html +++ b/zh-cn/index.html @@ -5,7 +5,7 @@