Cache حافظه نهان پردازنده چيست
نويسنده:بابک نقاش
کش در کامپيوتر اصطلاحي است که در مورد برخي قطعات مثل هارد و سي.پي.يو بکار مي رود. پس اول به سراغ خود اصطلاح Cache مي روم تا ببينيم اين فناوري چه مي کند.
کش معمولا در زيرمجموعه حافظه ها قرار مي گيرد و کاربرد اصلي آن هم افزايش سرعت سيستم است بطوري که قيمت آن همچنان قابل قبول باشد. اين فناوري پلي است بين يک منطقه اطلاعات بزرگ با سرعت پايين و محلي که اين اطلاعات مورد استفاده قرار مي گيرد و حالا مي توانيم بگوئيم کش چيست. وقتي اطلاعات از روي هاردديسک يا رم فراخوانده مي شوند اين اطلاعات قبل از اين که به مقصد اصلي برسند در نقطه اي ذخيره مي شوند که به اين نقطه کش مي گوييم. سرعت انتقال اطلاعات از کش بالاتر از رم و هارد است و بخشي که نياز به اطلاعات دارد مي تواند با سرعت بيشتري به آن ها دسترسي پيدا کند و در همين فاصله داده هاي ديگر را فرا بخواند يا آن ها را به خروجي ها منتقل کند. اما هميشه هم اينطور نيست که اطلاعات در کش قابل دسترس باشند و بنابراين اگر اطلاعات در کش باشد به اين وضعيت cache hit و اگر نباشد cache miss مي گويند.
امروزه تقريبا با تمام هارد ديسکها وDVD درايوها مجهز به اين حافظه ذخيره کوتاه مدت هستند که به آن بافر هم گفته مي شود اما در اين قطعات معمولا از يک سطح حافظه استفاده مي شود و مانند اغلب پردازنده هاي امروزي مجهز به دو وسه سطح از حافظه کش نيستند. با اين حال همين مقدار هم تاثير قابل توجهي درکارايي آن ها دارد. اما ببينيم اين کش چه تاثيري در پردازنده دارد.
وقتي اطلاعات از روي رم فراخوانده مي شوند60 نانوثانيه(يک ثانيه تقسيم بر60 ميليارد) طول مي کشد تا اين اطلاعات در دسترس قرار بگيرند که مدت زمان واقعا کمي است ولي وقتي به چرخه زماني پردازنده دقت کنيم که تنها 2 نانو ثانيه است مي فهميم اين زمان براي پردازنده زماني طولاني است. کش هاي اوليه ابتدا روي مادربورد قرار گرفتند و زمان دسترسي به اطلاعات را به 30 نانو ثانيه کاهش دادند و بعد مشخص شد که اين مقدار هم کافي نيست و يک لايه ديگر به آن اضافه کردند که اين بار اين لايه درون پردازنده قرار گرفت و با همان سرعت پردازنده کار مي کرد. بعدها اين ساختار به کلي عوض شد و اکنون علاوه براين دو لايه يک لايه ديگر هم به حافظه دروني پردازنده اضافه شده که شروع کار آن را مي توان از زمان ورود پردازنده هاي چند هسته دانست.
نکته اي که در مورد کش بايد توجه کرد قيمت اين حافظه ها است. کش بيشتر ممکن است تاثير مثبتي روي کارآيي داشته باشد اما قيمت آن تا يک حد مشخص براي مصرف کننده قابل قبول است و به همين دليل معمولا صرف نظر از توانايي هاي فني در ساخت پردازنده اين نکته هم مورد توجه قرار مي گيرد. مثال آن هم حجم کش پايين در مدل هاي ارزان قيمت است.
وظيفه تمام اين لايه ها اين است که تا حد امکان داده ها را نزديک پردازنده نگه دارند تا پردازنده مجبور به فراخواني اطلاعات از فاصله اي دورتر با سرعت کم تر و زمان بالاتر نباشد. اين ها باعث شده تا در ساختار لايه ها مخصوصاً لايه دوم و سوم علاوه بر ذخيره اطلاعات مورد نياز، از اشغال پهناي باند پردازنده با انتقال داده ها بين هسته ها و ايجاد ترافيک غيرضروري در اين ناحيه خودداري شود. شيوه ذخيره اطلاعات در لايه هاي مختلف نيز متفاوت است. داده ها مي توانند به صورت انحصاري در يک لايه قرار بگيرند. يا در لايه هاي مختلف تکرار شوند. آنچه مشخص است اين که در يک لايه اطلاعات تکرار نمي شوند و نمي توان دو لايه همسان را در يک لايه پيدا کرد ولي با کاهش سطح لايه ها و براي نزديک شدن اطلاعات به هسته هاي پردازشي اين داده ها تکرار مي شوند و در هر سطح مي توان قسمتي از اطلاعات لايه بالاتر را ديد. اينتل و AMD سياست يکساني در اين مورد ندازند به عنوان مثال در فنومهاي AMD اطلاعات به صورت انحصاري در يک لايه هستند ولي در اينتل از روش جمع داده ها بين لايه ها استفاده مي شود.
فراخواني اطلاعات از سمت کش نيز مي تواند حالت هاي مختلف داشته باشد. در يکي از اين حالت ها تنها در يک مسير اطلاعات روي کش کپي مي شوند که مزيت هايي مثل آدرس دهي بهتر اطلاعات روي رم را دارد اما در مقابل چندين مسير براي کپي کردن اطلاعات روي رم به کار گرفته مي شوند که اين روش هم مزايا و معايبي دارد. مزيت آن در اين است که اطلاعات روي کش بازنويسي نمي شوند و زمان دسترسي به داده هاي رم کوتاه تر خواهد بود اما از طرف ديگر مقايسه اطلاعات انتقال داده شده روي کش با رم باعث افزايش زمان تاخير رم مي شود. امروزه مشخص شده که استفاده از چند مسير انعطاف بيشتري را براي پردازنده ايجاد مي کند و کارآيي بهتري دارد. اينتل در پردازنده هاي جديد خود مثل Core i7 و i5 در سطح L1 از هشت مسير براي انتقال دستورالعمل ها و از 4 مسير براي انتقال داده ها استفاده مي کند که در سطح L2 نيز تقريبا همينطور است و 8 مسير براي انتقال اطلاعات استفاده مي شوند درحالي که در لايه سوم 16 مسير براي ارتباط گذاشته شده است.
اما در AMD شيوه متفاوتي به کار گرفته شده که از مهم ترين دلايل اختلاف اين نوع پردازنده ها با اينتل است. در فنوم هاي چهارهسته اي براي لايه اول تنها 2 مسير ايجاد شده که باعث کاهش زمان تاخير مي شود. اما در کنار آن ظرفيت لايه L1 افزايش داده شده و64 کيلوبايت براي دستورالعمل ها و64 کيلوبايت نيز براي داده ها است. AMD در لايه هاي بعدي تهاجمي تر عمل مي کند بطوريکه در لايه دوم همان هشت مسير را استفاده کرده که مشابه اينتل است ولي در لايه سوم 48 مسير براي انتقال اطلاعات فراهم شده است.
اين ساختار و تفاوت معماري کش نمي تواند معيار کاملي براي مقايسه محصولات اين دو توليد کننده بزرگ پردازنده باشد و در کنار آن بايد به ساير عوامل هم توجه کرد. ولي اين نکات از اين نظر که تفاوت بين اين دوتوليد کننده را بدانيد بد نيست.
اولين سطح از کش داراي دو بخش است و محلي است که دستورالعمل هاي پردازنده و داده هاي مهم در آن قرار مي گيرد. اين سطح L1 ناميده مي شود. AMD اخيرا (در همين يکي دو ساله) ساختار 64 کيلوبايتي را به کش پردازنده هايش اضافه کرده و هر يک از اين دو بخش (داده ها و دستورالعمل ها) داراي 64 کيلو بايت حافظه هستند در حالي که اينتل همچنان به ساختار 32 کيلو بايتي متعهد مانده است. اين لايه براي هر يک از هسته ها اختصاصي است و اطلاعات هر هسته در اختيار ساير هسته ها قرار نمي گيرد. کش در لايه دوم تا مدت ها به صورت مستقل براي هر هسته بود و حتي پيش از آن هم فقط AMD از اين لايه درون CPU استفاده مي کرد و در اينتل کش لايه دوم با هسته ها روي يک سطح نبودند. در واقع پس از معرفي فناوري ساخت 180 نانومتري کش لايه دوم به سطح سيليکوني CPU اضافه شد. با ورود پردازنده هاي Core 2 Due کش مشترک در اينتل خلق شد و لايه دوم بطور مشترک بين دو هسته مورد استفاده قرار گرفت و اين روش در چهارهسته اي هاي اينتل هم ادامه پيدا کرد تا جايي که در چهارهسته اي دوکش L2 ديده مي شد. زيرا اين مدل ها چهارهسته اي واقعي نبودند و از اتصال دو سطح سيليکوني هر يک با دو هسته تشکيل شدند. البته دليل اينتل براي اين شيوه مسائل اقتصادي و صرف اين مدل ها مطرح شد با اين حال AMD ساختار جديد را در فنوم ها پياده کرد که همراه با کش لايه سوم بود.
کش لايه سوم سال ها پيش ايجاد شد و البته مشکلات خاص خود را داشت بطوريکه بعد از استفاده IBM در سال 1995 اين سطح حافظه چندان مورد توجه قرار نگرفت تا اين که اينتل اين لايه ها را در سال 2003 به رده حرفه اي محصولات خود اضافه کرد. نتيجه اين شد که ايتانيوم و پنتيوم 4 اکستريم صاحب L3 شدند و نسل فنوم هاي AMD نيز از همان ابتدا با L3 همراه شدند هر چند که مدل هاي اوليه تنها 2 مگابايت حافظه L3 داشتند و در مدل هاي بعدي هم بطور متوسط از 6 مگابايت حافظه استفاده شد. در اين مرحله اينتل توانست سطح بالاتري از کش را در لايه سوم ارايه دهد.
منبع:عصر ارتباط- ش351
/ج
کش معمولا در زيرمجموعه حافظه ها قرار مي گيرد و کاربرد اصلي آن هم افزايش سرعت سيستم است بطوري که قيمت آن همچنان قابل قبول باشد. اين فناوري پلي است بين يک منطقه اطلاعات بزرگ با سرعت پايين و محلي که اين اطلاعات مورد استفاده قرار مي گيرد و حالا مي توانيم بگوئيم کش چيست. وقتي اطلاعات از روي هاردديسک يا رم فراخوانده مي شوند اين اطلاعات قبل از اين که به مقصد اصلي برسند در نقطه اي ذخيره مي شوند که به اين نقطه کش مي گوييم. سرعت انتقال اطلاعات از کش بالاتر از رم و هارد است و بخشي که نياز به اطلاعات دارد مي تواند با سرعت بيشتري به آن ها دسترسي پيدا کند و در همين فاصله داده هاي ديگر را فرا بخواند يا آن ها را به خروجي ها منتقل کند. اما هميشه هم اينطور نيست که اطلاعات در کش قابل دسترس باشند و بنابراين اگر اطلاعات در کش باشد به اين وضعيت cache hit و اگر نباشد cache miss مي گويند.
امروزه تقريبا با تمام هارد ديسکها وDVD درايوها مجهز به اين حافظه ذخيره کوتاه مدت هستند که به آن بافر هم گفته مي شود اما در اين قطعات معمولا از يک سطح حافظه استفاده مي شود و مانند اغلب پردازنده هاي امروزي مجهز به دو وسه سطح از حافظه کش نيستند. با اين حال همين مقدار هم تاثير قابل توجهي درکارايي آن ها دارد. اما ببينيم اين کش چه تاثيري در پردازنده دارد.
وقتي اطلاعات از روي رم فراخوانده مي شوند60 نانوثانيه(يک ثانيه تقسيم بر60 ميليارد) طول مي کشد تا اين اطلاعات در دسترس قرار بگيرند که مدت زمان واقعا کمي است ولي وقتي به چرخه زماني پردازنده دقت کنيم که تنها 2 نانو ثانيه است مي فهميم اين زمان براي پردازنده زماني طولاني است. کش هاي اوليه ابتدا روي مادربورد قرار گرفتند و زمان دسترسي به اطلاعات را به 30 نانو ثانيه کاهش دادند و بعد مشخص شد که اين مقدار هم کافي نيست و يک لايه ديگر به آن اضافه کردند که اين بار اين لايه درون پردازنده قرار گرفت و با همان سرعت پردازنده کار مي کرد. بعدها اين ساختار به کلي عوض شد و اکنون علاوه براين دو لايه يک لايه ديگر هم به حافظه دروني پردازنده اضافه شده که شروع کار آن را مي توان از زمان ورود پردازنده هاي چند هسته دانست.
نکته اي که در مورد کش بايد توجه کرد قيمت اين حافظه ها است. کش بيشتر ممکن است تاثير مثبتي روي کارآيي داشته باشد اما قيمت آن تا يک حد مشخص براي مصرف کننده قابل قبول است و به همين دليل معمولا صرف نظر از توانايي هاي فني در ساخت پردازنده اين نکته هم مورد توجه قرار مي گيرد. مثال آن هم حجم کش پايين در مدل هاي ارزان قيمت است.
وظيفه تمام اين لايه ها اين است که تا حد امکان داده ها را نزديک پردازنده نگه دارند تا پردازنده مجبور به فراخواني اطلاعات از فاصله اي دورتر با سرعت کم تر و زمان بالاتر نباشد. اين ها باعث شده تا در ساختار لايه ها مخصوصاً لايه دوم و سوم علاوه بر ذخيره اطلاعات مورد نياز، از اشغال پهناي باند پردازنده با انتقال داده ها بين هسته ها و ايجاد ترافيک غيرضروري در اين ناحيه خودداري شود. شيوه ذخيره اطلاعات در لايه هاي مختلف نيز متفاوت است. داده ها مي توانند به صورت انحصاري در يک لايه قرار بگيرند. يا در لايه هاي مختلف تکرار شوند. آنچه مشخص است اين که در يک لايه اطلاعات تکرار نمي شوند و نمي توان دو لايه همسان را در يک لايه پيدا کرد ولي با کاهش سطح لايه ها و براي نزديک شدن اطلاعات به هسته هاي پردازشي اين داده ها تکرار مي شوند و در هر سطح مي توان قسمتي از اطلاعات لايه بالاتر را ديد. اينتل و AMD سياست يکساني در اين مورد ندازند به عنوان مثال در فنومهاي AMD اطلاعات به صورت انحصاري در يک لايه هستند ولي در اينتل از روش جمع داده ها بين لايه ها استفاده مي شود.
فراخواني اطلاعات از سمت کش نيز مي تواند حالت هاي مختلف داشته باشد. در يکي از اين حالت ها تنها در يک مسير اطلاعات روي کش کپي مي شوند که مزيت هايي مثل آدرس دهي بهتر اطلاعات روي رم را دارد اما در مقابل چندين مسير براي کپي کردن اطلاعات روي رم به کار گرفته مي شوند که اين روش هم مزايا و معايبي دارد. مزيت آن در اين است که اطلاعات روي کش بازنويسي نمي شوند و زمان دسترسي به داده هاي رم کوتاه تر خواهد بود اما از طرف ديگر مقايسه اطلاعات انتقال داده شده روي کش با رم باعث افزايش زمان تاخير رم مي شود. امروزه مشخص شده که استفاده از چند مسير انعطاف بيشتري را براي پردازنده ايجاد مي کند و کارآيي بهتري دارد. اينتل در پردازنده هاي جديد خود مثل Core i7 و i5 در سطح L1 از هشت مسير براي انتقال دستورالعمل ها و از 4 مسير براي انتقال داده ها استفاده مي کند که در سطح L2 نيز تقريبا همينطور است و 8 مسير براي انتقال اطلاعات استفاده مي شوند درحالي که در لايه سوم 16 مسير براي ارتباط گذاشته شده است.
اما در AMD شيوه متفاوتي به کار گرفته شده که از مهم ترين دلايل اختلاف اين نوع پردازنده ها با اينتل است. در فنوم هاي چهارهسته اي براي لايه اول تنها 2 مسير ايجاد شده که باعث کاهش زمان تاخير مي شود. اما در کنار آن ظرفيت لايه L1 افزايش داده شده و64 کيلوبايت براي دستورالعمل ها و64 کيلوبايت نيز براي داده ها است. AMD در لايه هاي بعدي تهاجمي تر عمل مي کند بطوريکه در لايه دوم همان هشت مسير را استفاده کرده که مشابه اينتل است ولي در لايه سوم 48 مسير براي انتقال اطلاعات فراهم شده است.
اين ساختار و تفاوت معماري کش نمي تواند معيار کاملي براي مقايسه محصولات اين دو توليد کننده بزرگ پردازنده باشد و در کنار آن بايد به ساير عوامل هم توجه کرد. ولي اين نکات از اين نظر که تفاوت بين اين دوتوليد کننده را بدانيد بد نيست.
اولين سطح از کش داراي دو بخش است و محلي است که دستورالعمل هاي پردازنده و داده هاي مهم در آن قرار مي گيرد. اين سطح L1 ناميده مي شود. AMD اخيرا (در همين يکي دو ساله) ساختار 64 کيلوبايتي را به کش پردازنده هايش اضافه کرده و هر يک از اين دو بخش (داده ها و دستورالعمل ها) داراي 64 کيلو بايت حافظه هستند در حالي که اينتل همچنان به ساختار 32 کيلو بايتي متعهد مانده است. اين لايه براي هر يک از هسته ها اختصاصي است و اطلاعات هر هسته در اختيار ساير هسته ها قرار نمي گيرد. کش در لايه دوم تا مدت ها به صورت مستقل براي هر هسته بود و حتي پيش از آن هم فقط AMD از اين لايه درون CPU استفاده مي کرد و در اينتل کش لايه دوم با هسته ها روي يک سطح نبودند. در واقع پس از معرفي فناوري ساخت 180 نانومتري کش لايه دوم به سطح سيليکوني CPU اضافه شد. با ورود پردازنده هاي Core 2 Due کش مشترک در اينتل خلق شد و لايه دوم بطور مشترک بين دو هسته مورد استفاده قرار گرفت و اين روش در چهارهسته اي هاي اينتل هم ادامه پيدا کرد تا جايي که در چهارهسته اي دوکش L2 ديده مي شد. زيرا اين مدل ها چهارهسته اي واقعي نبودند و از اتصال دو سطح سيليکوني هر يک با دو هسته تشکيل شدند. البته دليل اينتل براي اين شيوه مسائل اقتصادي و صرف اين مدل ها مطرح شد با اين حال AMD ساختار جديد را در فنوم ها پياده کرد که همراه با کش لايه سوم بود.
کش لايه سوم سال ها پيش ايجاد شد و البته مشکلات خاص خود را داشت بطوريکه بعد از استفاده IBM در سال 1995 اين سطح حافظه چندان مورد توجه قرار نگرفت تا اين که اينتل اين لايه ها را در سال 2003 به رده حرفه اي محصولات خود اضافه کرد. نتيجه اين شد که ايتانيوم و پنتيوم 4 اکستريم صاحب L3 شدند و نسل فنوم هاي AMD نيز از همان ابتدا با L3 همراه شدند هر چند که مدل هاي اوليه تنها 2 مگابايت حافظه L3 داشتند و در مدل هاي بعدي هم بطور متوسط از 6 مگابايت حافظه استفاده شد. در اين مرحله اينتل توانست سطح بالاتري از کش را در لايه سوم ارايه دهد.
منبع:عصر ارتباط- ش351
/ج