HPVM 2.0، کامپایلر برای CPU، GPU، FPGA و شتاب دهنده های سخت افزار منتشر شد

پروژه LLVM انتشار کامپایلر HPVM 2.0 (ماشین مجازی موازی ناهمگن) را با هدف ساده سازی برنامه نویسی برای سیستم های ناهمگن و ارائه ابزارهایی برای تولید کد برای CPU ها، GPU ها، FPGA ها و شتاب دهنده های سخت افزاری خاص دامنه معرفی کرد. کد پروژه تحت مجوز آپاچی 2.0 توزیع شده است.

برنامه نویسی برای سیستم های موازی ناهمگن به دلیل حضور در یک سیستم از اجزایی که از مدل های مختلف برای دستیابی به موازی سازی (هسته های CPU، دستورالعمل های برداری، GPU و غیره)، مجموعه های مختلف دستورالعمل ها و سلسله مراتب حافظه متفاوت استفاده می کنند، پیچیده است. هر سیستمی از ترکیب خود از این اجزا استفاده می کند. ایده اصلی پروژه HPVM استفاده در کامپایل یک نمایش یکپارچه از برنامه های موازی است که می تواند برای انواع مختلفی از سخت افزارهایی که از محاسبات موازی پشتیبانی می کنند، از جمله پردازنده های گرافیکی، دستورالعمل های برداری، پردازنده های چند هسته ای، FPGA و انواع تخصصی استفاده شود. تراشه های شتاب دهنده

بر خلاف سایر سیستم ها، HPVM سعی کرد سه امکان را برای سازماندهی محاسبات ناهمگن ترکیب کند - یک نمایش متوسط ​​(IR)، یک معماری مجموعه دستورالعمل مجازی (V-ISA)، و زمان بندی زمان اجرا، مستقل از زبان برنامه نویسی و تجهیزات:

  • نمایش میانی HPVM نمایش میانی دستورالعمل های LLVM را با استفاده از نمودار جریان داده سلسله مراتبی برای به تصویر کشیدن موازی در سطح وظایف، داده ها و خطوط لوله محاسباتی گسترش می دهد. نمایش میانی HPVM همچنین شامل دستورالعمل های برداری و حافظه مشترک است. هدف اصلی استفاده از یک نمایش میانی، تولید کد کارآمد و بهینه‌سازی برای سیستم‌های ناهمگن است.
  • Virtual Instruction Set Architecture (V-ISA) سخت‌افزار سطح پایین را انتزاعی می‌کند و اشکال مختلف معماری‌های موازی و حافظه را تنها با استفاده از مدل همزمانی زیربنایی، نمودار جریان داده، متحد می‌کند. V-ISA امکان دستیابی به قابلیت حمل بین انواع مختلف سخت افزار را برای محاسبات موازی فراهم می کند و باعث می شود هنگام استفاده از عناصر مختلف سیستم های ناهمگن، عملکرد را از دست ندهید. همچنین می‌توان از ISA مجازی برای ارائه کدهای اجرایی برنامه عمومی استفاده کرد که می‌تواند روی CPU، GPU، FPGA و شتاب‌دهنده‌های مختلف اجرا شود.
  • سیاست‌های زمان‌بندی فرآیند محاسباتی انعطاف‌پذیر در زمان اجرا اعمال می‌شوند و هم بر اساس اطلاعات مربوط به برنامه (ساختار نمودار) و هم با کامپایل گره‌های برنامه جداگانه برای اجرا در هر یک از دستگاه‌های محاسباتی هدف موجود در سیستم اجرا می‌شوند.

ژنراتورهای کد توسعه یافته توسط این پروژه قادر به ترجمه گره های برنامه تعریف شده با استفاده از ISA مجازی برای اجرا با استفاده از پردازنده های گرافیکی NVIDIA (cuDNN و OpenCL)، دستورالعمل های برداری Intel AVX، FPGA ها و پردازنده های x86 چند هسته ای هستند. خاطرنشان می شود که عملکرد نتایج مترجم های HPVM با کد OpenCL دستی برای GPU ها و دستگاه های محاسباتی برداری قابل مقایسه است.

نوآوری های اصلی HPVM 2.0:

  • مقدمه زبان Hetero-C++ پیشنهاد شده است که موازی سازی کد برنامه C/C++ را برای کامپایل در HPVM ساده می کند. Hetero-C++ پسوندهایی را برای موازی سازی در سطح داده و وظایف سلسله مراتبی تعریف می کند که به نمودارهای نخ HPVM نگاشت می شوند.
  • یک باطن FPGA برای پشتیبانی از اجرای کد در FPGA اینتل اضافه شده است. برای سازماندهی اجرا، از Intel FPGA SDK برای OpenCL استفاده می شود.
  • چارچوب DSE (Design Space Exploration) اضافه شده است که شامل بهینه سازی کامپایلر و مکانیسم های تشخیص تنگنا برای تنظیم خودکار برنامه ها برای یک پلت فرم سخت افزاری معین است. این چارچوب شامل یک مدل عملکرد آماده برای FPGA از اینتل است و به شما امکان می دهد پردازنده های خود را برای بهینه سازی برای هر دستگاهی که توسط HPVM پشتیبانی می شود متصل کنید. بهینه سازی ها را می توان هم در سطح نمودار جریان داده HPVM و هم در سطح LLVM اعمال کرد.
  • اجزای LLVM به نسخه 13.0 به روز شد.
  • کد سازماندهی مجدد شده است تا پیمایش در پایگاه کد، کتابخانه ها و ابزارهای کمکی آسانتر شود.
  • زیرساخت آزمایش بهبود یافته است، آزمایشات جدیدی برای اجزای مختلف HPVM اضافه شده است.

منبع: opennet.ru

اضافه کردن نظر