برای بهینهسازی نحوه اجرای نرمافزار روی سختافزار، تحلیل تأخیر دستورالعملها به بررسی زمان لازم برای اجرای دستورالعملهای سطح پایین روی پردازنده میپردازد؛ این کار معمولاً برای بهینهسازی معماری یا بهینهسازی برنامهها جهت اجرا روی یک معماری خاص انجام میشود. یک محقق سختافزار به نام کریستفر دوماس (Christopher Domas) با شناسه (@xoreaxeaxeax) در گیتهاب (GitHub)، رویکرد متفاوتی را با جدول امتیازات بهینهسازی معکوس پردازنده (CPU Deoptimization) در پیش گرفته است. هدف این پروژه نه سریعتر کردن دستورالعملهای اسمبلی (Assembly)، بلکه کندتر کردن آنها به منظور اندازهگیری تکدستوری است که بیشترین تأخیر را دارد.
برنده این بخش دستور fxrstor64 است که تکمیل آن ۶۲ ثانیه یا بیش از ۱۹۸ میلیارد سیکل طول کشید. این دستور وضعیت ثبتکنندههای (Registers) مورد استفاده برای محاسبات SIMD را به یک مکان حافظه ۵۱۲ بایتی بازمیگرداند. برای دستیابی به بالاترین (کندترین) امتیاز، دوماس ابتدا از ابزار شخصی خود یعنی mmiotic برای یافتن ناحیهای با تأخیر بالا در ساختار داخلی PCIe استفاده کرد و سپس پردازنده را مجبور ساخت تا یک حالت ۵۱۲ بایتی را از MMIO (ورودی/خروجی نگاشتشده در حافظه) بارگذاری کند و عملاً تمام آن ۵۱۲ بایت را با کندترین سرعت ممکن پردازش نماید. این کار ۷۴ میلیارد سیکل یا کمی بیش از ۲۳ ثانیه طول کشید.
سپس، او با «محروم کردن ساختار در طول اجرای بارگذاری» قدم را فراتر گذاشت. او این کار را با استفاده از مجموعهای از خوانشهای ۴ بایتی از یک ثبتکننده دیگر MMIO با تأخیر بالا انجام داد که مجموعه ریشه PCIe پردازنده را تحتفشار قرار داد و حالت بازیابی را مجبور کرد تا در صف عملیات خواندن غیرضروری بماند. مرحله بعدی استفاده از دستورالعملهای AMX موجود در پردازندههای سافایر رپیدز (Sapphire Rapids) اینتل (Intel) برای xrstore64 است. ناحیه وضعیت از ۵۱۲ بایت به ۸ کیلوبایت افزایش مییابد که میتواند باعث شود دستورالعمل بیش از ۱ تریلیون سیکل معلق بماند.
جدول امتیازات x86 هماکنون روی گیتهاب (GitHub) فعال است و به نظر میرسد دوماس جدول امتیازات آرم (ARM) و ریسک-وی (RISC-V) را نیز در برنامه دارد. چند قانون برای این اجراها وجود دارد. دوماس میگوید هر تنظیماتی قابل قبول است، به شرطی که تنها اجرای یک دستورالعمل امتیازدهی شود. دستورالعملهای قابل وقفه مجاز نیستند و همچنین امتیازدهی به دستورالعملهای شبیهسازیشدهای که روی کنترلکننده اجرا میشوند، مجاز نیست. تمام زمانها بر اساس ساعت پایه پردازنده نرمالسازی شدهاند و تمام پلتفرمها بدون تغییرات سختافزاری اجرا شدهاند.
ما در اینجا با کد اسمبلی سروکار داریم، بنابراین رتبهبندی کمتر به دستورالعمل خاص مربوط میشود و بیشتر به کاری که با آن دستورالعمل انجام میدهید وابستگی دارد.
دوماس عمدتاً از دو پردازنده برای آزمایش استفاده کرد: اینتل کور i7-8559U (Intel Core i7-8559U) و ایامدی رایزن ۷ 5800H (AMD Ryzen 7 5800H) داخل رایانه Trigkey S5. با این حال، برای دستور rdmsr، او از یک تراشه VIA Eden استفاده کرد که سری از پردازندههای توکار (Embedded) از اوایل دهه ۲۰۰۰ بود. فرمان rdmsr برای خواندن یک ثبتکننده مختص مدل یا MSR استفاده میشود. به گفته دوماس، شرکت VIA «از یک ثبتکننده مستندنشده در آدرس 0x133 استفاده میکند که زمان پاسخدهی فوقالعاده بالایی دارد.» اجرای آن فرمان ۲۰۲ میکروثانیه یا ۱۶۱,۶۰۲ سیکل طول کشید.
این اولین تجربه این توسعهدهنده در آزمایشهای عجیب روی دستورالعملهای سطح پایین نیست. پروژه قبلی او به نام movfuscator یک کامپایلر زبان C است که صرفاً از فرمان mov (انتقال) استفاده میکند.
