خانه - داده ها
تاثیر حافظه کش بر عملکرد کامپیوتر حافظه کش هارد چیست و چرا به آن نیاز است؟

این در مورد پول نقد نیست، در مورد است حافظه پنهان-حافظه پردازنده و موارد دیگر از حجم حافظه پنهان- معامله گران حافظه یک فتیش تجاری دیگر را ساخته اند، به خصوص با حافظه نهان پردازنده های مرکزی و هارد دیسک (کارت های ویدئویی نیز آن را دارند - اما هنوز به آن نرسیده اند). بنابراین، یک پردازنده XXX با یک کش L2 1 مگابایتی و دقیقاً همان پردازنده XYZ با یک کش 2 مگابایتی وجود دارد. حدس بزنید کدام یک بهتر است؟ آه - فوراً این کار را نکنید!

حافظه پنهان-حافظه بافری است که آنچه را که می‌توان و/یا باید برای بعد کنار گذاشت، ذخیره می‌کند. پردازنده در حال انجام کار است و موقعیت هایی پیش می آید که داده های میانی باید در جایی ذخیره شوند. خوب، البته در حافظه پنهان! - به هر حال، مرتبه‌ای سریع‌تر از RAM است، زیرا ... در خود پردازنده قرار دارد و معمولاً در همان فرکانس کار می کند. و سپس، پس از مدتی، او این داده ها را دوباره بررسی می کند و دوباره آنها را پردازش می کند. به طور تقریبی، این مانند یک مرتب کننده سیب زمینی روی تسمه نقاله است که هر بار به چیزی غیر از سیب زمینی (هویج) برخورد می کند، آن را داخل جعبه می اندازد. و وقتی پر شد، بلند می شود و آن را بیرون می آورد خودبه اتاق بعدی در این لحظه نوار نقاله ثابت است و زمان توقف مشاهده می شود. حجم جعبه است حافظه پنهاندر این قیاس و چند تا خودآیا به 1 مگابایت نیاز دارید یا 12؟ واضح است که اگر خودحجم کم است شما باید زمان زیادی را برای حذف صرف کنید و ساده است، اما از یک حجم خاص خودافزایش بیشتر هیچ کاری نمی کند. خوب، مرتب کننده جعبه ای برای 1000 کیلوگرم هویج خواهد داشت - اما او در تمام شیفت کاری خود این مقدار را نخواهد داشت و این باعث نمی شود که او دو برابر سریعتر شود! یک نکته ظریف دیگر وجود دارد - بزرگ حافظه پنهانممکن است اولاً باعث افزایش تاخیر در دسترسی به آن شود و در عین حال احتمال خطا در آن افزایش می یابد ، به عنوان مثال در هنگام اورکلاک - ثانیا. (درباره چگونگی تعیین پایداری/ناپایداری پردازنده در این مورد و کشف اینکه خطا به طور خاص در خودکش، تست L1 و L2 - می توانید اینجا بخوانید.) سوم - حافظه پنهانمقدار مناسبی از مساحت تراشه و بودجه ترانزیستوری مدار پردازنده را می خورد. همینطور است حافظه پنهانحافظه هارد. و اگر معماری پردازنده قوی باشد، حافظه کش 1024 کیلوبایتی یا بیشتر در بسیاری از برنامه ها مورد تقاضا خواهد بود. اگر یک هارد دیسک سریع دارید، 16 مگابایت یا حتی 32 مگابایت مناسب است. اما هیچ مقدار 64 مگابایت کش این کار را انجام نمی دهد خوداگر تریمی به نام نسخه سبز (Green WD) با سرعت 5900 به جای 7200 مورد نیاز باشد، سریعتر است، حتی اگر دومی 8 مگابایت داشته باشد. سپس پردازنده های اینتل و AMD از این روش متفاوت استفاده می کنند حافظه پنهان(به طور کلی AMD کارآمدتر است و پردازنده های آنها اغلب با مقادیر پایین تر راحت هستند). علاوه بر این، اینتل حافظه پنهانعمومی است، اما برای AMD برای هر هسته شخصی است. سریع ترین حافظه پنهان L1 برای پردازنده های AMD 64 کیلوبایت برای داده ها و دستورالعمل ها است که دو برابر اینتل است. حافظه پنهانسطح سوم L3 معمولاً در پردازنده های برتر مانند AMD Phenom II 1055T X6سوکت AM3 2.8 گیگاهرتز یا یک رقیب اینتل Core i7-980X.اول از همه، بازی ها حجم زیادی از کش را دوست دارند. و حافظه پنهانبسیاری از برنامه های حرفه ای آن را دوست ندارند (برای رندر، ویرایش ویدیو و برنامه های حرفه ای به رایانه مراجعه کنید). به عبارت دقیق‌تر، کسانی که بیشترین مطالبه را دارند، عموماً نسبت به او بی‌تفاوت هستند. اما کاری که قطعا نباید انجام دهید این است که یک پردازنده بر اساس اندازه حافظه پنهان انتخاب کنید. پنتیوم 4 قدیمی در آخرین جلوه های خود دارای 2 مگابایت حافظه نهان در فرکانس های کاری بیش از 3 گیگاهرتز بود - مقایسه کنید. خودعملکرد با Celeron E1 *** دو هسته ای ارزان قیمت که در فرکانس های حدود 2 گیگاهرتز کار می کند. او از پیرمرد سنگ تمام نمی گذارد. مثال مرتبط تر E8600 دو هسته ای با فرکانس بالا است که تقریباً 200 دلار قیمت دارد (ظاهراً به دلیل حافظه نهان 6 مگابایتی) و Athlon II X4-620 2.6 گیگاهرتز که فقط 2 مگابایت دارد. این مانع نمی شود که آتلون رقیب خود را قصابی کند.

همانطور که از نمودارها می بینید، هیچ وجود ندارد حافظه پنهانهسته های اضافی را جایگزین نمی کند. Athlon با کش 2 مگابایتی (قرمز) به راحتی Cor2Duo را با 6 مگابایت کش شکست می دهد، حتی با فرکانس کمتر و تقریباً نیمی از هزینه. بسیاری از مردم نیز آن را فراموش می کنند حافظه پنهاندر کارت های ویدئویی وجود دارد زیرا، به طور کلی، آنها همچنین دارای پردازنده هستند. یک مثال اخیر کارت گرافیک GTX460 است که در آن نه تنها گذرگاه و ظرفیت حافظه را کاهش می دهند (که خریدار حدس می زند) - بلکه همچنین حافظه پنهانسایه زن ها، به ترتیب، از 512 کیلوبایت تا 384 کیلوبایت (که خریدار در مورد آن حدس نمی زند). و این نیز سهم منفی آن را به بهره وری می افزاید. همچنین کشف وابستگی عملکرد به اندازه کش جالب خواهد بود. بیایید بررسی کنیم که با افزایش اندازه حافظه نهان با استفاده از مثال همان پردازنده چقدر سریع رشد می کند. همانطور که می دانید، پردازنده های سری E6***، E4*** و E2*** تنها در اندازه کش با هم تفاوت دارند (هر کدام به ترتیب 4، 2 و 1 مگابایت). آنها با فرکانس مشابه 2400 مگاهرتز کار می کنند و نتایج زیر را نشان می دهند.

همانطور که می بینید، نتایج خیلی متفاوت نیست. من بیشتر می گویم - اگر پردازنده ای با ظرفیت 6 مگابایت درگیر می شد ، نتیجه کمی بیشتر می شد ، زیرا پردازنده ها به حد اشباع می رسند. اما برای مدل های با حجم 512 کیلوبایت این افت قابل توجه است. به عبارت دیگر 2 مگابایت حتی برای بازی ها کافی است. به طور خلاصه می توان به این نتیجه رسید: حافظه پنهانوقتی چیزهای دیگری از قبل وجود داشته باشد خوب است. این ساده لوحانه و احمقانه است که سرعت هارد دیسک یا تعداد هسته های پردازنده را برای اندازه کش با همان هزینه تغییر دهید، زیرا حتی جادارترین جعبه مرتب سازی جایگزین مرتب کننده دیگری نمی شود. اما نمونه های خوبی نیز وجود دارد. به عنوان مثال، پنتیوم دو هسته‌ای در یک ویرایش اولیه در فرآیند 65 نانومتری دارای 1 مگابایت حافظه نهان برای دو هسته (سری E2160 و مشابه) بود، و نسخه بعدی 45 نانومتری سری E5200 هنوز 2 مگابایت دارد، همه چیزهای دیگر برابر هستند. و مهمتر از همه - PRICE). البته شما باید دومی را انتخاب کنید.

کش یک بافر میانی با دسترسی سریع است که حاوی اطلاعاتی است که به احتمال زیاد درخواست می شود. دسترسی به داده ها در حافظه نهان سریعتر از بازیابی داده های اصلی از حافظه عملیاتی (RAM) و سریعتر از حافظه خارجی (هارد دیسک یا درایو حالت جامد) است، در نتیجه میانگین زمان دسترسی را کاهش می دهد و عملکرد کلی سیستم رایانه را افزایش می دهد.

تعدادی از مدل‌های واحد پردازش مرکزی (CPU) حافظه نهان مخصوص به خود را دارند تا دسترسی به حافظه دسترسی تصادفی (RAM) را که کندتر از ثبات‌ها است، به حداقل برسانند. زمانی که سرعت کلاک RAM به طور قابل توجهی کمتر از سرعت کلاک CPU باشد، حافظه کش می تواند مزایای عملکرد قابل توجهی را ارائه دهد. سرعت کلاک حافظه کش معمولاً خیلی کمتر از سرعت CPU نیست.

سطوح کش

کش CPU به چند سطح تقسیم می شود. امروزه در پردازنده‌های همه منظوره، تعداد سطوح می‌تواند به 3 برسد. حافظه نهان سطح N+1 معمولاً از نظر اندازه بزرگ‌تر و سرعت دسترسی و انتقال داده‌ها کندتر از حافظه نهان سطح N است.

سریعترین حافظه، حافظه نهان سطح اول است - کش L1. در واقع، از آنجایی که روی همان تراشه قرار دارد و بخشی از بلوک های عملکردی است، بخشی جدایی ناپذیر از پردازنده است. در پردازنده های مدرن، کش L1 معمولا به دو کش، کش دستورالعمل و کش داده (معماری هاروارد) تقسیم می شود. اکثر پردازنده های بدون کش L1 نمی توانند کار کنند. حافظه نهان L1 در فرکانس پردازنده کار می کند و به طور کلی می توان در هر چرخه ساعت به آن دسترسی داشت. اغلب امکان انجام چندین عملیات خواندن/نوشتن به صورت همزمان وجود دارد. تأخیر دسترسی معمولاً 2-4 چرخه ساعت هسته است. حجم معمولاً کم است - بیش از 384 کیلوبایت.

دومین سریعترین حافظه نهان L2 است - یک کش سطح دوم که معمولاً مانند L1 روی تراشه قرار دارد. در پردازنده های قدیمی، مجموعه ای از تراشه ها روی مادربرد. حجم حافظه نهان L2 از 128 کیلوبایت تا 1/12 مگابایت. در پردازنده‌های چند هسته‌ای مدرن، حافظه نهان سطح دوم، که روی همان تراشه قرار دارد، یک حافظه جداگانه است - با حجم کش کلی nM مگابایت، هر هسته دارای nM/nC مگابایت است که در آن nC تعداد هسته‌های پردازنده است. به طور معمول، تأخیر حافظه نهان L2 واقع در تراشه هسته از 8 تا 20 چرخه ساعت هسته است.

حافظه نهان سطح سوم کمترین سرعت را دارد، اما اندازه آن می تواند بسیار چشمگیر باشد - بیش از 24 مگابایت. حافظه نهان L3 کندتر از کش های قبلی است، اما همچنان به طور قابل توجهی سریعتر از حافظه رم است. در سیستم های چند پردازنده ای رایج است و برای همگام سازی داده ها از L2 های مختلف در نظر گرفته شده است.

گاهی اوقات یک کش سطح 4 نیز وجود دارد، معمولاً در یک تراشه جداگانه قرار دارد. استفاده از حافظه نهان سطح 4 فقط برای سرورها و مین فریم های با کارایی بالا قابل توجیه است.

مشکل همگام سازی بین کش های مختلف (یک و چند پردازنده) با انسجام کش حل می شود. سه گزینه برای تبادل اطلاعات بین کش های سطوح مختلف یا به قول خودشان معماری کش وجود دارد: فراگیر، انحصاری و غیر انحصاری.

حافظه نهان L3 برای پردازنده های AMD چقدر مهم است؟

در واقع، تجهیز پردازنده‌های چند هسته‌ای به حافظه اختصاصی که بین تمام هسته‌های موجود مشترک خواهد بود، منطقی است. در این نقش، یک کش سطح سوم (L3) سریع می‌تواند دسترسی به داده‌هایی را که اغلب درخواست می‌شود، به میزان قابل توجهی افزایش دهد. سپس هسته ها، در صورت امکان، به حافظه اصلی کند (RAM) دسترسی نخواهند داشت.

حداقل در تئوری. اخیرا AMD پردازنده Athlon II X4 را معرفی کرد، که یک مدل Phenom II X4 بدون حافظه نهان L3 است و به این نکته اشاره می کند که آنقدرها ضروری نیست. ما تصمیم گرفتیم که مستقیماً دو پردازنده (با و بدون حافظه کش L3) را با هم مقایسه کنیم تا بررسی کنیم که کش چگونه بر عملکرد تأثیر می گذارد.

برای بزرگنمایی روی عکس کلیک کنید.

کش چگونه کار می کند؟

قبل از اینکه وارد تست ها شویم، مهم است که برخی از اصول را درک کنیم. اصل نحوه کار کش بسیار ساده است. کش داده ها را تا حد امکان به هسته های پردازشی پردازنده بافر می کند تا درخواست های CPU را به حافظه های دورتر و کندتر کاهش دهد. در پلتفرم های دسکتاپ مدرن، سلسله مراتب کش شامل سه سطح است که قبل از دسترسی به RAM است. علاوه بر این، کش های سطح دوم و به ویژه سطح سوم نه تنها برای بافر کردن داده ها خدمت می کنند. هدف آنها جلوگیری از بارگذاری بیش از حد گذرگاه پردازنده در هنگام نیاز به تبادل اطلاعات توسط هسته ها است.

ضربات و از دست دادن

اثربخشی معماری های کش با نرخ ضربه سنجیده می شود. درخواست‌های داده‌ای که می‌توانند توسط حافظه پنهان برآورده شوند، بازدید در نظر گرفته می‌شوند. اگر این کش حاوی داده های لازم نباشد، درخواست بیشتر در امتداد خط لوله حافظه ارسال می شود و خطا شمارش می شود. البته، از دست دادن منجر به زمان بیشتری برای کسب اطلاعات می شود. در نتیجه، "حباب" (بیکار) و تاخیر در خط لوله محاسبات ظاهر می شود. برعکس، بازدیدها به شما امکان می دهد حداکثر عملکرد را حفظ کنید.

ورود حافظه پنهان، انحصار، انسجام

سیاست‌های جایگزینی نحوه آزادسازی فضا در حافظه پنهان برای ورودی‌های جدید را دیکته می‌کنند. از آنجایی که داده های نوشته شده در حافظه نهان در نهایت باید در حافظه اصلی ظاهر شوند، سیستم ها ممکن است این کار را همزمان با نوشتن در حافظه پنهان (نوشتن از طریق) انجام دهند، یا ممکن است مناطق داده را به عنوان "کثیف" (Write-back) علامت گذاری کنند و در آن بنویسند. حافظه زمانی که از حافظه پنهان خارج می شود.

داده ها در چندین سطح کش می توانند به طور انحصاری ذخیره شوند، یعنی بدون افزونگی. سپس خطوط داده مشابهی را در دو سلسله مراتب کش مختلف پیدا نخواهید کرد. یا حافظه نهان می‌تواند به طور فراگیر کار کند، یعنی سطوح پایین‌تر حافظه پنهان تضمین می‌شود که حاوی داده‌های موجود در سطوح کش بالایی (نزدیک به هسته پردازنده) باشند. AMD Phenom از کش L3 انحصاری استفاده می کند، در حالی که اینتل از یک استراتژی کش فراگیر پیروی می کند. پروتکل های هماهنگی یکپارچگی و تازگی داده ها را در هسته های مختلف، سطوح کش و حتی پردازنده ها تضمین می کنند.

اندازه کش

یک کش بزرگتر می تواند داده های بیشتری را در خود نگه دارد، اما تمایل به افزایش تاخیر دارد. علاوه بر این، یک کش بزرگ تعداد قابل توجهی از ترانزیستورهای پردازنده را مصرف می کند، بنابراین یافتن تعادل بین بودجه ترانزیستور، اندازه قالب، مصرف انرژی و عملکرد/تأخیر مهم است.

انجمنی

ورودی‌های RAM را می‌توان مستقیماً به حافظه پنهان نگاشت، یعنی تنها یک موقعیت کش برای کپی داده‌های RAM وجود دارد، یا می‌توانند n-way associative باشند، یعنی n مکان ممکن در کش وجود دارد که در آن داده ها ممکن است ذخیره شوند. درجات بالاتر تداعی (تا حافظه نهان کاملاً انجمنی) انعطاف پذیری کش بیشتری را فراهم می کند زیرا داده های موجود در کش نیازی به بازنویسی ندارند. به عبارت دیگر، n-درجه بالا تداعی نرخ ضربه بالاتر را تضمین می‌کند، اما تأخیر را نیز افزایش می‌دهد زیرا بررسی همه آن ارتباط‌ها برای یک ضربه زمان بیشتری می‌برد. به طور معمول، بالاترین درجه ارتباط برای آخرین سطح حافظه پنهان معقول است، زیرا حداکثر ظرفیت در آنجا موجود است و جستجوی داده‌های خارج از این کش منجر به دسترسی پردازنده به RAM کند می‌شود.

در اینجا چند نمونه آورده شده است: Core i5 و i7 از 32 کیلوبایت حافظه نهان L1 با ارتباط 8 طرفه برای داده ها و 32 کیلوبایت از حافظه نهان L1 با ارتباط 4 طرفه برای دستورالعمل ها استفاده می کنند. قابل درک است که اینتل می خواهد دستورالعمل ها سریعتر در دسترس باشد و حافظه نهان داده L1 حداکثر نرخ ضربه را داشته باشد. حافظه نهان L2 در پردازنده‌های اینتل دارای ارتباط 8 طرفه است و حافظه نهان L3 اینتل حتی هوشمندتر است، زیرا از ارتباط 16 طرفه برای به حداکثر رساندن بازدیدها استفاده می‌کند.

با این حال، AMD استراتژی متفاوتی را با پردازنده‌های Phenom II X4 دنبال می‌کند که از کش L1 دو طرفه برای کاهش تأخیر استفاده می‌کند. برای جبران خطاهای احتمالی، ظرفیت کش دو برابر شد: 64 کیلوبایت برای داده و 64 کیلوبایت برای دستورالعمل. حافظه نهان L2 مانند طراحی اینتل دارای ارتباط 8 طرفه است، اما کش L3 AMD با ارتباط 48 طرفه کار می کند. اما تصمیم برای انتخاب یک معماری کش بر دیگری بدون در نظر گرفتن کل معماری CPU قابل ارزیابی نیست. کاملاً طبیعی است که نتایج آزمایش اهمیت عملی داشته باشد و هدف ما دقیقاً یک آزمایش عملی از کل ساختار پیچیده چند سطحی کش بود.

هر پردازنده مدرن یک کش اختصاصی دارد که دستورالعمل ها و داده های پردازنده را ذخیره می کند و تقریباً بلافاصله آماده استفاده است. این سطح معمولاً به عنوان کش سطح 1 یا L1 شناخته می شود و اولین بار در پردازنده های 486DX معرفی شد. اخیراً پردازنده‌های AMD با 64 کیلوبایت کش L1 در هر هسته (برای داده‌ها و دستورالعمل‌ها) استاندارد شده‌اند و پردازنده‌های اینتل از 32 کیلوبایت حافظه نهان L1 در هر هسته (همچنین برای داده‌ها و دستورالعمل‌ها) استفاده می‌کنند.

حافظه نهان L1 برای اولین بار در پردازنده های 486DX ظاهر شد و پس از آن به یکی از ویژگی های اصلی تمام پردازنده های مدرن تبدیل شد.

حافظه نهان سطح دوم (L2) پس از عرضه پنتیوم III در همه پردازنده ها ظاهر شد، اگرچه اولین پیاده سازی آن روی بسته بندی در پردازنده پنتیوم پرو (اما نه روی تراشه) بود. پردازنده های مدرن به حداکثر 6 مگابایت حافظه نهان L2 روی تراشه مجهز هستند. به عنوان یک قاعده، به عنوان مثال، این حجم بین دو هسته در یک پردازنده Intel Core 2 Duo تقسیم می شود. پیکربندی‌های L2 معمولی 512 کیلوبایت یا 1 مگابایت حافظه پنهان در هر هسته ارائه می‌کنند. پردازنده هایی با حافظه نهان L2 کوچکتر معمولاً در سطح قیمت پایین تری قرار دارند. در زیر نموداری از پیاده سازی های اولیه کش L2 را مشاهده می کنید.

پنتیوم پرو دارای حافظه نهان L2 در بسته بندی پردازنده بود. در نسل های بعدی Pentium III و Athlon، حافظه نهان L2 از طریق تراشه های SRAM جداگانه پیاده سازی شد که در آن زمان بسیار رایج بود (1998، 1999).

اعلام بعدی فناوری فرآیند تا 180 نانومتر به سازندگان این امکان را داد تا در نهایت حافظه نهان L2 را روی قالب پردازنده یکپارچه کنند.


اولین پردازنده های دو هسته ای به سادگی از طرح های موجود استفاده می کردند که شامل دو قالب در هر بسته می شد. AMD یک پردازنده دو هسته ای روی یک تراشه یکپارچه معرفی کرد، یک کنترلر حافظه و یک سوئیچ اضافه کرد و اینتل به سادگی دو تراشه تک هسته ای را در یک بسته برای اولین پردازنده دو هسته ای خود مونتاژ کرد.


برای اولین بار، حافظه نهان L2 بین دو هسته محاسباتی در پردازنده های Core 2 Duo به اشتراک گذاشته شد. AMD پا را فراتر گذاشت و اولین Phenom چهار هسته ای خود را از ابتدا ایجاد کرد و اینتل دوباره از یک جفت قالب، این بار دو قالب دو هسته ای Core 2 برای اولین پردازنده چهار هسته ای خود برای کاهش هزینه ها استفاده کرد.

حافظه نهان سطح سوم از روزهای اولیه پردازنده آلفا 21165 (96 کیلوبایت، پردازنده های معرفی شده در سال 1995) یا IBM Power 4 (256 کیلوبایت، 2001) وجود داشته است. با این حال، در معماری های مبتنی بر x86، حافظه نهان L3 برای اولین بار با مدل های Intel Itanium 2، Pentium 4 Extreme (گالاتین، هر دو پردازنده در سال 2003) و Xeon MP (2006) ظاهر شد.

پیاده سازی های اولیه به سادگی سطح دیگری را در سلسله مراتب کش ارائه کردند، اگرچه معماری های مدرن از کش L3 به عنوان یک بافر بزرگ و مشترک برای انتقال داده های بین هسته ای در پردازنده های چند هسته ای استفاده می کنند. این مورد توسط n-درجه بالا از انجمن تاکید شده است. بهتر است کمی طولانی‌تر به دنبال داده‌ها در حافظه پنهان بگردید تا اینکه در نهایت با وضعیتی مواجه شوید که چندین هسته از دسترسی بسیار آهسته به RAM اصلی استفاده می‌کنند. AMD برای اولین بار حافظه نهان L3 را روی یک پردازنده دسکتاپ با خط Phenom که قبلا ذکر شد معرفی کرد. Phenom X4 65 نانومتری حاوی 2 مگابایت حافظه نهان L3 مشترک است و مدل مدرن 45 نانومتری Phenom II X4 در حال حاضر دارای 6 مگابایت حافظه کش L3 مشترک است. پردازنده های Core i7 و i5 اینتل از 8 مگابایت حافظه کش L3 استفاده می کنند.

پردازنده‌های چهار هسته‌ای مدرن، حافظه‌های نهان L1 و L2 را برای هر هسته اختصاص داده‌اند، همچنین یک حافظه نهان L3 بزرگ که بین همه هسته‌ها مشترک است. حافظه نهان مشترک L3 همچنین امکان تبادل داده هایی را فراهم می کند که هسته ها می توانند به صورت موازی روی آنها کار کنند.


سلام بچه ها بیایید در مورد پردازنده یا به طور دقیق تر در مورد کش آن صحبت کنیم. حافظه نهان پردازنده می تواند متفاوت باشد، به عنوان مثال، من اکنون یک پنتیوم G3220 (سوکت 1150) دارم، این یک پردازنده مدرن است و 3 مگابایت کش دارد. اما در عین حال پنتیوم D965 مدل قدیمی (سوکت 775) 4 مگابایت کش دارد. اما در عین حال G3220 چندین برابر سریعتر از D965 است، منظور من این است که کش خوب است، اما نکته اصلی این است که کش مدرن است. حافظه کش پردازنده های قدیمی بسیار کندتر از پردازنده های جدید است، این را در نظر داشته باشید.

بیایید در مورد برخی از دستگاه هایی که بر عملکرد تأثیر می گذارند صحبت کنیم. ببین یه هارد بگیریم کش داره؟ بله، وجود دارد، اما کوچک است، اگرچه تاثیر کمی بر عملکرد دارد. سپس چه اتفاقی می افتد؟ سپس رم می آید، هر چیزی که برنامه یا پردازنده با آن کار می کند، همه اینها در رم قرار می گیرد. اگر داده ای در رم نباشد، از روی هارد خوانده می شود و این بسیار کند است. اما رم در حال حاضر بسیار سریع است، می تواند مقدار زیادی از آن وجود داشته باشد. اما رم در مقایسه با یک هارد دیسک سریع است؛ برای یک پردازنده هنوز خیلی سریع نیست و بنابراین دومی کش مخصوص به خود را دارد که در حال حاضر فوق العاده سریع است!

کش پردازنده چه تاثیری دارد؟ در این کش است که پردازنده آنچه را که اغلب استفاده می کند، یعنی انواع دستورات و دستورالعمل ها را ذخیره می کند. بر این اساس، هر چه بیشتر باشد، بهتر است، اما این کاملاً درست نیست. چه مقدار کش دارید؟ اگر نمی دانید، پس من به شما نشان خواهم داد که چگونه بفهمید، همه چیز ساده است. خوب، ببینید چه وضعیت جالبی است، بیایید دوباره به روندهای قدیمی برگردیم. به نظر می رسد که اگر کش زیادی وجود دارد، پس این خوب است. اما یک پردازنده Q9650 (سوکت 775) وجود دارد که دارای 12 مگابایت حافظه نهان است، اما حتی به مدل های مدرن Core i5 یا حتی Core i3 نزدیک نیست. i5 کش بسیار کمتری دارد، یعنی فقط 6 مگابایت، و i3 حتی کش کمتری دارد - فقط 3 مگابایت.

من درک می کنم که به طور کلی پردازنده های مدرن بسیار سریعتر از پردازنده های قدیمی هستند. اما این چیزی نیست که من در مورد آن صحبت می کنم. حافظه نهان و حافظه نهان متفاوت هستند؛ Q9650 سطح بالا در مقایسه با پردازنده های موجود در سوکت های مدرن، به سادگی حافظه نهان کندی دارد. بنابراین، آن 12 مگابایت هیچ فایده ای ندارد. این همه منظور من است: دنبال کمیت نباشید، کیفیت را دنبال کنید. پس اینجوری همه اینها را به عنوان یادداشت برای شما نوشتم، امیدوارم برایتان مفید باشد

در اینجا یک تصویر ساده از نحوه کار کش وجود دارد:

و در اینجا یک تصویر دیگر وجود دارد، دستگاه دیگری نیز در اینجا نشان داده شده است، این یک کنترلر است که فقط به شما می گوید که آیا داده در حافظه پنهان وجود دارد یا خیر:

حافظه کش فوق العاده سریع است. من در مورد پردازنده ها اطلاعی ندارم، اما جالب است بدانید، اگر این کش ... 100 مگابایت ... یا حتی 1 گیگابایت ... بود، آیا پردازنده سریعتر بود؟ این البته الان هم فوق العاده است، اما الان پردازنده هایی با مقدار زیادی کش وجود دارد... حدود 30 مگابایت یا بیشتر.. در مورد این مطمئن نیستم، اما به نظر می رسد که این حافظه کش بسیار گران است و به طور کلی قرار دادن آن در یک پردازنده دشوار است، منظورم حجم زیاد است

خوب، حالا اجازه دهید به شما نشان دهم که چگونه می توانید بفهمید که چه مقدار کش در پردازنده وجود دارد. اگر ویندوز 10 دارید، پس این عالی است، زیرا می تواند تمام کش ها را نشان دهد، سه سطح در آنجا وجود دارد. اگرچه سطح سوم مهم ترین به نظر می رسد، اما بزرگترین آن نیز می باشد. بنابراین، نگاه کنید، Task Manager را باز کنید و به برگه Performance بروید و در اینجا در تب CPU می توانید اطلاعات مربوط به حافظه پنهان را مشاهده کنید، اینجاست:

در اینجا می توانید ببینید که من یک پنتیوم G3220 دارم، یک پردازنده نسبتا خوب، البته ارزان. اما در واقع سریعتر از بسیاری از مدل های سوکت 775 است که می توان آنها را مدل های نزدیک به بالا نامید و حافظه نهان بسیار بیشتری دارند... اینها چیزهایی هستند ...

اما من صریحاً به شما می گویم که این روش روشنی برای مشاهده میزان حافظه نهان یک پردازنده نیست. من به شما توصیه می کنم از ابزار CPU-Z استفاده کنید اگر فکر می کنید: بله، این یک برنامه است، باید آن را نصب کنم و همه چیز، اما بیا... پس متوقف شو! این برنامه توسط اورکلاک های جالبی که پردازنده های خود را اورکلاک می کنند استفاده می شود. در حین نصب، ابزار یک دسته فایل ایجاد نمی کند و در واقع نصب فقط برنامه را در Program Files باز می کند، سپس cpuz.exe را می توان در هر جایی کپی کرد و اجرا کرد، کار می کند! آنها فقط آن را راه اندازی کردند و تمام، او اطلاعات را جمع آوری کرد و نگاه کرد! شما به راحتی می توانید آن را در اینترنت دانلود کنید، زیرا در هر گوشه ای در دسترس است. فقط مطمئن شوید که ویروس ها را نگیرید. برای انجام این کار، به عنوان مثال در پورتال نرم افزار دانلود کنید. فقط در جستجوی پورتال نرم افزار CPU-Z بنویسید. CPU-Z تقریباً روی همه نسخه های ویندوز کار می کند، به جز قدیمی ترین نسخه ها...

به طور کلی می توانید آن را در این سایت دانلود کنید: cpuid.com، راستش من از آن اطلاعی نداشتم و عادت داشتم از سایت های دیگر دانلود کنم!

خوب امیدوارم بتوانید بدون مشکل دانلود کنید. اکنون آن را راه اندازی می کنید و همه چیز در مورد پردازنده در دسترس شماست. بنابراین من CPU-Z را راه اندازی کردم و این چیزی است که در مورد Pentium G3220 من نشان داد:

جایی که دایره کادر را حلقه کردم، همان جایی است که کش نمایش داده می شود. یک راه چیست، خوب، می گوید 8 طرفه، 12 طرفه، خوب، من نمی دانم چیست، ببخشید. اما همانطور که در اینجا می بینید، نه تنها حافظه نهان، بلکه سایر اطلاعات، فرکانس، هسته ها و رشته ها را نیز به وضوح می بینید. خوب، آنچه که جالب است این است که یک یا دو کش اینجا نشان می دهند. خوب، من فقط 3 مگابایت اینجا نوشته شده است، یعنی فقط 3 مگابایت کش دارم.

اما برای مثال، در مورد Q9650 رده بالا، وضعیت در آنجا کمی متفاوت است، حتی با وجود اینکه 12 مگابایت حافظه پنهان وجود دارد، اما اینها اساساً دو بلوک 6 مگابایتی هستند و CPU-Z این را تعیین می کند:

در ضمن همانطور که می بینید اورکلاک تا 4 گیگاهرتز وجود دارد که بد نیست. به هر حال، چنین اورکلاکی ممکن است با هوا خنک شود. اما این یک داستان کاملا متفاوت است ...

در ضمن یه چیز جالب دیگه اینه که مدل های سوکت 775 کش سطح سوم L3 ندارن... یعنی فقط L1 و L2 هستن... ولی من نمیدونستم...

پس این چیزها هستند. امیدوارم همه چیز را واضح نوشته باشم. یک بار دیگر تکرار می کنم، دنبال کمیت نباشید. بنابراین من واقعاً پشیمان نیستم، اما با این وجود... خلاصه، آن را گرفتم و برای خودم یک کامپیوتر روی سوکت 1150 ساختم. خوب، من فکر می کنم همه چیز خوب است. اما وقتی فهمیدم سوکت 1151 منتشر شده و قیمتش به همین اندازه یا حتی کمی ارزان تر است، کمی آزرده شدم... اما در واقع پردازنده ها در آنجا سریعتر هستند... خب، باشه. من به تازگی یک کامپیوتر برای چندین سال خریدم، اما خوشحالم که برد من، و این Asus Gryphon Z87، از پردازنده های مبتنی بر هسته Devil’s Canyon پشتیبانی می کند! این یک هدیه بود، زیرا اینتل قبلاً اعلام کرده بود که این پردازنده ها فقط توسط چیپست Z97 پشتیبانی می شوند، اما من Z87 لعنتی را گرفتم!

خلاصه این چیزهاست

این همه بچه ها. امیدوارم همه چیز برای شما خوب باشد و این اطلاعات برای شما مفید بوده است، موفق باشید

به خانه! پردازنده کش 2016/07/30

virtmachine.ru

تاثیر حافظه کش بر عملکرد کامپیوتر

همه کاربران به خوبی از عناصر کامپیوتری مانند پردازنده که وظیفه پردازش داده ها را بر عهده دارد و همچنین حافظه با دسترسی تصادفی (RAM یا RAM) که وظیفه ذخیره آن را بر عهده دارد، آگاه هستند. اما احتمالاً همه نمی دانند که یک حافظه نهان پردازنده (Cache CPU) یعنی رم خود پردازنده (به اصطلاح ultra-RAM) نیز وجود دارد.

تابع کش

دلیلی که طراحان کامپیوتر را بر آن داشت تا از حافظه اختصاصی برای پردازنده استفاده کنند چیست؟ آیا ظرفیت رم کامپیوتر کافی نیست؟

در واقع، برای مدت طولانی، کامپیوترهای شخصی بدون هیچ حافظه پنهان کار می کردند. اما همانطور که می دانید پردازنده سریع ترین دستگاه کامپیوتر شخصی است و با هر نسل جدید CPU سرعت آن افزایش می یابد. در حال حاضر سرعت آن با میلیاردها عملیات در ثانیه اندازه گیری می شود. در عین حال، رم استاندارد در طول تکامل خود عملکرد خود را به میزان قابل توجهی افزایش نداده است.

به طور کلی، دو فناوری اصلی تراشه حافظه وجود دارد - حافظه استاتیک و حافظه پویا. بدون پرداختن به جزئیات طراحی آنها، فقط می گوییم که حافظه ایستا، بر خلاف حافظه پویا، نیازی به بازسازی ندارد. علاوه بر این، حافظه استاتیک از 4-8 ترانزیستور برای یک بیت اطلاعات استفاده می کند، در حالی که حافظه پویا از 1-2 ترانزیستور استفاده می کند. بر این اساس، حافظه پویا بسیار ارزان تر از حافظه استاتیک است، اما در عین حال بسیار کندتر است. در حال حاضر تراشه های رم بر اساس حافظه پویا تولید می شوند.

تکامل تقریبی نسبت سرعت پردازنده و رم:

بنابراین، اگر پردازنده همیشه اطلاعات را از رم می گرفت، باید منتظر حافظه دینامیکی کند باشد و همیشه بیکار می ماند. در همین حالت، اگر از حافظه ثابت به عنوان رم استفاده می شد، هزینه کامپیوتر چندین برابر می شد.

به همین دلیل است که یک مصالحه معقول ایجاد شد. بخش عمده رم پویا باقی ماند، در حالی که پردازنده حافظه کش سریع خود را بر اساس تراشه های حافظه ساکن داشت. حجم آن نسبتاً کم است - به عنوان مثال، اندازه کش سطح دوم فقط چند مگابایت است. با این حال، لازم به یادآوری است که کل RAM اولین کامپیوترهای PC IBM کمتر از 1 مگابایت بود.

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

تاریخچه کش

به بیان دقیق، قبل از اینکه حافظه کش به رایانه های شخصی منتقل شود، چندین دهه بود که با موفقیت در ابررایانه ها استفاده می شد.

برای اولین بار، حافظه نهان تنها 16 کیلوبایت در رایانه شخصی مبتنی بر پردازنده i80386 ظاهر شد. امروزه، پردازنده های مدرن از سطوح مختلفی از کش استفاده می کنند، از اولین (سریع ترین کش با کوچکترین اندازه - معمولاً 128 کیلوبایت) تا سوم (کندترین کش با بزرگترین اندازه - تا ده ها مگابایت).

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

برای مدت طولانی، پردازنده‌ها فقط دو سطح حافظه پنهان داشتند، اما CPU Intel Itanium اولین پردازنده‌ای بود که یک حافظه نهان سطح سوم، مشترک در تمام هسته‌های پردازنده داشت. همچنین توسعه پردازنده هایی با حافظه نهان چهار سطحی وجود دارد.

معماری ها و اصول کش

امروزه دو نوع اصلی سازماندهی حافظه نهان شناخته شده است که از اولین تحولات نظری در زمینه سایبرنتیک - معماری پرینستون و هاروارد - سرچشمه می گیرد. معماری پرینستون شامل یک فضای حافظه واحد برای ذخیره داده ها و دستورات است، در حالی که معماری هاروارد به فضای جداگانه دلالت می کند. اکثر پردازنده های کامپیوتر شخصی x86 از نوع جداگانه ای از حافظه کش استفاده می کنند. علاوه بر این، نوع سوم حافظه کش نیز در پردازنده های مدرن ظاهر شده است - به اصطلاح بافر ترجمه انجمنی، که برای سرعت بخشیدن به تبدیل آدرس های حافظه مجازی سیستم عامل به آدرس های حافظه فیزیکی طراحی شده است.

یک نمودار ساده از تعامل بین حافظه کش و پردازنده را می توان به صورت زیر توصیف کرد. ابتدا پردازنده وجود اطلاعات مورد نیاز پردازنده را در سریعترین کش سطح اول و سپس در کش سطح دوم و غیره بررسی می کند. اگر اطلاعات لازم در هیچ سطح حافظه پنهان یافت نشد، آن را خطا یا خطای کش می نامند. اگر اصلاً اطلاعاتی در کش وجود نداشته باشد، پردازنده باید آن را از رم یا حتی از حافظه خارجی (از هارد دیسک) بگیرد.

ترتیبی که پردازنده اطلاعات را در حافظه جستجو می کند:

به این صورت است که پردازنده اطلاعات را جستجو می کند

برای کنترل عملکرد حافظه نهان و تعامل آن با واحدهای محاسباتی پردازنده و همچنین RAM، یک کنترلر مخصوص وجود دارد.

طرح سازماندهی تعامل هسته پردازنده، حافظه پنهان و RAM:


کنترلر کش رابط کلیدی بین پردازنده، رم و حافظه کش است

لازم به ذکر است که کش داده ها فرآیند پیچیده ای است که از فناوری ها و الگوریتم های ریاضی زیادی استفاده می کند. از جمله مفاهیم اساسی مورد استفاده در کش می توان به روش های نوشتن کش و معماری تداعی کش اشاره کرد.

روش‌های نوشتن در حافظه پنهان

دو روش اصلی برای نوشتن اطلاعات در حافظه کش وجود دارد:

  1. روش Write-back – داده ها ابتدا در حافظه پنهان نوشته می شوند و در صورت وقوع شرایط خاص، در RAM نوشته می شوند.
  2. روش Write-through - داده ها به طور همزمان در RAM و حافظه پنهان نوشته می شوند.

معماری انجمن کش

معماری تداعی کش روشی را تعریف می کند که در آن داده های RAM به حافظه نهان نگاشت می شوند. گزینه های اصلی برای معماری تداعی کش کش عبارتند از:

  1. حافظه پنهان مستقیم نقشه برداری - بخش خاصی از حافظه نهان مسئول بخش خاصی از RAM است
  2. کش کاملاً مرتبط - هر بخشی از کش را می توان با هر بخشی از RAM مرتبط کرد
  3. حافظه پنهان مختلط (مجموعه ای وابسته)

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

نتیجه

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

biosgid.ru

گالری جلوه های حافظه نهان پردازنده

تقریباً همه توسعه دهندگان می دانند که حافظه پنهان پردازنده یک حافظه کوچک اما سریع است که داده ها را از مناطق حافظه اخیراً بازدید شده ذخیره می کند - تعریف کوتاه و کاملاً دقیق است. با این حال، دانستن جزئیات خسته کننده در مورد مکانیسم های کش برای درک عوامل موثر بر عملکرد کد ضروری است.

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

هابرکات - - -

مثال 1: دسترسی و عملکرد حافظه
به نظر شما چرخه دوم چقدر سریعتر از چرخه اول است؟ int arr = int جدید;

برای (int i = 0; i // second for (int i = 0; i مثال 2: تأثیر خطوط حافظه پنهان بیایید عمیق‌تر کاوش کنیم - مقادیر گام دیگر را امتحان کنید، نه فقط 1 و 16: برای (int i = 0; i

لطفاً توجه داشته باشید که با مقادیر مرحله از 1 تا 16، زمان عملیات تقریباً بدون تغییر باقی می ماند. اما با مقادیر بیشتر از 16، هر بار که گام را دوبرابر می کنیم، زمان اجرا تقریباً به نصف کاهش می یابد. این بدان معنا نیست که حلقه به نحوی جادویی سریعتر شروع به کار می کند، فقط تعداد تکرارها نیز کاهش می یابد. نکته کلیدی همان زمان عملیات با مقادیر مرحله از 1 تا 16 است.

دلیل این امر این است که پردازنده های مدرن به حافظه یک بایت دسترسی ندارند، بلکه در بلوک های کوچکی به نام خطوط کش دسترسی دارند. به طور معمول اندازه رشته 64 بایت است. وقتی هر مقداری را از حافظه می خوانید، حداقل یک خط کش وارد حافظه پنهان می شود. دسترسی بعدی به هر مقدار از این ردیف بسیار سریع است. از آنجایی که 16 مقدار int 64 بایت را اشغال می کند، حلقه هایی با مراحل 1 تا 16 به همان تعداد خط کش یا به طور دقیق تر به تمام خطوط کش آرایه دسترسی دارند. در مرحله 32، دسترسی به هر خط دوم، در مرحله 64، به هر چهارم رخ می دهد. درک این موضوع برای برخی از تکنیک های بهینه سازی بسیار مهم است. تعداد دسترسی به آن بستگی به مکان داده ها در حافظه دارد. برای مثال، داده های تراز نشده ممکن است به جای یک دسترسی به دو دسترسی به حافظه اصلی نیاز داشته باشند. همانطور که در بالا متوجه شدیم، سرعت عملیات دو برابر کمتر خواهد بود.

مثال 3: اندازه های حافظه نهان سطح 1 و 2 (L1 و L2)
پردازنده های مدرن معمولاً دارای دو یا سه سطح کش هستند که معمولاً L1، L2 و L3 نامیده می شوند. برای پیدا کردن اندازه‌های کش در سطوح مختلف، می‌توانید از ابزار CoreInfo یا تابع Windows API GetLogicalProcessorInfo استفاده کنید. هر دو روش همچنین اطلاعاتی در مورد اندازه خط کش برای هر سطح ارائه می دهند. در دستگاه من، CoreInfo حافظه پنهان داده L1 32 کیلوبایت، حافظه پنهان دستورالعمل L1 32 کیلوبایت و حافظه پنهان داده L2 4 مگابایت گزارش می دهد. هر هسته کش L1 شخصی خود را دارد، حافظه نهان L2 برای هر جفت هسته مشترک است: پردازشگر منطقی به نقشه کش: *--- حافظه پنهان داده 0، سطح 1، 32 کیلوبایت، Assoc 8، اندازه خط 64 *--- کش دستورالعمل 0, Level 1, 32 KB, Assoc 8, LineSize 64 --*-- Data Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64 --*-- Instruction Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64 ** -- کش یکپارچه 0, سطح 2, 4 مگابایت, Assoc 16, LineSize 64 --*- Data Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 --*- Instruction Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Data Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Instruction Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 --** Unified Cache 1 , Level 2, 4 MB, Assoc 16, LineSize 64 بیایید این اطلاعات را آزمایشی بررسی کنیم. برای انجام این کار، بیایید از طریق آرایه خود بگذریم، هر شانزدهمین مقدار را افزایش دهیم - راهی آسان برای تغییر داده ها در هر خط کش. وقتی به پایان رسیدیم به ابتدا برمی گردیم. بیایید اندازه‌های مختلف آرایه را بررسی کنیم؛ زمانی که آرایه دیگر در حافظه پنهان سطوح مختلف قرار نمی‌گیرد، باید شاهد کاهش عملکرد باشیم. کد این است: int step = 64 * 1024 * 1024; // تعداد تکرارها int lengthMod = arr.Length - 1; // اندازه آرایه -- قدرت دو

برای (int i = 0; i (

// x & lengthMod = x % arr.Length، زیرا توان های دو

Arr[(i * 16) & lengthMod]++; ) نتایج آزمون:

در دستگاه من، پس از 32 کیلوبایت و 4 مگابایت کاهش قابل توجهی در عملکرد وجود دارد - این اندازه‌های کش L1 و L2 هستند.

مثال 4: توازی دستورالعمل
حالا بیایید به چیز دیگری نگاه کنیم. به نظر شما کدام یک از این دو حلقه سریعتر اجرا می شود؟ مراحل int = 256 * 1024 * 1024; int a = جدید int;

برای (int i = 0; i // second for (int i = 0; i مثال 5: ارتباط حافظه پنهان یکی از سؤالات کلیدی که هنگام طراحی کش باید به آن پاسخ داده شود این است که آیا داده ها از یک ناحیه حافظه خاص می توانند در هر حافظه ذخیره شوند یا خیر. سلول های کش یا فقط در برخی از آنها. سه راه حل ممکن:

  1. کش نگاشت مستقیم، داده های هر خط کش در RAM تنها در یک مکان کش از پیش تعریف شده ذخیره می شود. ساده ترین راه برای محاسبه نگاشت این است: row_index_in_memory % number_of_cache_cells. دو خط نگاشت شده به یک سلول نمی توانند همزمان در حافظه پنهان باشند.
  2. N-entry partial-associative cache، هر خط را می توان در N مکان کش مختلف ذخیره کرد. به عنوان مثال، در یک کش 16 ورودی، ممکن است یک خط در یکی از 16 سلول تشکیل دهنده گروه ذخیره شود. به طور معمول، ردیف‌هایی با بیت‌های شاخص کم‌اهمیت مساوی در یک گروه مشترک هستند.
  3. کش کاملاً انجمنی، هر خطی را می توان در هر مکان کش ذخیره کرد. راه حل در رفتار خود معادل جدول هش است.
کش های نگاشت مستقیم مستعد اختلاف هستند، برای مثال، وقتی دو ردیف برای یک سلول با هم رقابت می کنند، به طور متناوب یکدیگر را از حافظه پنهان بیرون می کنند، کارایی بسیار پایین است. از سوی دیگر، کش های کاملاً انجمنی، اگرچه عاری از این عیب هستند، اما پیاده سازی آن بسیار پیچیده و پرهزینه است. حافظه نهان تا حدی انجمنی یک مبادله معمولی بین پیچیدگی پیاده سازی و کارایی است. برای مثال، در دستگاه من، حافظه نهان 4 مگابایتی L2 یک کش 16 ورودی جزئی است. کل RAM بر اساس کمترین بیت های شاخص آنها به مجموعه هایی از خطوط تقسیم می شود، خطوط از هر مجموعه برای یک گروه از 16 سلول کش L2 رقابت می کنند.

از آنجایی که حافظه نهان L2 دارای 65536 سلول (4 * 220 / 64) است و هر گروه از 16 سلول تشکیل شده است، در مجموع 4096 گروه داریم. بنابراین، 12 بیت پایینی شاخص ردیف تعیین می کند که این ردیف به کدام گروه تعلق دارد (212 = 4096). در نتیجه، ردیف‌هایی با آدرس‌هایی که مضربی از ۲۶۲۱۴۴ (۴۰۹۶ * ۶۴) هستند، در گروهی از ۱۶ سلول مشترک هستند و برای فضا در آن رقابت می‌کنند.

برای تأثیرگذاری تأثیرات انجمنی، باید دائماً به تعداد زیادی ردیف از یک گروه دسترسی داشته باشیم، به عنوان مثال، با استفاده از کد زیر: عمومی استاتیک طولانی UpdateEveryKthByte(byte arr, int K) (

const int rep = 1024 * 1024; // تعداد تکرار

Stopwatch sw = Stopwatch.StartNew();

برای (int i = 0; i p += K؛ اگر (p >= arr.Length) p = 0; ) sw.Stop();

بازگشت sw.ElapsedMilliseconds.

) روش هر عنصر Kth آرایه را افزایش می دهد. وقتی به پایان رسیدیم دوباره شروع می کنیم. پس از تعداد بسیار زیادی تکرار (220)، ما متوقف می شویم. من اجراهایی را برای اندازه‌های مختلف آرایه و مقادیر گام K انجام دادم. نتایج (آبی - زمان اجرای طولانی، سفید - کوتاه):

نواحی آبی مربوط به مواردی است که با تغییرات ثابت داده ها، حافظه پنهان قادر به قرار دادن همه داده های مورد نیاز به طور همزمان نیست. رنگ آبی روشن زمان عملیاتی حدود 80 میلی ثانیه، تقریباً سفید - 10 میلی ثانیه را نشان می دهد.

بیایید به مناطق آبی بپردازیم:

  1. چرا خطوط عمودی ظاهر می شوند؟ خطوط عمودی مربوط به مقادیر مرحله ای است که در آنها به تعداد زیادی ردیف (بیش از 16) از یک گروه دسترسی پیدا می شود. برای این مقادیر، حافظه نهان 16 ورودی دستگاه من نمی تواند تمام داده های لازم را در خود جای دهد.

    برخی از مقادیر بد گام دو قدرت هستند: 256 و 512. برای مثال، stride 512 و یک آرایه 8 مگابایتی را در نظر بگیرید. با این مرحله، 32 بخش در آرایه (8 * 220 / 262،144) وجود دارد که برای سلول ها در 512 گروه کش (262،144 / 512) با یکدیگر رقابت می کنند. 32 بخش وجود دارد، اما تنها 16 سلول در حافظه پنهان برای هر گروه وجود دارد، بنابراین فضای کافی برای همه وجود ندارد.

    سایر مقادیر مرحله ای که قدرت دو نیستند، به سادگی بدشانسی هستند، که باعث تعداد زیادی بازدید به همان گروه های کش می شود و همچنین منجر به ظاهر شدن خطوط آبی عمودی در شکل می شود. در این مرحله از دوستداران نظریه اعداد دعوت به تفکر می شود.

  2. چرا خطوط عمودی در مرز 4 مگابایت شکسته می شوند؟ هنگامی که اندازه آرایه 4 مگابایت یا کمتر است، کش 16 ورودی مانند یک کش کاملاً ارتباطی عمل می کند، یعنی می تواند تمام داده های آرایه را بدون درگیری در خود جای دهد. بیش از 16 ناحیه برای یک گروه کش مبارزه نمی کنند (262144 * 16 = 4 * 220 = 4 مگابایت).
  3. چرا یک مثلث آبی بزرگ در بالا سمت چپ وجود دارد؟ زیرا با یک گام کوچک و یک آرایه بزرگ، حافظه پنهان قادر به جا دادن تمام داده های لازم نیست. درجه تداعی کش در اینجا نقش ثانویه دارد؛ محدودیت مربوط به اندازه حافظه نهان L2 است. به عنوان مثال، با اندازه آرایه 16 مگابایت و گام 128، ما به هر 128 بایت دسترسی داریم، بنابراین هر خط کش آرایه دوم را اصلاح می کنیم. برای ذخیره هر خط دوم در حافظه نهان، به 8 مگابایت کش نیاز دارید، اما در دستگاه من فقط 4 مگابایت است.

    حتی اگر حافظه نهان کاملاً ارتباطی باشد، اجازه نمی دهد 8 مگابایت داده در آن ذخیره شود. توجه داشته باشید که در مثالی که قبلاً مورد بحث قرار گرفت، با گام 512 و اندازه آرایه 8 مگابایت، ما فقط به 1 مگابایت حافظه پنهان نیاز داریم تا تمام داده های لازم را ذخیره کنیم، اما این امر به دلیل ناکافی بودن ارتباط کش غیرممکن است.

  4. چرا سمت چپ مثلث به تدریج شدت می یابد؟ حداکثر شدت در مقدار گامی 64 بایت رخ می دهد که برابر با اندازه خط کش است. همانطور که در مثال های اول و دوم دیدیم، دسترسی متوالی به همان ردیف عملاً هیچ هزینه ای ندارد. فرض کنید با یک مرحله 16 بایتی، چهار دسترسی به حافظه به قیمت یک بایت داریم. از آنجایی که تعداد تکرارها در آزمون ما برای هر مقدار مرحله یکسان است، یک گام ارزانتر منجر به زمان اجرای کمتر می شود.
اثرات کشف شده در مقادیر پارامترهای بزرگ باقی می مانند:

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

مثال 6: پارتیشن بندی کش غلط
در ماشین های چند هسته ای، ممکن است با مشکل دیگری روبرو شوید - انسجام کش. هسته های پردازنده دارای کش های جزئی یا کاملا مجزا هستند. در دستگاه من، کش های L1 مجزا هستند (طبق معمول)، و همچنین دو کش L2 به اشتراک گذاشته شده توسط هر جفت هسته وجود دارد. جزئیات ممکن است متفاوت باشد، اما به طور کلی، پردازنده های چند هسته ای مدرن دارای حافظه پنهان سلسله مراتبی چند سطحی هستند. علاوه بر این، سریع‌ترین و همچنین کوچک‌ترین حافظه‌های پنهان به هسته‌های جداگانه تعلق دارند.

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

بیایید این مشکل را با کد زیر نشان دهیم: private static int s_counter = new int;

خلأ خصوصی UpdateCounter (موقعیت int)

{

برای (int j = 0; j (s_counter = s_counter + 3; )

اگر در ماشین چهار هسته ای خود این روش را با پارامترهای 0، 1، 2، 3 به طور همزمان از چهار رشته فراخوانی کنم، زمان اجرا 4.3 ثانیه خواهد بود. اما اگر متد را با پارامترهای 16، 32، 48، 64 فراخوانی کنم، زمان اجرا فقط 0.28 ثانیه خواهد بود. چرا؟ در حالت اول، هر چهار مقدار پردازش شده توسط رشته ها در هر زمان معین به احتمال زیاد به یک خط کش ختم می شوند. هر بار که یک هسته مقداری را افزایش می‌دهد، سلول‌های حافظه پنهان حاوی آن مقدار در هسته‌های دیگر را نامعتبر علامت‌گذاری می‌کند. پس از این عملیات، تمام هسته های دیگر باید خط را دوباره کش کنند. این باعث می شود مکانیسم کش غیر قابل اجرا باشد و عملکرد را از بین ببرد.

مثال 7: پیچیدگی سخت افزار
حتی در حال حاضر، زمانی که اصول عملیات کش برای شما مخفی نیست، سخت افزار همچنان شما را شگفت زده می کند. پردازنده‌ها از نظر روش‌های بهینه‌سازی، اکتشافی و سایر ظرافت‌های پیاده‌سازی با یکدیگر تفاوت دارند.

حافظه نهان L1 برخی از پردازنده ها در صورتی که به گروه های مختلف تعلق داشته باشند می تواند به دو سلول به صورت موازی دسترسی داشته باشد، اما اگر به یک گروه تعلق داشته باشند، فقط به صورت متوالی. تا آنجا که من می دانم، برخی حتی می توانند به بخش های مختلف یک سلول به صورت موازی دسترسی داشته باشند.

ممکن است پردازنده ها با بهینه سازی های هوشمندانه شما را شگفت زده کنند. به عنوان مثال، کد مثال قبلی درباره اشتراک‌گذاری حافظه پنهان نادرست بر روی رایانه خانگی من همانطور که در نظر گرفته شده است کار نمی‌کند - در ساده‌ترین موارد، پردازنده می‌تواند کار را بهینه کند و اثرات منفی را کاهش دهد. اگر کد را کمی تغییر دهید، همه چیز در جای خود قرار می گیرد. در اینجا مثال دیگری از ویژگی های سخت افزاری عجیب و غریب وجود دارد: خصوصی استاتیک int A, B, C, D, E, F, G.

خلأ استاتیک خصوصی Weirdness()

{

برای (int i = 0; i ( ) ) اگر سه گزینه مختلف را جایگزین کنید، می توانید نتایج زیر را دریافت کنید:

افزایش فیلدهای A، B، C، D بیشتر از افزایش فیلدهای A، C، E، G طول می کشد. نکته عجیب تر این است که افزایش فیلدهای A و C بیشتر از فیلدهای A، C و E، G طول می کشد. من نمی دانم برای مطمئناً دلایل این امر چیست، اما شاید آنها به بانک های حافظه مربوط می شوند (بله، با بانک های حافظه پس انداز معمولی سه لیتری، و نه آنچه شما فکر می کردید). اگر نظری در این مورد دارید، لطفا در نظرات مطرح کنید.

در دستگاه من، موارد فوق رعایت نمی شود، با این حال، گاهی اوقات نتایج غیرعادی بدی به دست می آید - به احتمال زیاد، زمانبندی کار "تنظیمات" خود را انجام می دهد.

درسی که از این مثال می‌توان گرفت این است که پیش‌بینی کامل رفتار سخت‌افزار بسیار دشوار است. بله، شما می توانید خیلی چیزها را پیش بینی کنید، اما باید به طور مستمر پیش بینی های خود را از طریق اندازه گیری و آزمایش تایید کنید.

نتیجه
امیدوارم هر آنچه در بالا توضیح داده شد به شما در درک ساختار حافظه پنهان پردازنده کمک کرده باشد. اکنون می توانید این دانش را برای بهینه سازی کد خود در عمل به کار ببرید. * کد منبع با برجسته کننده کد منبع برجسته شد. برچسب ها:

یکی از عوامل مهمی که عملکرد پردازنده را افزایش می دهد، وجود حافظه کش یا بهتر است بگوییم حجم، سرعت دسترسی و توزیع آن در بین سطوح است.

مدتی است که تقریبا تمامی پردازنده ها به این نوع حافظه مجهز شده اند که بار دیگر مفید بودن حضور آن را ثابت می کند. در این مقاله در مورد ساختار، سطوح و هدف عملی حافظه کش صحبت خواهیم کرد که بسیار مهم است. ویژگی های پردازنده.

حافظه کش چیست و ساختار آن

حافظه کش حافظه بسیار سریعی است که توسط پردازنده برای ذخیره موقت داده هایی که اغلب به آنها دسترسی پیدا می کند استفاده می کند. اینگونه می توان به طور خلاصه این نوع حافظه را توصیف کرد.

حافظه کش بر روی فلیپ فلاپ ها ساخته شده است که به نوبه خود از ترانزیستورها تشکیل شده است. گروهی از ترانزیستورها فضای بسیار بیشتری را نسبت به همان خازن هایی که تشکیل می دهند اشغال می کنند رم. این مستلزم مشکلات زیادی در تولید و همچنین محدودیت در حجم است. به همین دلیل است که حافظه نهان یک حافظه بسیار گران است، در حالی که حجم آن ناچیز است. اما مزیت اصلی چنین حافظه ای از این ساختار ناشی می شود - سرعت. از آنجایی که فلیپ فلاپ ها نیازی به بازسازی ندارند و زمان تاخیر دروازه ای که روی آن مونتاژ می شوند کم است، زمان تعویض فلیپ فلاپ از یک حالت به حالت دیگر بسیار سریع اتفاق می افتد. این به حافظه کش اجازه می دهد تا با فرکانس های مشابه پردازنده های مدرن کار کند.

همچنین یک فاکتور مهم محل قرارگیری حافظه کش است. روی خود تراشه پردازنده قرار دارد که زمان دسترسی را به میزان قابل توجهی کاهش می دهد. پیش از این، حافظه نهان برخی از سطوح خارج از تراشه پردازنده، روی یک تراشه SRAM ویژه در جایی روی مادربرد قرار داشت. در حال حاضر، تقریبا تمام پردازنده ها دارای حافظه کش هستند که روی تراشه پردازنده قرار دارد.


حافظه نهان پردازنده برای چه مواردی استفاده می شود؟

همانطور که در بالا ذکر شد، هدف اصلی حافظه کش ذخیره داده هایی است که اغلب توسط پردازنده استفاده می شود. کش یک بافر است که داده ها در آن بارگذاری می شوند و با وجود اندازه کوچک آن (حدود 4-16 مگابایت) پردازنده های مدرن، عملکرد قابل توجهی را در هر برنامه ای افزایش می دهد.

برای درک بهتر نیاز به حافظه کش، بیایید سازماندهی حافظه کامپیوتر را مانند یک دفتر تصور کنیم. RAM یک کابینت با پوشه‌هایی خواهد بود که حسابدار به صورت دوره‌ای برای بازیابی بلوک‌های بزرگ داده (یعنی پوشه‌ها) به آن دسترسی دارد. و جدول یک حافظه کش خواهد بود.

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

به همین ترتیب، داده‌ها را می‌توان از آن بلوک‌های داده بزرگ (پوشه‌ها) برای استفاده سریع، مثلاً یک سند، به جدول اضافه کرد. زمانی که این سند دیگر مورد نیاز نباشد، مجدداً در کابینت (در حافظه RAM) قرار می‌گیرد و بدین ترتیب جدول (حافظه کش) پاک می‌شود و این جدول برای اسناد جدیدی که در دوره‌های بعدی استفاده خواهند شد آزاد می‌شود.

همچنین در مورد حافظه نهان، اگر داده‌ای وجود داشته باشد که احتمال دسترسی مجدد به آن وجود داشته باشد، این داده از RAM در حافظه نهان بارگذاری می‌شود. اغلب، این با بارگذاری مشترک داده‌هایی که به احتمال زیاد بعد از داده‌های فعلی استفاده می‌شوند، اتفاق می‌افتد. یعنی، فرضیاتی در مورد آنچه که «بعد» استفاده خواهد شد وجود دارد. اینها اصول پیچیده عملیاتی هستند.

سطوح حافظه نهان پردازنده

پردازنده های مدرن مجهز به کش هستند که اغلب از 2 یا 3 سطح تشکیل شده است. البته استثناهایی هم وجود دارد، اما اغلب اینطور است.

به طور کلی، سطوح زیر می تواند وجود داشته باشد: L1 (سطح اول)، L2 (سطح دوم)، L3 (سطح سوم). اکنون کمی جزئیات بیشتر در مورد هر یک از آنها:

حافظه نهان سطح اول (L1)– سریعترین سطح حافظه کش که مستقیماً با هسته پردازنده کار می کند، به لطف این تعامل فشرده، این سطح کمترین زمان دسترسی را دارد و در فرکانس های نزدیک به پردازنده کار می کند. این یک بافر بین پردازنده و حافظه نهان سطح دوم است.

ما حجم ها را روی یک پردازنده با عملکرد بالا Intel Core i7-3770K در نظر خواهیم گرفت. این پردازنده به 4x32 KB L1 cache 4 x 32 KB = 128 KB مجهز شده است. (32 کیلوبایت در هر هسته)

حافظه نهان سطح دوم (L2)- سطح دوم از سطح اول بزرگتر است، اما در نتیجه دارای "ویژگی های سرعت" کمتری است. بر این اساس، به عنوان یک بافر بین سطوح L1 و L3 عمل می کند. اگر دوباره به مثال Core i7-3770 K نگاه کنیم، اندازه حافظه کش L2 4x256 کیلوبایت = 1 مگابایت است.

حافظه نهان سطح 3 (L3)- سطح سوم، دوباره، کندتر از دو سطح قبلی است. اما هنوز خیلی سریعتر از رم است. اندازه کش L3 در i7-3770K 8 مگابایت است. اگر دو سطح قبلی توسط هر هسته مشترک باشد، این سطح برای کل پردازنده مشترک است. شاخص کاملاً محکم است، اما گزاف نیست. از آنجایی که به عنوان مثال، برای پردازنده های سری Extreme مانند i7-3960X، 15 مگابایت است و برای برخی از پردازنده های جدید Xeon، بیش از 20.



 


خواندن:



رتبه بندی بهترین هدفون های بی سیم

رتبه بندی بهترین هدفون های بی سیم

آیا می توان گوش های یونیورسال را با قیمت ارزان خریداری کرد؟ 3000 روبل - آیا می توان برای چنین پولی هدفون های باکیفیت خریداری کرد؟ همانطور که معلوم شد، بله. و گفتار...

دوربین اصلی موبایل معمولاً در پشت بدنه قرار دارد و برای گرفتن عکس و فیلم استفاده می شود

دوربین اصلی موبایل معمولاً در پشت بدنه قرار دارد و برای گرفتن عکس و فیلم استفاده می شود

نسخه به روز شده تبلت با ویژگی های بهبود یافته و استقلال بالا. گوشی های هوشمند ایسر به ندرت بازدید می شوند...

چگونه با حفظ شماره خود به اپراتور دیگری سوئیچ کنید

چگونه با حفظ شماره خود به اپراتور دیگری سوئیچ کنید

قانون حفظ شماره تلفن هنگام تغییر مشترک به اپراتور تلفن همراه دیگر در روسیه از اول دسامبر به اجرا درآمد. با این حال، مشخص شد که ...

بررسی یک فبلت، گران قیمت، اما بسیار شایسته

بررسی یک فبلت، گران قیمت، اما بسیار شایسته

نقد و بررسی یک فبلت گران قیمت اما بسیار شایسته 1394/03/20 من تنها کفاش جهان بدون چکمه، منتقد گوشی هوشمند بدون گوشی هوشمند خودم هستم ....

فید-تصویر RSS