دسترسي هوشمندانه به حافظه
از زمان «پنتيوم پرو»، پردازندههاي x86 توانايي اجراي دستورالعملها، خارج از نوبت را پيدا كردند. با اين حال به طور ميانگين يك سوم دستورالعملها به سادگي قابليت اجراي خارج از نوبت را ندارند، اين دستورالعملها همگي از نوع «بارگذاري» هستند، جلو انداختن دستورالعملهاي «بارگذاري» افزايش عملكرد چشمگيري نسبت به بارگذاري دادهها در زماني كه به آنها نياز داريد خواهد داشت. با اين كار تاخيرهاي متعدد حافظه كاشه سطح 1 و سطح 2 از چشمان پردازنده پهنان خواهند ماند.
تصور اين افزايش كارايي بسيار ساده است، فرض كنيد يك دستورالعمل ALU در اختيار داريد كه نياز به بخش مشخصي از دادههاي ذخيره شده در حافظه را دارد اما اين بخش داده در حافظه كاشه سطح 1 موجود نباشد، در اين صورت پردازنده هنگام آغاز محاسبات بايد در انتظار دريافت دادههاي مذكور بماند. اگر عمليات «بارگذاري» چندين سيكل قبل از زماني كه ALU به آن بخش داده نياز دارد آغاز شود، تاخير انتقال داده از حافظه كاشه سطح 2 به سطح 1 اهميت اندكي پيدا خواهد كرد. البته «بارگذاري» خارج از نوبت دادهاي كه قبل از آن در عمليات «ذخيرهسازي» شركت كرده مطلوب نيست ، چرا كه اين عمل خارج از نوبت مقدار قديمي و بي ارزش داده را بارگذاري ميكند. به تصوير شماره 2 توجه كنيد:
[External Link Removed for Guests]
تصویر شماره 2
عمليات بارگذاري Load2 نميتواند خارج از نوبت اجرا شود، چرا كه مقدار آن تا زماني كه عمليات ذخيره سازي Store1 به اتمام نرسيده ارزشمند نيست. تنها زماني كه Store1 به اتمام رسد متغير Y مقدار صحيحي پيدا خواهد كرد. با اين حال هيچ دليلي براي تاخير در پيشافتادن عمليات بارگذاري Load4 وجود ندارد، اين دستور بارگذاري مستقل از ساير دستورات ذخيرهسازي پيشين خود است و اجراي خارج از نوبت آن توام با افزايش عملكرد نهايي خواهد بود.
در حال حاضر، پردازندهها عمليات load4 را تا زماني كه قبل از آن عمليات «ذخيرهسازي» وجود دارد به تاخير مياندازند، چرا كه پردازندههاي كنوني در شناسايي وابستگي «بارگذاري» و «ذخيرهسازي» ناتوان بوده و امكان بارگذاري داده غير ارزشمند در صورت پيشي افتادن «بارگذاري» به وجود خواهد آمد.
در معماري Core براي اولين بار راهكاري براي حل اين مشكل به نام «آشكارسازي حافظه» (Memory Disambiguation) تدارك ديده شده، در اين ويژگي از الگوريتم هوشمندي استفاده شده تا وابستگي دستورالعمل «بارگذاري» را با «ذخيرهسازي»هاي پيشين خود مشخص نمايد. اجراي خارج از نوبت «بارگذاري»ها افزايش عملكرد زيادي را به همراه خواهد آورد، در برخي از كدهاي كوچك محكزني، اينتل حداكثر 40 درصد افزايش كارايي را گزارش كرده است، اگرچه اين ميزان افزايش كارايي در برنامههاي واقعي مشاهده نخواهند شد اما تاثير غير قابل انكار و افزايش عملكرد ملموسي به همراه دارد. زيرا همانطور كه در ابتداي مقاله به آن اشاره كرديم، دستورالعملهاي «بارگذاري» حدود يك سوم micro-opهاي پردازندهها در زمان اجراي يك برنامه عمومي را تشكيل ميدهند كه بارگذاري دادههاي مطلوب آنها از حافظه كاشه سطح 2 (در حالت بد تر از حافظه اصلي) منجر به كندي اجراي برنامه خواهد شد. اما اين ويژگي انعطافپذير و نوين معماري Core چگونه با ساير معماريها رقابت ميكند ؟ به جدول شماره (3) توجه كنيد:
جدول شماره 3
در معماريهاي P6 و P-M تدابيري براي اجراي خارج از دستور «بارگذاري» قبل از ساير «بارگذاري»ها انديشيده شده بود همچنين امكان جلو افتادن دستورالعملهاي «بارگذاري» از«ذخيرهسازي»هاي پيشين خود نيز در صورتي كه آدرس داده ذخيره شده شناخته شده و با آدرس «بارگذاري» متفاوت باشد فراهم آمده بود اما در اكثر موارد اين آدرس هنوز توسط محاسبه نشده و عمليات «بارگذاري» در موارد اندكي ميتوانست از عمليات «ذخيرهسازي» جلو بيوفتد. برخلاف P6، در معماري K8 تنها امكان پيشي گرفتن «بارگذاري» از عمليات ALU (مانند دستورالعمل ADD) فراهم شده است، به طور كلي «بارگذاري»ها به تنهايي نميتوانند خارج از نوبت اجرا شده تا تاثير تاخير حافظه كاشه را از ميان بردارند از طرف ديگر «بارگذاري»ها نميتوانند از توان اجرايي بالقوه CPU در زماني كه پردازنده در انتظار اتمام عمليات «ذخيرهسازي»است استفاده كنند. اينها همه به اين معني هستند كه پردازنده Athlon 64 در اجراي خارج از نوبت كدها داراي محدوديتهاي متعددي است.
شايد يكي از مهمترين دلايلي كه پردازندههاي Athlon 64 علارقم داشتن دسترسي به حافظه سريتر و منابع محاسباتي عدد صحيح بيشتر، توانايي پيشي گرفتن از پردازندههاي همرده Core Duo خود را در بازيها و محاسبات عدد صحيح را ندارند همين موضوع باشد