تصور کنید یک برنامهنویس سیستم در ساعت ۳ صبح با یک خطای Segfault مواجه شود، چون اشارهگری از حافظه GPU به CPU نشت کرده است؛ در Vx این کابوس هرگز اتفاق نمیافتد. در این زبان، تلاش یک رشته میزبان برای ارجاع به یک اشارهگر دستگاه منجر به خطای کامپایل میشود، نه یک کرش در نیمهشب. این زبان برنامهنویسی که در ۳ اکتبر ۲۰۲۶ منتشر شد، پیچیدگیهای محاسبات ناهمگن (Heterogeneous Computing) را از زمان اجرا به سیستم تایپ منتقل کرده است.
فلسفه ناهمگنی
بسیاری از زبانهای مدرن با شتابدهندهها مثل یک زیرساخت مبهم برخورد میکنند که در زمان اجرا تصمیم میگیرند دادهها چگونه به تراشه ارسال شوند. اما Vx این موضوع را به عنوان یک معناشناسی (Semantics) میبیند. در این مدل، مکان قرارگیری دادهها بخشی از «تایپ» آنهاست.
دنیایی را تصور کنید که در آن کد شما دقیقاً میداند دادهها کجا قرار دارند—چه در DRAM میزبان و چه در حافظه با پهنایباند بالای (HBM) یک NPU—حتی پیش از آنکه برنامه اجرا شود. تانسوری که در حافظه HBM یک NPU پین شده است، تایپی کاملاً متفاوت از تانسوری در DRAM میزبان دارد. برای جابهجایی بین این دو، باید صراحتاً از دستور transfer() استفاده کنید. این رویکرد برای مقابله با چالشهای گلوگاه حافظه طراحی شده است که در مدلهای زبانی بزرگ باعث اتلاف شدید توان پردازشی GPU میشود.
در معماری حافظه یکپارچه اپل، این انتقال در هنگام کامپایل تقریباً به هیچ تبدیل میشود. با این حال، این دستور همچنان در سورسکد نوشته میشود؛ زیرا مکانیابی دادهها (Data Locality) باید با خواندن کد قابل اثبات باشد، نه از طریق پروفایل کردن یک فایل باینری. بهینهسازیهای مشابه در سطح سختافزار، افزایش چشمگیر سرعت استنتاج در مکبوکهای پرو را ممکن ساخته است.
ایمنی و بررسی تایپ
طبق مستندات vxlang.org، این زبان چندین مکانیسم ایمنی سختگیرانه را برای حذف باگهای سختافزاری پیاده کرده است؛ باگهایی که معمولاً به صورت کراشهای زمان اجرا، فساد خاموش دادهها (Silent Corruption) یا خطاهای کمبود حافظه در گام ۱۲۰۰ آموزش مدل ظاهر میشوند:
- تایپینگ فضای آدرس (Address-space typing): مانع از نشت اشارهگرهای دستگاه به عبارات میزبان یا ارجاع به یک اشارهگر دستگاه از طریق میزبان میشود.
- پذیرش ظرفیت (Capacity admission): پیش از ساخت باینری، بررسی میکند که آیا یک مجموعه کاری (Working set) با فضای حافظه هدف در یک فایل ماشین تعریفشده سازگار است یا خیر.
- قراردادهای درز (Seam contracts): با استفاده از یک اثباتگر SMT تضمین میکند که انتقالهای ناهمگام پیش از خواندن یک بافر، برای سیستم قابل مشاهده باشند.
- قابلیت دسترسی توپولوژی (Topology reachability): انتقال بین فضاهای حافظهای که هیچ مسیر سختافزاری تعریفشدهای ندارند را مسدود میکند.
- تایپهای خطی (Linear types): با استفاده از یک Borrow Checker مجهز به Variance و ردیابی منطقه (Region tracking)، از استفاده از بافرهای مصرفشده پس از انتقال (Use-after-move) جلوگیری میکند.
- مشتقگیری خودکار (Autodiff): از مشتقگیری در مناطقی که Adjoint آنها تعریف نشده است، جلوگیری میکند.
مدلهای ماشین تعریفشده
برخلاف کامپایلرهایی که مدلهای هزینه را بهصورت سختافزاری (Hard-code) تعریف میکنند، Vx یک فایل ماشین را میخواند که اتصالات واقعی و سلسلهمراتب حافظه سختافزار خاص را توصیف میکند. در مخزن پروژه، فایلهای تأییدشده برای Nvidia H100، H200، B200، A100، AMD MI300X و Apple M4 و همچنین نودهای چند-GPU در دسترس هستند.
این فایلها برای جلوگیری از خطاهای اعشاری، از تبدیلهای عدد صحیح دقیق برای واحدها استفاده میکنند: پیشوندهای SI به صورت دهدهی (GB = 10⁹) و پیشوندهای IEC به صورت باینری (GiB = 2³⁰) هستند. برای مثال، فایل H100 صراحتاً ظرفیت HBM را ۸۰ گیبیبایت (GiB) با پهنایباند ۳.۳۵ ترابایت بر ثانیه تعریف میکند، در حالی که حافظه L2 با ظرفیت ۵۰ مبیبایت (MiB) و پهنایباند ۱۲ ترابایت بر ثانیه لیست شده است.
خط لوله کامپایل
در لایه بکاند، این زبان از یک فرانتاند موازی دادهمحور استفاده میکند که در آن هر نماد و تایپ اسمی (Nominal type) یک شناسه ۲۵۶ بیتی تخت است. این ساختار از طریق Boxing اجباری برای تایپهای بازگشتی (Recursive types)، ماژولها را از هم جدا میکند و اجازه میدهد خط لوله کامپایل بدون تداخل قفلها (Lock contention) یا نیاز به موتور پرسوجو (Query engine)، روی چندین هسته اجرا شود.
سیستم خروجیهای MLIR کاملاً یکسانی (Byte-identical) تولید میکند، چه بهصورت سریال ساخته شود و چه موازی. این موضوع در مجموعه تستها با تعداد رشتههای مختلف و پروسههای تازه بررسی میشود تا ثبات Seed هش تضمین گردد.
بکاندهای پشتیبانیشده عبارتاند از:
- CPU (x86-64, arm64): مسیر MLIR $ \rightarrow $ LLVM IR $ \rightarrow $ native (به صورت AOT یا JIT).
- NVIDIA GPU: مسیر MLIR $ \rightarrow $ NVVM $ \rightarrow $ PTX $ \rightarrow $ SASS.
- Apple AMX / ANE: اعزام دستورات CoreML از طریق پلاگین.
- توزیعشده: مناطق راه دور مبتنی بر مانیفست روی یک پروتکل شبکه (Wire protocol).
تولیدکنندگان سختافزار میتوانند کامپایلر را از طریق پلاگینهای Pass در MLIR گسترش دهند، به جای اینکه هسته اصلی را تغییر دهند.
سبکسنگینها و موارد استفاده
این رویکرد با انتقال باگهای گرانقیمت به مرحله کامپایل، شیوه مهندسی سیستمهای هوش مصنوعی را تغییر میدهد. با این حال، این سختگیری به قیمت کاهش انعطافپذیری تمام شده است. در حالی که کاربران PyTorch اغلب معماریها را در میان حلقه تغییر میدهند یا بر اساس شکل تانسورها شاخه میزنند، Vx دارای مناطق استاتیک و پیشکامپایل (AOT) است.
Vx زبان مناسبی برای پروژههایی است که باید روی ۱۰ نوع سیلیکون مختلف، هم سریع و هم دقیق باشند. اما برای ایدههایی که هنوز در حال شکلگیری و آزمایش هستند، زبان مناسبی نیست.
توسعهدهندگان در حال حاضر میتوانند Vx را روی macOS (Apple Silicon) و Linux x86_64 از طریق دستور curl -fsSL https://vxlang.org/install.sh | sh نصب کنند.
گام بعدی شما
- اگر روی سیستمهای توزیعشده یا شتابدهندههای مختلف کار میکنید، نصب Vx را روی لینوکس یا مک از طریق دستور
curlامتحان کنید. - مستندات
vxlang.orgرا برای درک نحوه تعریف فایلهای ماشین (Machine Files) مطالعه کنید. - بررسی کنید که آیا محدودیتهای تایپ خطی در Vx میتواند جایگزین مدیریت دستی حافظه در پروژههای C++ شما شود یا خیر.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو