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