Download presentation
Presentation is loading. Please wait.
1
حافظه ی نهان دانشگاه ایلام
2
انواع حافظه Type Size Speed Cost/bit Register < 1KB < 1ns $$$$
On-chip SRAM 8KB-6MB < 10ns $$$ Off-chip SRAM 1Mb – 16Mb < 20ns $$ DRAM 64MB – 1TB < 100ns $ Disk 40GB – 1PB < 20ms ~0
3
سلسله مراتب حافظه CAPACITY SPEED and COST Registers On-Chip SRAM
Off-Chip SRAM DRAM Disk
4
چرا سلسله مراتب حافظه کار می کند؟
محلی بودن ارجاعات زمانی یک مکان از حافظه په صورت پشت سر هم مورد ارجاع قرار می گیرد. مکانی مکانهای متوالی حافظه به صورت پشت سر هم مورد ارجاع قرار می گیرند. موضوع فوق از لحاظ تجربی ثابت شده است. نتیجه ی مهم و با ارزشی است. حتی یک حافظه ی نهان کوچک (8KB) نیز می تواند 90% ارجاعات یک برنامه چند مگابایتی را پوشش دهد. Lots of dynamic RAM A little static RAM (cache) CPU
5
مثال در قطعه کدهای روبرو شی employee و آرایه ی a از ارجاع به محلهای متوالی حافظه (spatial locality) می برند. متغییر sum از ارجاعات همزمان به یک مکان مشابه از حافظه (temporal locality) بهره می برد. sum = 0; for (i = 0; i < MAX; i++) sum = sum + a[i]; employee.name = “Homer Simpson”; employee.boss = “Mr. Burns”; employee.age = 45;
6
چهار سوال مهم؟ مکان یابی تشخیص جابجایی سیاست نوشتن
یک بلوک حافظه از حافظه ی اصلی را در کجای حافظه ی نهان ذخیره کنیم؟ تشخیص از کجا بدانیم که مطلب مورد نظر در حافظه ی نهان قرار دارد؟ جابجایی در صورت پر بودن حافظه ی نهان کدام بلوک را جابجا کنیم؟ سیاست نوشتن تغییرات حافظه ی نهان را کی به حافظه ی اصلی منتقل کنیم؟
7
مکان یابی Memory Type Placement Comments Registers
Anywhere; Int, FP, SPR Compiler/programmer manages Cache (SRAM) Fixed in H/W Direct-mapped, set-associative, fully-associative DRAM Anywhere O/S manages Disk HUH?
8
طراحی حافظه ی نهان
9
نگاشت مستقیم
11
نگاشت مستقیم به این سوال جواب دهید
1200d= B 24 به این سوال جواب دهید فرض کنید که حافظه ی نهان دارای 64 بلوک است و اندازه ی هر بلوک حافظه ی نهان برابر 16 بیت است و عرض حافظه ی اصلی 8 بیت است. آدرس 1200 در کجا قرار می گیرد؟
12
انجمنی کامل بلوک داده می تواند در هر جایی باشد.
Tag Address SRAM Cache ?= Hit Hash Tag Check بلوک داده می تواند در هر جایی باشد. یعنی باید تمام برچسب ها را همزمان با هم مقایسه کنیم. خیلی گران است. Offset Data Out 32-bit Address Tag Offset
13
انجمنی چهار مسیره
14
مکان یابی و تشخیص فرض کنید که در نمایش <BS, S, B>:
Offset 32-bit Address Tag Index طول منظور بخش o=log2(اندازه ی بلوک) انتخاب کلمه ی مورد نظر در داخل بلوک Offset i=log2(تعداد اعضای یک مجموعه ها) انتخاب یک مجموعه از بلوکها Index t=32 - o - i Idبلوک مورد نظر در داخل مجموعه Tag فرض کنید که در نمایش <BS, S, B>: BS اندازه ی بلوک، S تعداد اعضای هر مجموعه و B نیز تعداد بلوکهای حافظه ی نهان است. لذا، تعداد مجموعه ها برابر است با B/S. <32,64,64>: o=5, i=6, t=21: direct-mapped (S=B) <32,16,64>: o=5, i=4, t=23: 4-way S-A (S = B / 4) <32,1,64>: o=5, i=0, t=27: fully associative (S=1) Total size = BS x B = BS x S x (B/S)
15
جابجایی اندازه حافظه ی نهان محدود است
اگر حافظه ی نهان پر شد چکار کنیم؟ FIFO (first-in-first-out) LRU (least recently used) NMRU (not most recently used) Pseudo-random (yes, really!) در نگاشت مستقیم کاندید جابجایی مشخص است. در نگاشت انجمنی اگر حافظه ی نهان دو مسیره باشد، LRU را به آسانی می توان پیاده کرد. اگر تعداد مجموعه ها از 2 بیشتر باشد، روش انتخاب شبه تصادفی مناسب است!
16
سیاست نوشتن سلسله مراتب حافظه هنگام نوشتن چکار کنیم؟
دو یا بیشتر کپی از یک بلوک یکسان حافظه ی اصلی و حافظه ی جانبی هنگام نوشتن چکار کنیم؟ در نهایت، تمام کپیها باید یکسان شوند. یعنی، نوشتن باید در تمام سطوح منتشر شود.
17
سیاست نوشتن: write-through
خیلی راحت است عمل نوشتن در سلسه مراتب حافظه منتشر می شود. Write in L1, L2, memory, disk (?!?) ایرادات پهنای باند مورد نیاز زیاد است. حافظه های سطوح پایینتر کندتر هستند. در عمل، L1 و L2 از این سیاست استفاده می کنند.
18
سیاست نوشتن: write-back
پر کاربرد است باید از وضعیت هر خط از حافظه ی نهان نگهداری کنیم. Invalid: یعنی بلوک مورد نظر در حافظه ی نهان نیست. Clean : یعنی بلوک مورد نظر موجود است اما تغییر نکرده است. Dirty : یعنی بلوک مورد نظر موجود است اما تغییر کرده است. وضعیت در کنار برچسب ذخیره می شود. هنگام نوشتن بیت dirty را تنظیم کنید. هنگام خروج از حافظه، اگر بیت dirty تنظیم شده بود داده را در سطوح پایینتر ذخیره کنید.
19
سیاست نوشتن پیچیدگیهای write back:
نسخه ی داده در سطوح پایینتر کهنه هستند. همیشه هنگام دسترسی به سطوح پایینتر، ابتدا باید سطوح بالاتر را چک کرد. در سیستمهای تک پردازنده ای خیلی اذیت نمی کند. در سیستمهای چند پردازنده ای باید همبستگی داده ها چک شود. دستگاههای I/O که مستقیما به حافظه دسترسی دارند نیز این مشکل را دارند.
20
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU Reference Binary Set/Way Hit/Miss
21
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 10 1 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss
22
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 10 1 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit
23
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 10 1 11 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit Load 0x3C 111100 3/0
24
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 10 1 11 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit Load 0x3C 111100 3/0 Load 0x20 100000 0/0
25
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 10 11 1 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit Load 0x3C 111100 3/0 Load 0x20 100000 0/0 Load 0x33 110011 0/1
26
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
Tag Array 32B Cache: <BS=4,S=4,B=8> o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag0 Tag1 LRU 01 11 1 10 Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit Load 0x3C 111100 3/0 Load 0x20 100000 0/0 Load 0x33 110011 0/1 Load 0x11 010001 0/0 (lru) Miss/Evict
27
مثال حافظه ی نهان 32B Cache: <BS=4,S=4,B=8> دنباله ی اجرا:
o=2, i=2, t=2; انجمنی دو مسیره در ابتدا خالی است. فقط برچسبها را نشان داده ایم. دنباله ی اجرا: Tag Array Tag0 Tag1 LRU 01 11 1 10 d Reference Binary Set/Way Hit/Miss Load 0x2A 101010 2/0 Miss Load 0x2B 101011 Hit Load 0x3C 111100 3/0 Load 0x20 100000 0/0 Load 0x33 110011 0/1 Load 0x11 010001 0/0 (lru) Miss/Evict Store 0x29 101001 Hit/Dirty
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.