مقدمه

برخورد پراکندگی به‌عنوان یک ویژگی به‌جای جزئیات پیاده‌سازی (خست‌کننده) به اسپارفایر 1 کامپایلر اجازه می‌دهد تا کد پراکنده را به‌طور خودکار تولید کند. این مفهوم برای جبر خطی توسط [Bik96] در MT1 پیشگام شد و توسط [Kjolstad17,Kjolstad20] در پروژه کامپایلر جبر تانسور پراکنده (TACO) به جبر تانسوری رسمیت یافت.

گویش SparseTensor از تمام ویژگی‌ها، انواع، عملیات و پاس‌هایی پشتیبانی می‌کند که برای ایجاد شهروندان درجه یک انواع تانسور پراکنده در زیرساخت کامپایلر MLIR لازم است. این گویش پلی بین عملیات سطح بالا در انواع تانسور پراکنده و عملیات سطح پایین تر در طرح های ذخیره سازی پراکنده واقعی متشکل از موقعیت ها، مختصات و مقادیر است. پشتیبانی سطح پایین ممکن است شامل کدهای کاملاً تولید شده باشد یا ممکن است با استفاده از یک کتابخانه پشتیبانی زمان اجرا پراکنده ارائه شود.

اجرای MLIR [Biketal22] از نزدیک از "نظریه تکرار پراکنده" پیروی می کند که پایه و اساس TACO را تشکیل می دهد. کامپایلر یک قانون بازنویسی برای هر عبارت تانسور در گویش Linalg دارد (نماد شاخص تانسور MLIR): پراکندگی هر سطح از یک تانسور با انواع سطح (مثلاً متراکم، فشرده، تک تن) و مشخصاتی از ترتیب در سطوح (برای بحث های عمیق و بسط های احتمالی به این نوع سطوح به [Chou18] مراجعه کنید). برای هر عبارت تانسوری در ورودی، کامپایلر ابتدا یک نمودار تکرار مرتب شده توپولوژیکی می سازد که ترتیب مختصات را با توجه به سطوح هر تانسور منعکس می کند. این تضمین می‌کند که همه تانسورها به ترتیب سطح طبیعی بازدید می‌شوند. در مرحله بعد، شبکه های تکرار برای هر شاخص به ترتیب توپولوژیکی ساخته می شوند. هر نقطه تکرار-شبکه از پیوند مختصات تانسور و یک بیان (فرعی) تانسور تشکیل شده است که باید برای آن پیوند ارزیابی شود. در داخل شبکه، نقاط تکرار بر اساس روشی که مختصات به پایان می رسد، مرتب می شوند. به این ترتیب، این شبکه‌های تکرار، تولید کد پراکنده واقعی را هدایت می‌کنند، یک نگاشت نسبتاً ساده یک به یک از شبکه‌های تکرار به ترکیبی از حلقه‌های for، حلقه‌های while، و اگر-گزاره‌ها. خروجی‌های تانسوری پراکنده که بدون مقدار اولیه به‌وجود می‌آیند، با درج‌های مستقیم، در صورتی که همه حلقه‌های موازی بیرونی‌ترین باشند، یا درج‌هایی که به‌طور غیرمستقیم از طریق یک گسترش الگوی دسترسی یک بعدی (معروف به فضای کاری) می‌گذرند، در صورت امکان [Gustavson72, Bik96, Kjolstad19] انجام می‌شوند.

  • [Bik96] Aart JC Bik. پشتیبانی کامپایلر برای محاسبات ماتریس پراکنده. پایان نامه دکتری، دانشگاه لیدن، می 1996.

  • [Biketal22] Aart JC Bik، Penporn Koanantakool، Tatiana Shpeisman، Nicolas Vasilache، Bixia Zheng، و Fredrik Kulstad. پشتیبانی کامپایلر برای محاسبات تانسور پراکنده در MLIR. ACM Transactions on Architecture and Code Optimization، ژوئن، 2022. ببینید: https://dl.acm.org/doi/10.1145/3544559

  • [Chou18] استفان چو، فردریک برگ کیولستاد، و سامان آماراسینگه. انتزاع قالب برای کامپایلرهای جبر تانسور پراکنده. مجموعه مقالات ACM در مورد زبان های برنامه نویسی، اکتبر 2018.

  • [Chou20] استفان چو، فردریک برگ کیولستاد، و سامان آماراسینگه. تولید خودکار روال های تبدیل فرمت تانسور پراکنده کارآمد. مجموعه مقالات چهل و یکمین کنفرانس ACM SIGPLAN در مورد طراحی و پیاده سازی زبان برنامه نویسی، ژوئن، 2020.

  • [گوستاوسون72] فرد جی. گوستاوسون. چند تکنیک اساسی برای حل سیستم های پراکنده معادلات خطی. در ماتریس های پراکنده و کاربردهای آنها، صفحات 41-52. چاپ پلنوم، نیویورک، 1972.

  • [Kjolstad17] فردریک برگ کیولستاد، شعیب اشرف کمیل، استفان چو، دیوید لوگاتو، و سامان آماراسینگه. کامپایلر جبر تنسور. مجموعه مقالات ACM در مورد زبان های برنامه نویسی، اکتبر 2017.

  • [Kjolstad19] فردریک برگ کیولستاد، پیتر آرنس، شعیب اشرف کمیل، و سامان آماراسینگه. مجموعه جبر تنسور با فضاهای کاری، مجموعه مقالات سمپوزیوم بین المللی IEEE/ACM در زمینه تولید و بهینه سازی کد، 2019.

  • [Kjolstad20] فردریک برگ کیولستاد. مجموعه جبر تانسور پراکنده. پایان نامه دکتری، MIT، فوریه، 2020.

آیا مایل به مشارکت هستید؟ در اینجا چند مسئله اول خوب وجود دارد.


  1. لطفاً توجه داشته باشید که ما اکنون عبارت 'sparsifier' را به اصطلاح رایج 'sparse compiler' ترجیح می دهیم تا به چنین پاسی اشاره کنیم تا مشخص شود که sparsifier pass یک کامپایلر جداگانه نیست، بلکه باید بخشی جدایی ناپذیر از هر کامپایلر باشد. خط لوله ای که با زیرساخت کامپایلر MLIR ساخته شده است.