پرش به محتوای اصلی
پرش به محتوای مقاله

چطور Quicksort جدید گوگل سرعت std::sort را به چالش کشید؟

·۲۵ شهریور ۱۴۰۵۳ دقیقه مطالعه۲ بازدید
مرتب‌سازی سریع برداری و قابل‌حمل با کارایی بالا
مرتب‌سازی سریع برداری و قابل‌حمل با کارایی بالا
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

دستیابی به توان عملیاتی ۱ گیگابایت بر ثانیه در یک تک‌هسته CPU برای مرتب‌سازی، در حالی که کد به‌طور خودکار بین معماری‌های مختلف (x86 و Arm) جابه‌جا می‌شود و نیازی به کدنویسی دستی برای هر پردازنده نیست.

اگر امروز برای پردازش حجم عظیمی از داده‌ها روی CPU تکیه می‌کنید، گلوگاه اصلی شما احتمالاً عملیات مرتب‌سازی است. گوگل با معرفی یک پیاده‌سازی جدید، این سد عملکردی را با جهشی ۱۹ برابری در برابر std::sort کتابخانه استاندارد C++ شکست. این کد که در تاریخ ۱۶ سپتامبر ۲۰۲۶ منتشر شد، با بهره‌گیری از SIMD (یک دستورالعمل، چندین داده) به سرعت‌های رکوردشکن دست یافته است. این فناوری به پردازنده اجازه می‌دهد تا چندین عنصر از یک آرایه عددی را به‌طور هم‌زمان پردازش کند.

مرتب‌سازی یکی از بلوک‌های سازنده و بنیادی برای پرس‌وجوهای SQL است. این موضوع به‌ویژه در پایگاه‌های داده ستونی (Columnar Databases) مدرن که مقادیر را به‌صورت متوالی ذخیره می‌کنند، اهمیت حیاتی دارد. در این ساختار، فیلتر کردن یا مرتب‌سازی داده‌ها بسیار سریع‌تر از ذخیره‌سازی سنتی مبتنی بر سطر است؛ جایی که تمام فیلدهای یک رکورد پیش از شروع رکورد بعدی در کنار هم ذخیره می‌شوند.

اگرچه حوزه مرتب‌سازی یک زمینه بالغ است، اما اکثر کتابخانه‌های استاندارد از دستورالعمل‌های برداری (Vector Instructions) موجود در CPUهای مدرن به‌طور کامل استفاده نمی‌کنند. SIMD به CPU اجازه می‌دهد تا روی چندین عنصر مستقل در یک دستورالعمل واحد عملیات انجام دهد. برای مثال، با استفاده از AVX-512 می‌توان ۱۶ مقدار float32 یا با استفاده از Arm NEON چهار مقدار را به‌طور هم‌زمان پردازش کرد. این شکاف تکنولوژیک، فرصتی عظیم برای افزایش عملکرد در برنامه‌هایی با حجم داده بالا ایجاد کرده است.

طبق گزارش وبلاگ مهندسی گوگل، این افزایش سرعت از بهینه‌سازی مرحله افراز (Partitioning) در الگوریتم Quicksort حاصل شده است. تیم توسعه‌دهنده از کتابخانه Highway برای پیاده‌سازی توابع SIMD قابل‌حمل در شش مجموعه دستورالعمل مختلف استفاده کرد. این رویکرد باعث شد تا نیاز به بازنویسی حدود ۳۰۰۰ خط کد C++ برای هر پلتفرم حذف شود.

بنچمارک‌های فنی

  • پشتیبانی سخت‌افزاری: این کد روی معماری‌های Arm NEON، Arm SVE، RISC-V V و x86 AVX-2/AVX-512 قابل اجرا است.
  • نرخ انتقال داده (Apple M1): برای مرتب‌سازی یک میلیون عدد، خروجی با سرعت‌های ۴۹۹ مگابایت بر ثانیه (۳۲ بیتی)، ۴۷۱ مگابایت بر ثانیه (۶۴ بیتی) و ۴۶۶ مگابایت بر ثانیه (۱۲۸ بیتی) تولید می‌شود.
  • نرخ انتقال داده (3 GHz Skylake): با استفاده از AVX-512، سرعت برای اعداد ۳۲ بیتی به ۱۱۲۳ مگابایت بر ثانیه، برای ۶۴ بیتی به ۱۱۱۹ مگابایت بر ثانیه و برای ۱۲۸ بیتی به ۱۱۲۰ مگابایت بر ثانیه می‌رسد.
  • مقایسه: روی همین سخت‌افزار، کتابخانه استاندارد بسته به نوع عدد، تنها بین ۵۸ تا ۱۲۸ مگابایت بر ثانیه سرعت دارد.
  • عملکرد AVX2: این پیاده‌سازی به سرعت ۷۹۸ مگابایت بر ثانیه می‌رسد که از پیشرفته‌ترین مرتب‌ساز بهینه‌شده برای AVX2 (با سرعت ۶۹۹ مگابایت بر ثانیه) سریع‌تر است.
  • تطبیق‌پذیری: برخلاف مرتب‌سازهای پیشین که محدود به اعداد صحیح ۳۲ بیتی بودند، این نسخه از طیف کامل ورودی‌های ۱۶ بیتی تا ۱۲۸ بیتی پشتیبانی می‌کند.

نمودار مقایسه عملکرد مرتب‌سازی سریع برداری‌شده با پیاده‌سازی‌های استاندارد در معماری‌های مختلف پردازنده

جزئیات پیاده‌سازی

  • منطق Quicksort: این الگوریتم آرایه‌ها را بر اساس یک مقدار محوری (Pivot) که در حالت ایده‌آل میانه است، به زیرآرایه‌ها تقسیم می‌کند و این فرایند را به‌صورت بازگشتی تکرار می‌کند تا زمانی که زیرآرایه‌ها به ۲۵۶ عنصر یا کمتر برسند.
  • مورد ۲۵۶ عنصر: برای این آرایه‌های کوچک، یک روش مرتب‌سازی ویژه به کار گرفته شده تا کارایی به حداکثر برسد.
  • Compress-Store: مکانیسم اصلی بر پایه دستورالعمل "فشرده‌سازی-ذخیره" است. این قابلیت به CPU اجازه می‌دهد تنها عناصری را که شرط خاصی دارند (مثلاً کوچک‌تر از مقدار محوری باشند) به‌صورت متوالی در حافظه ذخیره کند.
  • شبیه‌سازی: برای معماری‌هایی که فاقد این دستورالعمل خاص هستند (مانند AVX2)، این پیاده‌سازی رفتار مذکور را با استفاده از دستورالعمل‌های جایگشت (Permute) شبیه‌سازی می‌کند.
  • بهینه‌سازی خودکار: کتابخانه Highway در زمان اجرا دستورالعمل‌های موجود در CPU را بررسی کرده و بهترین گزینه را انتخاب می‌کند. مشخص شده است که AVX-512 بدون هیچ تلاش اضافی از سوی توسعه‌دهنده، ۱.۴ تا ۱.۶ برابر سریع‌تر از AVX2 است.

نمودار مقایسه عملکرد مرتب‌سازی سریع برداری‌شده با پیاده‌سازی‌های استاندارد در پردازنده‌های مختلف

این تغییر، فرض بنیادی مبنی بر اینکه مرتب‌سازی یک عملیات بسیار هزینه‌بر برای CPU است را تغییر می‌دهد. با رسیدن به آستانه ۱ گیگابایت بر ثانیه در یک هسته واحد، توسعه‌دهندگان اکنون می‌توانند فیلترهای پیچیده‌تر و مرتب‌سازی‌های بلادرنگ را در موتورهای پایگاه داده پیاده کنند بدون اینکه با دیوار محدودیت عملکرد مواجه شوند.

برای یک توسعه‌دهنده معمولی، این به معنای آن است که پردازش داده با کارایی بالا دیگر نیازمند نوشتن کدهای اسمبلی خاص برای هر معماری نیست. استفاده از Highway تضمین می‌کند که همان کد C++ به‌طور خودکار سریع‌ترین مجموعه دستورالعمل موجود در ماشین کاربر را انتخاب کند.

توسعه‌دهندگان اکنون می‌توانند این کد را که تحت لایسنس Apache2 در گیت‌هاب منتشر شده است، برای شتاب‌بخشی به خطوط لوله داده (Data Pipelines) خود ادغام کنند. گام بعدی برای جامعه برنامه‌نویسان، بررسی این موضوع خواهد بود که چگونه این نرخ انتقال داده، انواع جدیدی از پرس‌وجوهای تحلیلی بلادرنگ را در ذخیره‌سازهای ستونی ممکن می‌سازد.

چرا این موضوع مهم است؟

این دستاورد با تکیه بر اعتبار مهندسی گوگل، استاندارد جدیدی برای پردازش داده‌های حجیم در سطح سیستم تعریف می‌کند. کاهش شدید زمان مرتب‌سازی مستقیماً باعث کاهش تأخیر در پاسخ‌دهی پایگاه‌داده‌های ستونی و افزایش بهره‌وری سرورها می‌شود.

تأثیر برای ایران

این ابزار به‌دلیل متن‌باز بودن و عدم نیاز به API، برای توسعه‌دهندگان ایرانی که روی سیستم‌های پردازش داده و پایگاه‌داده‌های داخلی کار می‌کنند، کاملاً در دسترس و کاربردی است.

·نگاه ما
تحریریه دات‌هوش

جایگزینی استانداردهای قدیمی با پیاده‌سازی‌های برداری نشان می‌دهد که ما هنوز در استخراج توان واقعی سخت‌افزارهای موجود هستیم. این جهش عملکردی احتمالاً باعث می‌شود بسیاری از عملیات‌هایی که پیش‌تر به GPU سپرده می‌شدند، دوباره به CPU بازگردند، زیرا هزینه انتقال داده به GPU اکنون بیشتر از زمان اجرای مرتب‌سازی بهینه روی CPU است.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.