در حالی که مهندسان پردازنده سالهاست تلاش میکنند هر دستور CPU را سریعتر اجرا کنند، یک پژوهشگر سختافزار مسیر کاملاً متفاوتی را در پیش گرفته است تا کندترین دستورالعمل ممکن در معماری x86 را پیدا کند. نتیجه این تلاشها پیدا کردن دستوری است که تحت شرایط خاص برای اجرا به ۱۹۸ میلیارد سیکل پردازنده، معادل حدود ۶۲ ثانیه زمان نیاز دارد.
کریستوفر دوماس، پژوهشگر حوزه سختافزار، پروژهای با عنوان CPU Deoptimization راهاندازی کرده و به جای بهینهسازی کد اسمبلی، به دنبال بدترین شرایط ممکن برای اجرای دستورهای CPU است. نتیجه این آزمایشها نیز در قالب یک «تالار شرم» برای کندترین دستورهای x86 در گیتهاب منتشر شده است.
چگونه یک دستور CPU را ۶۲ ثانیه معطل کرد؟
رکورد فعلی به دستور fxrstor64 تعلق دارد. این دستور وظیفه دارد وضعیت ثباتهای مورد استفاده در محاسبات SIMD را از یک ناحیه حافظه بازیابی کند. در حالت عادی چنین دستوری قرار نیست حتی نزدیک به چند ثانیه زمان ببرد، اما دوماس عمداً شرایطی ایجاد کرده که اجرای آن به یکی از بدترین سناریوهای ممکن تبدیل شود.
او ابتدا با استفاده از ابزار اختصاصی خود، ناحیهای با تأخیر بسیار بالا را در مسیر داخلی PCIe پیدا کرد. سپس کاری کرد که CPU وضعیت ۵۱۲ بایتی موردنیاز fxrstor64 را از طریق MMIO یا Memory-Mapped I/O دریافت کند که در این شرایط باعث شد دسترسی به داده بسیار کندتر از حافظه معمولی باشد.
همین مرحله بهتنهایی حدود ۷۴ میلیارد سیکل پردازنده یا بیش از ۲۳ ثانیه زمان گرفت.
اما این پژوهشگر به همینجا بسنده نکرد. او برای بدتر کردن اوضاع، در حالی که این عملیات در حال انجام بود، با ارسال مجموعهای از خوانشهای ۴ بایتی از یک رجیستر MMIO پرتاخیر دیگر، مسیر ارتباطی را عمداً تحت فشار قرار داد. در نتیجه عملیات اصلی پشت صفی از درخواستهای اضافی گیر کرد و زمان اجرای یک دستور واحد به ۱۹۸,۰۰۲,۴۹۸,۲۳۶ سیکل رسید.
به زبان ساده، این آزمایش نشان نمیدهد که fxrstor64 در استفاده عادی ۶۲ ثانیه زمان میبرد؛ بلکه نشان میدهد اگر سختافزار و مسیرهای دسترسی به داده را عمداً در بدترین وضعیت ممکن قرار دهیم، یک دستور واحد تا چه اندازه میتواند در انتظار بماند.
رکورد عجیبتر هم در راه است؟
دوماس حتی سناریوی افراطیتری را نیز بررسی کرده است. پردازندههای Intel Sapphire Rapids از دستورهای AMX پشتیبانی میکنند که حجم وضعیت مورد پردازش را نسبت به ۵۱۲ بایت به حدود ۸ کیلوبایت افزایش میدهند.
اگر همین روش برای دستور xrstore64 و این حجم بزرگتر از داده به کار گرفته شود، این پژوهشگر معتقد است زمان اجرای آن میتواند از یک تریلیون سیکل پردازنده نیز عبور کند.

البته این اعداد را نباید با عملکرد واقعی پردازندهها اشتباه گرفت. قوانین پروژه اجازه میدهد پژوهشگر از هر سختافزاری استفاده کند، اما در محاسبه رکورد فقط زمان اجرای خود یک دستور لحاظ میشود. دستورهای قابل قطع نیز از رقابت کنار گذاشته شدهاند و زمانها بر اساس فرکانس پایه CPU نرمالسازی میشوند.
دوماس برای آزمایشهای خود عمدتاً از Intel Core i7-8559U و AMD Ryzen 7 5800H استفاده کرده است. البته برای آزمایش دستور rdmsr سراغ یک پردازنده قدیمی VIA Eden نیز رفته؛ چراکه این تراشه یک رجیستر مستندنشده در آدرس 0x133 دارد که ظاهراً دسترسی بسیار کندی ایجاد میکند. این دستور در آزمایش او حدود ۲۰۲ میکروثانیه یا ۱۶۱٬۶۰۲ سیکل زمان برد.
پروژه فعلاً روی معماری x86 متمرکز است، اما ظاهراً دوماس قصد دارد در ادامه سراغ ARM و RISC-V نیز برود. بنابراین احتمالاً این «تالار شرم» برای کندترین دستورهای پردازندهها هنوز رکوردهای عجیبتری در پیش دارد.
نکته جالب اینجاست که این اولین آزمایش غیرمعمول دوماس در سطح پایین نرمافزار و سختافزار نیست. او پیشتر پروژه معروف Movfuscator را ساخته بود که برنامههای نوشته شده به زبات C را تنها با استفاده از دستور MOV به کد اسمبلی تبدیل میکند.
در واقع این پروژه بیشتر از آنکه درباره ضعف یک دستور خاص باشد، یک آزمایش مهندسی جذاب است که نشان میدهد وقتی CPU، حافظه و مسیرهای ارتباطی آن را عمداً در بدترین شرایط ممکن قرار دهید، مفهوم «یک دستورالعمل» میتواند فاصله زیادی با تصور معمول ما از سرعت پردازنده داشته باشد.













نظر خود را اضافه کنید.
برای ارسال نظر وارد شوید
ارسال نظر بدون عضویت در سایت