مسئله: چند کش خصوصی، یک حافظه مشترک
در یک پردازنده چندهستهای، که پیشتر در این مجموعه بهعنوان بخشی از گذار از هستههای تکسریع بحث شد، هر هسته معمولاً کش خصوصی خودش را برای سرعت دارد. این خطر ظریفی ایجاد میکند: اگر دو هسته هر دو یک کپی از همان مکان حافظه را کش کنند، و یک هسته کپی خودش را بهروزرسانی کند، کپی کششده هسته دیگر بدون هیچ نشانهای از تغییر، قدیمی میشود.
کش هسته ۱: مقدار X = 10
کش هسته ۲: مقدار X = 10 (همان مقدار، جداگانه کششده)
هسته ۱ مقدار X را در کش خودش به ۲۰ بهروزرسانی میکند
کش هسته ۲ همچنان X = 10 را نشان میدهد (قدیمی، نادرست)انسجام کش چه چیزی را تضمین میکند
Cache Coherence ویژگیای است که تضمین میکند هر هسته یک دید سازگار و درست از حافظه مشترک میبیند، با وجود اینکه هر هسته کش خصوصی خودش را دارد. یک سیستم منسجم باید تضمین کند نوشتن توسط یک هسته در نهایت برای همه هستههای دیگر قابلمشاهده میشود، و اینکه هستههای مختلف هرگز بهطور دائم درباره مقدار همان مکان حافظه اختلافنظر ندارند.
پروتکلهای Snooping چگونه این مسئله را حل میکنند
یک رویکرد رایج مورد استفاده برای حفظ انسجام Snooping نامیده میشود، جایی که هر کش یک باس ارتباطی مشترک را برای عملیاتهای حافظه انجامشده توسط هستههای دیگر نظارت میکند، یا "snoop" میکند. وقتی یک هسته به یک مکان حافظه مینویسد، هر کش دیگر بررسی میکند آیا او نیز یک کپی از همان مکان را نگه میدارد، و اگر چنین باشد، اقدام اصلاحی انجام میدهد، یا کپی خودش را بهروزرسانی میکند یا آن را کاملاً باطل میکند، بسته به پروتکل خاص مورد استفاده.
حالتهای رایج سبک MESI
یک خانواده بهطور گسترده استفادهشده از پروتکلهای انسجام، هر بلوک کششده را با استفاده از مجموعه کوچکی از حالتها ردیابی میکند، و ردیابی میکند آیا ممکن است با کشهای دیگر مشترک باشد و آیا تغییر کرده است.
Modified: این کش تنها کپی معتبر را نگه میدارد، و از زمانی که از حافظه خوانده شده تغییر کرده است.Shared: این کش کپیای را نگه میدارد که ممکن است در کشهای دیگر نیز، بدون تغییر، موجود باشد.Invalid: کپی این کش دیگر معتبر نیست و باید پیش از استفاده دوباره واکشی شود.
وقتی یک هسته به بلوکی که در حال حاضر shared علامتگذاری شده مینویسد، یک ابطال پخش میکند، که باعث میشود هر کش دیگری که آن بلوک را نگه میدارد آن را به invalid تغییر دهد، و تضمین میکند هیچ هسته دیگری نمیتواند به خواندن یک مقدار قدیمی ادامه دهد.
چرا این مسئله با هستههای بیشتر سختتر میشود
با افزایش تعداد هستهها، پخش هر پیام مرتبط با انسجام به هر کش دیگر از نظر ترافیک باس و توان بهطور فزاینده گران میشود. این چالش بخشی از دلیلی است که چرا طراحی پروتکلهای انسجام برای سیستمهایی با تعداد بسیار زیاد هسته یک حوزه پژوهشی قابلتوجه و در حال انجام در معماری پردازنده است، که نیازمند جایگزینهای مقیاسپذیرتر برای snooping ساده مبتنی بر پخش است.
چرا انسجام برای برنامههای موازی درست اهمیت دارد
بدون انسجام کش، نوشتن نرمافزار چندرشتهای درست بهطور چشمگیری سختتر خواهد بود، چون یک برنامهنویس باید صراحتاً مدیریت کند چه زمانی داده در سراسر هستههای مختلف قابلمشاهده میشود. سختافزار انسجام این را بهطور شفاف مدیریت میکند، و اجازه میدهد عناصر پایه همگامسازی که پیشتر در این مجموعه بحث شد، مانند دستورات اتمیک، روی یک سیستم حافظه که از دیدگاه برنامهنویس طوری رفتار میکند که گویی فقط یک حافظه یکپارچه واحد وجود دارد نه چند کش جداگانه، بهدرستی کار کنند.