خب رفقا، امروز میخوام براتون درباره یه موضوع جالب از دنیای کامپیوتر و معماری سختافزار حرف بزنم: ماژولار بودن SAIL توی دنیای RISC-V. شاید اسمش براتون جدید باشه، پس بذار اول یه کم توضیح بدم.
اول از همه، RISC-V رو میشناسین؟ تازهترین ترند معماری پردازندههاست که کلی از شرکتا و محققها مشغول کار کردن روش هستن. RISC-V در اصل همون دستورالعملهای پایهای هست که پردازنده باید بدونه؛ به این میگن ISA، یعنی Instruction Set Architecture یا همون معماری مجموعه دستورالعملها.
حالا چیزی که RISC-V رو خیلی خاص کرده، ماژولار بودنشه. یعنی مثل لگو هر قسمت شو میتونی بچسبونی یا جدا کنی و هرکسی میتونه به سلیقه خودش قطعات جدید اضافه کنه. اما یه مشکل اساسی وجود داره: وقتی همش پیشرفته میشه و به صورت تیکهتیکه درمیاد، این تیکهها چجوری باید کنار هم کار کنن؟! اینجا بحث compositionality پیش میاد، یعنی «قابلیت ترکیب کردن درست قطعات» (یعنی اونجوری که انگار همهشون با هم اخت شدن و قشنگ کار میکنن، نه اینکه هرکدوم ساز خودشون رو بزنن).
خب حالا برسیم به موضوع اصلی مقاله: «SAIL ماژولار» چی هست؟ SAIL یه زبان مدلسازی رسمی (یعنی زبان مخصوصی که رفتارش خیلی دقیق تعریف شده و تو معماری پردازندهها کاربرد داره) برای توصیف دستورالعملها و مدل کردن رفتار RISC-V هست. معمولاً ازش استفاده میکنن تا شبیهساز (emulator)، شبیهساز دقیقتر (simulation) و هم همچین فرایند بررسی و تایید صحت یا همون verification رو بسازن و مطمئن شن که همهچی درست کار میکنه.
توی این مقاله، نویسندهها اومدن یه کار خلاقانه کردن: خواستن ببینن آیا میشه این SAIL رو هم به صورت ماژولار طراحی کرد؟ یعنی هر تیکه (ماژول) رو بتونی راحت ورداری و بچسبونی یا عوضش کنی، اونم بدون دردسر زیاد. در واقع یه جورایی سعی کردن SAIL-RISCV golden model رو که مرجع حساب میشه، ماژولار کنن. (golden model یعنی مدل مرجع و قابل اعتماد که معمولاً همه چیز باید باهاش تطبیق داشته باشه)
یه سوال اساسی: «آیا این کار واقعاً شدنیه یا فقط یه رویاست؟» جوابش تو مقاله اینه که از نظر تئوری و عملی اصلاً پیچیده نیست و میشه مدل SAIL رو جوری اصلاح کرد که ماژولار باشه. اونا یه سری آزمایش عملی هم انجام دادن تا حرفشونو اثبات کنن.
مسئله جالبی که بررسی کردن اینه که وقتی شبیهساز ماژولار باشه، میشه ماژولها رو به صورت static binding یا dynamic binding وصله کرد. حالا این یعنی چی؟
- static binding یعنی موقع ساختن برنامه، ماژولها همون اول به هم وصل میشن و دیگه تغییر نمیکنن.
- dynamic binding یعنی وسط اجرا هم میتونی ماژول رو عوض کنی، انگار ماشینهت وسط راه قطعاتش رو شل و سفت میکنی!
نتیجه؟ هر دو حالت (چه static چه dynamic) از لحاظ رفتاری همون عملکرد شبیهساز یکپارچهی قدیمی رو داشتن. (شبیهساز monolithic، یعنی همون مدل یک تیکه و غیرقابل تغییر که همهچیز توش باید از اول تا آخر ثابت بمونه)
این برای کسایی که دوست دارن RISC-V رو شخصیسازی کنن عالیه، چون میتونن کلی ماژول جدا برای کاربردهای مختلف بسازن بدون اینکه همهش رو دوباره از صفر بنویسن یا مشکل هماهنگی داشته باشن.
در کل، این تحقیق نشون داده که آرزوی SAIL ماژولار فقط یه رویا نیست و کاملاً میشه بهش رسید؛ فقط کافیه کمی وقت بذارن و توسعهدهندهها همکاری کنن تا ابزارهای استاندارد و کاربردی و قابل وصله درست کنن. این یعنی قراره انعطاف تو توسعه پردازندههای آینده فوقالعاده بیشتر بشه!
پس اگه اهل معماری سختافزاری و طراحی سیستمهای پیچیده هستین، یادتون باشه آینده داره ماژولارتر و خلاقانهتر میشه 🙂
منبع: +