Protsessor uchun qancha sahifa maydoni ishlatiladi. Qattiq disk kesh xotirasi nima va u nima uchun? Kesh arxitekturasi va tamoyillari

Protsessor uchun qancha sahifa maydoni ishlatiladi. Qattiq disk kesh xotirasi nima va u nima uchun? Kesh arxitekturasi va tamoyillari

Kesh - xotira (kesh, naqd pul, bufer- o'zbek.) - raqamli qurilmalarda yuqori tezlikdagi almashuv buferi sifatida ishlatiladi. Kesh xotirani protsessorlar, tarmoq kartalari, kompakt disklar va boshqalar kabi kompyuter qurilmalarida topish mumkin.

Keshning ishlash printsipi va arxitekturasi juda farq qilishi mumkin.

Masalan, kesh odatiy bo'lib xizmat qilishi mumkin almashish buferi . Qurilma ma'lumotlarni qayta ishlaydi va uni yuqori tezlikdagi buferga o'tkazadi, bu erda boshqaruvchi ma'lumotlarni interfeysga uzatadi. Bunday kesh xatolarni oldini olish, apparatni tekshirish ma'lumotlarining yaxlitligini tekshirish yoki qurilmadan signalni interfeys uchun tushunarli signalga, kechikishlarsiz kodlash uchun mo'ljallangan. Ushbu tizim, masalan, yilda qo'llaniladi CD/DVD CD drayvlar.

Boshqa holatda, kesh xizmat qilishi mumkin tez-tez ishlatiladigan kodni saqlash va shu bilan ma'lumotlarni qayta ishlashni tezlashtiradi. Ya'ni, qurilma ma'lumotlarni hisoblash yoki qayta qidirishga hojat yo'q, bu keshdan o'qishdan ko'ra ko'proq vaqt talab etadi. Bunday holda, keshning hajmi va tezligi juda muhim rol o'ynaydi.

Ushbu arxitektura ko'pincha qattiq disklarda va markaziy protsessorlarda uchraydi ( Markaziy protsessor).

Qurilmalar ishlayotganda keshga maxsus proshivka yoki dispetcher dasturlari yuklanishi mumkin, ular bilan sekinroq ishlaydi. ROM(faqat o'qish xotirasi).

Aksariyat zamonaviy qurilmalar qo'llaniladi aralash kesh turi , bu ham almashish buferi, ham tez-tez ishlatiladigan kodni saqlash uchun xizmat qilishi mumkin.

Protsessorlar va video chiplarni keshlash uchun amalga oshirilgan bir nechta juda muhim funktsiyalar mavjud.

Ijro birliklarini birlashtirish . Markaziy protsessorlar va video protsessorlar ko'pincha yadrolar o'rtasida tez umumiy keshdan foydalanadilar. Shunga ko'ra, agar bitta yadro ma'lumotni qayta ishlagan bo'lsa va u keshda bo'lsa va xuddi shu operatsiyani bajarish yoki ushbu ma'lumotlar bilan ishlash uchun buyruq olingan bo'lsa, u holda ma'lumotlar protsessor tomonidan qayta ishlanmaydi, balki ma'lumotlardan olinadi. keyingi ishlov berish uchun kesh. Boshqa ma'lumotlarni qayta ishlash uchun yadro o'chiriladi. Bu, ayniqsa, kesh katta va tez bo'lsa, shunga o'xshash, ammo murakkab hisob-kitoblarda ishlashni sezilarli darajada oshiradi.

Umumiy kesh, shuningdek, yadrolarga sekinni chetlab o'tib, to'g'ridan-to'g'ri u bilan ishlashga imkon beradi.

Ko'rsatmalar uchun kesh. Yo'riqnomalar va boshqa operatsiyalar uchun umumiy, juda tez L1 keshi yoki ular uchun maxsus kesh mavjud. Protsessorda qancha ko'rsatmalar saqlangan bo'lsa, ko'rsatmalar keshi shunchalik katta bo'ladi. Bu xotiraning kechikishini kamaytiradi va ko'rsatma blokining deyarli mustaqil ishlashiga imkon beradi, u to'lganida, ko'rsatmalar bloki vaqti-vaqti bilan bo'sh bo'lib qoladi, bu esa hisoblash tezligini pasaytiradi.

Boshqa funktsiyalar va xususiyatlar.

Shunisi e'tiborga loyiqki, yilda Markaziy protsessor(markaziy qayta ishlash birliklari), qo'llaniladi apparat xatosini tuzatish (ECC), chunki keshdagi kichik xatolik ushbu ma'lumotlarni keyingi qayta ishlash jarayonida bitta doimiy xatolikka olib kelishi mumkin.

IN Markaziy protsessor Va GPU mavjud kesh ierarxiyasi , bu sizga alohida yadrolar va umumiy bo'lganlar uchun ma'lumotlarni ajratish imkonini beradi. Ikkinchi darajali keshdan deyarli barcha ma'lumotlar hali ham uchinchi, umumiy darajaga ko'chirilgan bo'lsa-da, lekin har doim ham emas. Birinchi kesh darajasi eng tezdir va har bir keyingisi sekinroq, lekin hajmi kattaroqdir.

Protsessorlar uchun bu normal hisoblanadi uch va kamroq kesh darajalari. Bu tezlik, kesh hajmi va issiqlik tarqalishi o'rtasidagi muvozanatni ta'minlaydi. Video protsessorlarida ikkitadan ortiq kesh darajasini topish qiyin.

Kesh hajmi, ishlash ta'siri va boshqa xususiyatlar.

Tabiiyki, kesh qanchalik katta, qancha ko'p ma'lumotlarni saqlashi va qayta ishlashi mumkin, ammo jiddiy muammo bor.

Katta kesh- Bu katta byudjet. Server protsessorlarida ( Markaziy protsessor), keshdan foydalanish mumkin 80% tranzistorlar byudjeti. Birinchidan, bu yakuniy xarajatga ta'sir qiladi, ikkinchidan, energiya iste'moli va issiqlik tarqalishi ortadi, bu esa hosildorlikning bir necha foizga oshgani bilan taqqoslanmaydi.

Protsessor unumdorligini oshiradigan muhim omillardan biri bu kesh xotirasining mavjudligi, aniqrog'i uning hajmi, kirish tezligi va darajalar o'rtasida taqsimlanishi.

Ancha vaqtdan beri deyarli barcha protsessorlar ushbu turdagi xotira bilan jihozlangan, bu uning mavjudligining foydaliligini yana bir bor isbotlaydi. Ushbu maqolada biz kesh xotirasining tuzilishi, darajalari va amaliy maqsadi haqida gapiramiz, bu juda muhim. protsessor xususiyatlari.

Kesh xotira nima va uning tuzilishi

Kesh-xotira - bu protsessor tomonidan tez-tez foydalaniladigan ma'lumotlarni vaqtincha saqlash uchun ishlatiladigan o'ta tezkor xotira. Xotiraning bu turini qisqacha ta'riflashimiz mumkin.

Kesh-xotira flip-floplarda qurilgan bo'lib, ular o'z navbatida tranzistorlardan iborat. Transistorlar guruhi bir xil kondansatörlarga qaraganda ko'proq joy egallaydi Operativ xotira. Bu ishlab chiqarishda ko'plab qiyinchiliklarni, shuningdek, hajmdagi cheklovlarni keltirib chiqaradi. Shuning uchun kesh xotirasi juda qimmat xotira bo'lib, unchalik katta bo'lmagan hajmga ega. Ammo bu strukturadan bunday xotiraning asosiy afzalligi - tezlik keladi. Flip-floplar regeneratsiyaga muhtoj emasligi va ular yig'iladigan eshikning kechikish vaqti kichik bo'lgani uchun, flip-flopni bir holatdan ikkinchisiga o'tkazish vaqti juda tez sodir bo'ladi. Bu kesh xotiraning zamonaviy protsessorlar bilan bir xil chastotalarda ishlashiga imkon beradi.

Bundan tashqari, muhim omil kesh xotirasini joylashtirishdir. U protsessor chipining o'zida joylashgan bo'lib, u kirish vaqtini sezilarli darajada kamaytiradi. Ilgari, ba'zi darajadagi kesh xotirasi protsessor chipidan tashqarida, anakartning biron bir joyida maxsus SRAM chipida joylashgan edi. Endi deyarli barcha protsessorlar protsessor chipida joylashgan kesh xotirasiga ega.


Protsessor keshi nima uchun ishlatiladi?

Yuqorida aytib o'tilganidek, kesh xotirasining asosiy maqsadi protsessor tomonidan tez-tez ishlatiladigan ma'lumotlarni saqlashdir. Kesh kichik hajmga qaramay (taxminan 4-16 MB) ma'lumotlar yuklanadigan buferdir. zamonaviy protsessorlar, u har qanday dasturda sezilarli ish faoliyatini oshiradi.

Kesh xotiraga bo'lgan ehtiyojni yaxshiroq tushunish uchun, keling, kompyuter xotirasini ofis kabi tashkil qilishni tasavvur qilaylik. RAM katta ma'lumotlar bloklarini (ya'ni papkalarni) olish uchun buxgalter vaqti-vaqti bilan kiradigan papkalarga ega shkaf bo'ladi. Va jadval kesh xotirasi bo'ladi.

Buxgalterning stoliga qo'yilgan elementlar bor, u bir soat davomida bir necha marta murojaat qiladi. Masalan, bu telefon raqamlari, hujjatlarning ba'zi namunalari bo'lishi mumkin. Ushbu turdagi ma'lumotlar to'g'ridan-to'g'ri stolda joylashgan bo'lib, bu o'z navbatida ularga kirish tezligini oshiradi.

Xuddi shu tarzda, o'sha katta ma'lumotlar bloklari (papkalari) dan ma'lumotlar tez foydalanish uchun jadvalga qo'shilishi mumkin, masalan, hujjat. Ushbu hujjat endi kerak bo'lmaganda, u yana kabinetga (RAMga) joylashtiriladi, shu bilan jadvalni tozalaydi (kesh xotirasi) va keyingi vaqt ichida foydalaniladigan yangi hujjatlar uchun ushbu jadvalni bo'shatadi.

Shuningdek, kesh xotirasi bilan, agar yana kirish ehtimoli yuqori bo'lgan ma'lumotlar mavjud bo'lsa, RAMdan olingan ma'lumotlar kesh xotirasiga yuklanadi. Ko'pincha, bu joriy ma'lumotlardan keyin ishlatilishi mumkin bo'lgan ma'lumotlarni birgalikda yuklash orqali sodir bo'ladi. Ya'ni, "keyin" nima ishlatilishi haqida taxminlar mavjud. Bu murakkab ishlash tamoyillari.

Protsessor kesh darajalari

Zamonaviy protsessorlar ko'pincha 2 yoki 3 darajadan iborat kesh bilan jihozlangan. Albatta, istisnolar bor, lekin bu ko'pincha shunday bo'ladi.

Umuman olganda, quyidagi darajalar bo'lishi mumkin: L1 (birinchi daraja), L2 (ikkinchi daraja), L3 (uchinchi daraja). Endi ularning har biri haqida bir oz ko'proq:

Birinchi darajali kesh (L1)- to'g'ridan-to'g'ri protsessor yadrosi bilan ishlaydigan eng tezkor kesh xotirasi darajasi, bu qattiq shovqin tufayli ushbu daraja eng qisqa kirish vaqtiga ega va protsessorga yaqin chastotalarda ishlaydi. Bu protsessor va ikkinchi darajali kesh o'rtasidagi buferdir.

Biz yuqori unumli Intel Core i7-3770K protsessoridagi hajmlarni ko'rib chiqamiz. Ushbu protsessor 4x32 KB L1 kesh 4 x 32 KB = 128 KB bilan jihozlangan. (har bir yadro uchun 32 KB)

Ikkinchi darajali kesh (L2)- ikkinchi daraja birinchisiga qaraganda kattaroqdir, ammo buning natijasida pastroq "tezlik xususiyatlari" mavjud. Shunga ko'ra, u L1 va L3 darajalari o'rtasida bufer bo'lib xizmat qiladi. Agar biz Core i7-3770 K misolimizga yana qarasak, L2 kesh xotirasi hajmi 4x256 KB = 1 MB.

3-darajali kesh (L3)- uchinchi daraja, yana, avvalgi ikkiga qaraganda sekinroq. Ammo u hali ham RAMdan ancha tezroq. i7-3770K da L3 kesh hajmi 8 MB. Agar oldingi ikki daraja har bir yadro tomonidan taqsimlangan bo'lsa, u holda bu daraja butun protsessor uchun umumiydir. Raqam juda qattiq, ammo haddan tashqari emas. Masalan, i7-3960X kabi Extreme seriyali protsessorlar uchun bu 15 MB, ba'zi yangi Xeon protsessorlari uchun esa 20 dan ortiq.

Protsessor keshi nima?

Kesh - bu maksimal kirish tezligini ta'minlaydigan va hisoblash tezligini tezlashtiradigan xotiraning bir qismi. U protsessor tez-tez so'raydigan ma'lumotlar qismlarini saqlaydi, shuning uchun protsessor ular uchun tizim xotirasiga doimiy kirishni talab qilmaydi.

Ma'lumki, bu eng sekin ma'lumot almashish tezligi bilan ajralib turadigan kompyuter uskunasining bir qismidir. Agar protsessorga ba'zi ma'lumotlar kerak bo'lsa, u xuddi shu nomdagi avtobus orqali operativ xotiraga o'tadi. Protsessordan so'rov olgandan so'ng, u protsessorga kerak bo'lgan ma'lumotlarni qidirish uchun o'z yilnomalarini o'rganishni boshlaydi. Qabul qilgandan so'ng, RAM ularni bir xil xotira avtobusi bo'ylab protsessorga qaytaradi. Ma'lumotlar almashinuvi uchun bu doira har doim juda uzun edi. Shu sababli, ishlab chiqaruvchilar protsessorga ma'lumotlarni yaqin joyda saqlashga ruxsat berishlariga qaror qilishdi. Keshning ishlash usuli oddiy fikrga asoslanadi.

Xotirani maktab kutubxonasi deb tasavvur qiling. Talaba kitob olish uchun xodimga yaqinlashadi, u javonlarga boradi, uni qidiradi, talabaga qaytib keladi, uni to'g'ri tayyorlaydi va keyingi talabaga o'tadi. Kun oxirida, kitoblar unga qaytarilganda, u xuddi shu operatsiyani takrorlaydi. Keshsiz protsessor shunday ishlaydi.

Nima uchun protsessorga kesh kerak?

Endi tasavvur qiling-a, kutubxonachi yildan-yilga, kundan-kunga doimiy talab qilinadigan kitoblar bilan oldinga va orqaga shoshilishdan charchagan. U eng ko'p so'raladigan kitoblar va darsliklarni saqlaydigan katta shkaf oldi. Qo'yilgan qolganlari, albatta, xuddi shu javonlarda saqlanishda davom etadi. Ammo bu har doim qo'lingizda. Bu kabinet bilan u o'zi uchun ham, boshqalar uchun ham qancha vaqtni tejagan. Bu kesh.

Shunday qilib, kesh faqat eng kerakli ma'lumotlarni saqlashi mumkinmi?

Ha. Ammo u ko'proq narsani qila oladi. Masalan, tez-tez talab qilinadigan ma'lumotlarni allaqachon saqlagan holda, u (protsessor yordamida) vaziyatni baholashi va kerak bo'lgan ma'lumotlarni so'rashi mumkin. Shunday qilib, birinchi qismga ega "Die Hard" filmini so'ragan video prokat mijozi ikkinchisini so'rashi mumkin. Va u mana! Xuddi shu narsa protsessor keshi uchun ham amal qiladi. RAMga kirish va ma'lum ma'lumotlarni saqlash orqali u qo'shni xotira hujayralaridan ma'lumotlarni ham oladi. Bunday ma'lumotlar qismlari kesh chiziqlari deb ataladi.

Ikki darajali kesh nima?

Zamonaviy protsessor ikki darajaga ega. Shunga ko'ra, birinchi va ikkinchi. Ular ingliz darajasidan L harfi bilan belgilanadi. Birinchisi - L1 - tezroq, lekin hajmi kichik. Ikkinchisi - L2 - biroz kattaroq, lekin sekinroq, lekin RAMdan tezroq. Birinchi darajadagi kesh ko'rsatmalar keshi va ma'lumotlar keshiga bo'linadi. Yo'riqnoma keshi protsessorga hisob-kitoblar uchun zarur bo'lgan ko'rsatmalar to'plamini saqlaydi. Holbuki, ma'lumotlar keshi joriy hisoblash uchun zarur bo'lgan miqdorlar yoki qiymatlarni saqlaydi. Ikkinchi darajali kesh esa kompyuterning operativ xotirasidan ma'lumotlarni yuklash uchun ishlatiladi. Kesh darajalarining ishlash printsipi maktab kutubxonasi misolida ham tushuntirilishi mumkin. Shunday qilib, sotib olingan kabinetni to'ldirib, kutubxonachi kitoblar uchun endi etarli emasligini tushunadi, buning uchun u doimo zalni aylanib yurishi kerak. Ammo bunday kitoblar ro'yxati yakunlandi va siz xuddi shu kabinetni sotib olishingiz kerak. U birinchisini tashlamadi - afsuski - ikkinchisini sotib oldi. Endi esa birinchisi to‘ldirilganidek, kutubxonachi ikkinchisini to‘ldirishga kirishadi, birinchisi to‘lgandan keyin ishga tushadi, lekin kerakli kitoblar unga sig‘maydi. Kesh darajalari bilan bir xil. Mikroprotsessor texnologiyasi rivojlanishi bilan protsessor keshlari hajmi oshadi.

Kesh o'sishda davom etadimi?

Qiyin. Protsessor chastotasiga intilish ham uzoq davom etmadi va ishlab chiqaruvchilar quvvatni oshirishning boshqa usullarini topdilar. Kesh bilan bir xil. Xususan, darajalar hajmi va sonini cheksiz ravishda oshirib bo'lmaydi. Kesh sekin kirish tezligiga ega bo'lgan boshqa operativ xotiraga aylanmasligi yoki protsessor hajmini anakartning yarmigacha kamaytirmasligi kerak. Axir, ma'lumotlarga kirish tezligi, birinchi navbatda, energiya iste'moli va protsessorning o'zi ishlash narxidir. Protsessor mavjud bo'lmagan ma'lumotlar uchun keshlangan xotiraga kirishi mumkin bo'lgan kesh o'tkazib yuborishlari (kesh xitlaridan farqli o'laroq) ham tez-tez uchrab turadi. Keshdagi ma'lumotlar keshga zarba berish ehtimolini oshirish uchun turli xil algoritmlar yordamida doimiy ravishda yangilanadi.

O'qilgan: 644

Deyarli barcha ishlab chiquvchilar protsessor keshi yaqinda tashrif buyurilgan xotira maydonlaridan ma'lumotlarni saqlaydigan kichik, ammo tez xotira ekanligini bilishadi - ta'rif qisqa va juda aniq. Biroq, kesh qanday ishlashi haqida "zerikarli" tafsilotlarni bilish kod ishlashiga ta'sir qiluvchi omillarni tushunish uchun zarurdir.

Ushbu maqolada biz keshlarning turli xususiyatlarini va ularning ishlashga ta'sirini ko'rsatadigan bir qator misollarni ko'rib chiqamiz. Misollar C# tilida bo'ladi; til va platformani tanlash ish faoliyatini baholashga va yakuniy xulosalarga katta ta'sir ko'rsatmaydi. Tabiiyki, oqilona chegaralar ichida, agar siz massivdagi qiymatni o'qish xesh jadvaliga kirishga teng bo'lgan tilni tanlasangiz, hech qanday talqin qilinadigan natijalarga erisha olmaysiz. Tarjimonning eslatmalari kursiv bilan yozilgan.

Habrakut - - -

1-misol: Xotiraga kirish va ishlash

Sizningcha, ikkinchi davr birinchisiga qaraganda qanchalik tez?
int arr = yangi int;

// birinchi
uchun (int i = 0; i< arr.Length; i++) arr[i] *= 3;

// ikkinchi
uchun (int i = 0; i< arr.Length; i += 16) arr[i] *= 3;


Birinchi tsikl massivdagi barcha qiymatlarni 3 ga ko'paytiradi, ikkinchi tsikl faqat har o'n oltinchi qiymatni ko'paytiradi. Ikkinchi tsikl faqat tugaydi 6% ishlaydi birinchi sikl, ammo zamonaviy mashinalarda ikkala tsikl ham taxminan teng vaqtda bajariladi: 80 ms Va 78 ms mos ravishda (mening mashinamda).

Yechim oddiy - xotiraga kirish. Ushbu tsikllarning tezligi, birinchi navbatda, butun sonlarni ko'paytirish tezligi bilan emas, balki xotira quyi tizimining tezligi bilan belgilanadi. Keyingi misolda ko'rib turganimizdek, operativ xotiraga kirishlar soni ham birinchi, ham ikkinchi holatda bir xil bo'ladi.

2-misol: Kesh chiziqlarining ta'siri

Keling, chuqurroq qazib olaylik va faqat 1 va 16 emas, balki boshqa qadam qiymatlarini sinab ko'raylik:
uchun (int i = 0; i< arr.Length; i += K /* шаг */ ) arr[i] *= 3;

Turli xil K qadam qiymatlari uchun ushbu tsiklning ishlash vaqtlari:

E'tibor bering, 1 dan 16 gacha bo'lgan qadam qiymatlari bilan ish vaqti deyarli o'zgarmaydi. Ammo 16 dan katta qiymatlar bilan, har safar qadamni ikki barobarga oshirganimizda, ish vaqti taxminan yarmiga kamayadi. Bu loop qandaydir sehrli tarzda tezroq ishlay boshlaydi, degani emas, shunchaki takrorlashlar soni ham kamayadi. Asosiy nuqta - 1 dan 16 gacha bo'lgan qadam qiymatlari bilan bir xil ish vaqti.

Buning sababi shundaki, zamonaviy protsessorlar xotiraga bayt-bayt emas, balki kesh satrlari deb ataladigan kichik bloklarda kirishadi. Odatda satr hajmi 64 baytni tashkil qiladi. Xotiradan biron bir qiymatni o'qiganingizda, keshga kamida bitta kesh qatori kiradi. Ushbu qatordan istalgan qiymatga keyingi kirish juda tez.

16 int qiymati 64 baytni egallaganligi sababli, 1 dan 16 gacha bo'lgan bosqichli tsikllar bir xil miqdordagi kesh qatorlariga, aniqrog'i, massivning barcha kesh satrlariga kirishadi. 32-bosqichda kirish har ikkinchi qatorga, 64-bosqichda, har to'rtinchi qatorga sodir bo'ladi.

Buni tushunish ba'zi optimallashtirish usullari uchun juda muhimdir. Unga kirishlar soni ma'lumotlarning xotiradagi joylashuviga bog'liq. Masalan, tekislanmagan ma'lumotlar asosiy xotiraga bitta emas, balki ikkita kirishni talab qilishi mumkin. Yuqorida bilib olganimizdek, ish tezligi ikki baravar past bo'ladi.

3-misol: 1 va 2-darajali kesh o'lchamlari (L1 va L2)

Zamonaviy protsessorlar odatda L1, L2 va L3 deb ataladigan ikki yoki uch darajadagi keshlarga ega. Turli darajadagi keshlarning o'lchamlarini bilish uchun siz CoreInfo yordam dasturidan yoki Windows API-ning GetLogicalProcessorInfo funktsiyasidan foydalanishingiz mumkin. Ikkala usul ham har bir daraja uchun kesh qatori hajmi haqida ma'lumot beradi.

Mening kompyuterimda CoreInfo 32 KB L1 ma'lumotlar keshlari, 32 KB L1 ko'rsatmalar keshlari va 4 MB L2 ma'lumotlar keshlari haqida xabar beradi. Har bir yadro o'zining shaxsiy L1 keshlariga ega, L2 keshlari har bir yadro juftligi tomonidan taqsimlanadi:

Mantiqiy protsessordan kesh xaritasi: *--- Maʼlumotlar keshi 0, 1-darajali, 32 KB, Assoc 8, LineSize 64 *--- Yoʻriqnoma keshi 0, 1-darajali, 32 KB, Assoc 8, LineSize 64 -*-- Maʼlumotlar keshi 1, 1-darajali, 32 KB, Assoc 8, LineSize 64 -*-- Yo‘riqnoma keshi 1, 1-darajali, 32 KB, Assoc 8, LineSize 64 **-- Birlashtirilgan kesh 0, 2-darajali, 4 MB, Assoc 16, LineSize 64 --*- Maʼlumotlar keshi 2, 1-darajali, 32 KB, Assoc 8, LineSize 64 --*- Yoʻriqnoma keshi 2, 1-darajali, 32 KB, Assoc 8, LineSize 64 ---* Maʼlumotlar keshi 3, 1-darajali, 32 KB, Assoc 8, LineSize 64 ---* Yo‘riqnoma keshi 3, 1-darajali, 32 KB, Assoc 8, LineSize 64 --** Birlashtirilgan kesh 1, 2-darajali, 4 MB, Assoc 16, LineSize 64
Keling, ushbu ma'lumotni eksperimental tarzda tekshiramiz. Buni amalga oshirish uchun keling, har 16-qiymatni oshirib, massivimizni ko'rib chiqamiz - bu har bir kesh satridagi ma'lumotlarni o'zgartirishning oson usuli. Biz oxiriga yetganimizda, biz boshiga qaytamiz. Keling, massivning turli o'lchamlarini tekshirib ko'ramiz, agar massiv turli darajadagi keshlarga mos kelmasa, unumdorlikning pasayishini ko'rishimiz kerak;

Kod shunday:

int qadamlari = 64 * 1024 * 1024; // takrorlashlar soni
int lengthMod = arr.Length - 1; // massiv hajmi -- ikkining kuchi

uchun (int i = 0; i< steps; i++)
{
// x & lengthMod = x % arr.Length, chunki ikkining kuchi
arr [(i * 16) & lengthMod]++;
}


Sinov natijalari:

Mening mashinamda 32 KB va 4 MB dan keyin sezilarli pasayishlar mavjud - bu L1 va L2 keshlarining o'lchamlari.

4-misol: Ko‘rsatma parallelligi

Endi boshqa narsani ko'rib chiqaylik. Sizningcha, bu ikki halqadan qaysi biri tezroq bajariladi?
int qadamlari = 256 * 1024 * 1024;
int a = new int;

// birinchi
uchun (int i = 0; i< steps; i++) { a++; a++; }

// ikkinchi
uchun (int i = 0; i< steps; i++) { a++; a++; }


Ma'lum bo'lishicha, ikkinchi pastadir deyarli ikki baravar tez ishlaydi, hech bo'lmaganda men sinab ko'rgan barcha mashinalarda. Nega? Chunki tsikllar ichidagi buyruqlar turli xil ma'lumotlarga bog'liq. Birinchi buyruqlar quyidagi bog'liqliklar zanjiriga ega:

Ikkinchi tsiklda bog'liqliklar:

Zamonaviy protsessorlarning funktsional qismlari bir vaqtning o'zida ma'lum miqdordagi ma'lum operatsiyalarni bajarishga qodir, odatda unchalik katta emas. Masalan, L1 keshidagi ma'lumotlarga ikkita manzilda parallel kirish mumkin va ikkita oddiy arifmetik ko'rsatmalarni bir vaqtning o'zida bajarish ham mumkin. Birinchi tsiklda protsessor bu imkoniyatlardan foydalana olmaydi, lekin ikkinchisida u mumkin.

5-misol: Kesh assotsiativligi

Keshni loyihalashda javob berilishi kerak bo'lgan asosiy savollardan biri bu ma'lum bir xotira mintaqasidagi ma'lumotlarni istalgan kesh kataklarida yoki faqat ba'zilarida saqlash mumkinmi? Uchta mumkin bo'lgan yechim:
  1. To'g'ridan-to'g'ri xaritalash keshi,RAMdagi har bir kesh liniyasi ma'lumotlari faqat bitta, oldindan belgilangan kesh joyida saqlanadi. Xaritalashni hisoblashning eng oddiy usuli: xotirada row_index_% cache_cells soni. Bitta katakka moslashtirilgan ikkita satr bir vaqtning o'zida keshda bo'lishi mumkin emas.
  2. N-kirish qisman-assotsiativ kesh, har bir satr N xil kesh joylarida saqlanishi mumkin. Misol uchun, 16 ta yozuvli keshda chiziq guruhni tashkil etuvchi 16 hujayradan birida saqlanishi mumkin. Odatda, indekslarning eng kam muhim bitlari teng bo'lgan qatorlar bitta guruhni bo'lishadi.
  3. To'liq assotsiativ kesh, har qanday satr istalgan kesh joyida saqlanishi mumkin. Yechim o'z xatti-harakati bo'yicha xesh jadvaliga teng.
To'g'ridan-to'g'ri xaritalangan keshlar tortishuvlarga moyil bo'ladi, masalan, ikkita qator bir xil katak uchun raqobatlashsa, navbat bilan keshdan bir-birini chiqarib yuborsa, samaradorlik juda past bo'ladi. Boshqa tomondan, to'liq assotsiativ keshlar, garchi bu kamchilikdan xoli bo'lsa ham, amalga oshirish juda murakkab va qimmat. Qisman assotsiativ keshlar amalga oshirishning murakkabligi va samaradorligi o'rtasidagi odatiy kelishuvdir.

Misol uchun, mening kompyuterimda 4 MB L2 kesh 16 kirishli qisman assotsiativ keshdir. Butun operativ xotira indekslarining eng kam ahamiyatli bitlariga ko'ra chiziqlar to'plamiga bo'lingan, har bir to'plamdagi chiziqlar 16 L2 kesh hujayralaridan iborat bitta guruh uchun raqobatlashadi.

L2 keshida 65 536 hujayra (4 * 2 20 / 64) va har bir guruh 16 hujayradan iborat bo'lganligi sababli, bizda jami 4096 guruh mavjud. Shunday qilib, qator indeksining pastki 12 biti bu qator qaysi guruhga tegishli ekanligini aniqlaydi (2 12 = 4,096). Natijada, manzillari 262 144 (4 096 * 64) ga karrali satrlar 16 hujayradan iborat bir xil guruhni bo'lishadi va undagi bo'sh joy uchun raqobatlashadi.

Assotsiativlik ta'siri kuchga kirishi uchun biz doimiy ravishda bir xil guruhdagi ko'p sonli qatorlarga kirishimiz kerak, masalan, quyidagi kod yordamida:

umumiy statik uzoq UpdateEveryKthByte(bayt arr, int K)
{
const int rep = 1024 * 1024; // takrorlashlar soni

Sekundomer sw = Sekundomer.StartNew();

int p = 0;
uchun (int i = 0; i< rep; i++)
{
arr[p]++;

P += K; agar (p >= arr.Length) p = 0;
}

Sw.Stop();
qaytish sw.ElapsedMilliseconds;
}


Usul massivning har bir K elementini oshiradi. Biz oxiriga yetganimizda, yana boshlaymiz. Juda ko'p takrorlashdan so'ng (2 20), biz to'xtab qolamiz. Turli massiv o'lchamlari va K qadam qiymatlari uchun yugurishlar qildim Natijalar (ko'k - uzoq ish vaqti, oq - qisqa):

Moviy joylar ma'lumotlarning doimiy o'zgarishi bilan keshni sig'dira olmaydigan holatlarga mos keladi bir vaqtning o'zida barcha kerakli ma'lumotlar. Yorqin ko'k rang taxminan 80 ms, deyarli oq - 10 ms ish vaqtini bildiradi.

Keling, ko'k joylar bilan shug'ullanamiz:

  1. Nima uchun vertikal chiziqlar paydo bo'ladi? Vertikal chiziqlar bir guruhdan juda ko'p satrlarga (16 dan ortiq) kirish mumkin bo'lgan qadam qiymatlariga mos keladi. Ushbu qiymatlar uchun mening mashinamning 16-yozuv keshi barcha kerakli ma'lumotlarni sig'dira olmaydi.

    Ba'zi yomon qadam qiymatlari ikkita kuchdir: 256 va 512. Masalan, qadam 512 va 8 MB massivni ko'rib chiqing. Ushbu qadam bilan massivda 32 ta bo'lim mavjud (8 * 2 20 / 262 144), ular 512 kesh guruhidagi (262 144 / 512) hujayralar uchun bir-biri bilan raqobatlashadi. 32 ta bo'lim mavjud, ammo har bir guruh uchun keshda faqat 16 ta hujayra mavjud, shuning uchun hamma uchun joy etarli emas.

    Ikkining kuchiga ega bo'lmagan boshqa qadam qiymatlari shunchaki omadsizdir, bu bir xil kesh guruhlariga ko'p kirishni keltirib chiqaradi, shuningdek, rasmda vertikal ko'k chiziqlar paydo bo'lishiga olib keladi. Shu nuqtada, raqamlar nazariyasini sevuvchilar o'ylashga taklif qilinadi.

  2. Nima uchun vertikal chiziqlar 4 MB chegarada uziladi? Massiv hajmi 4 MB yoki undan kam bo'lsa, 16-yozuvli kesh to'liq assotsiativ kesh kabi ishlaydi, ya'ni u massivdagi barcha ma'lumotlarni ziddiyatlarsiz joylashtira oladi. Bitta kesh guruhi uchun kurashayotgan 16 dan ortiq maydon mavjud emas (262 144 * 16 = 4 * 2 20 = 4 MB).
  3. Nima uchun yuqori chap tomonda katta ko'k uchburchak bor? Chunki kichik qadam va katta massiv bilan kesh barcha kerakli ma'lumotlarni sig'dira olmaydi. Kesh assotsiativligi darajasi bu erda ikkinchi darajali rol o'ynaydi, bu cheklash L2 keshining hajmi bilan bog'liq.

    Masalan, massiv o'lchami 16 MB va qadam 128 bo'lsa, biz har 128 baytga kiramiz va shu bilan har ikkinchi massiv kesh qatorini o'zgartiramiz. Keshdagi har ikkinchi qatorni saqlash uchun sizga 8 MB kesh kerak bo'ladi, lekin mening kompyuterimda faqat 4 MB bor.

    Kesh to'liq assotsiativ bo'lsa ham, unda 8 MB ma'lumotni saqlashga ruxsat bermaydi. E'tibor bering, 512 qadam va massiv hajmi 8 MB bo'lgan allaqachon muhokama qilingan misolda barcha kerakli ma'lumotlarni saqlash uchun bizga faqat 1 MB kesh kerak, ammo kesh assotsiativligi etarli emasligi sababli bu mumkin emas.

  4. Nima uchun uchburchakning chap tomoni asta-sekin kuchayadi? Maksimal intensivlik 64 baytlik qadam qiymatida sodir bo'ladi, bu kesh chizig'ining o'lchamiga teng. Birinchi va ikkinchi misollarda ko'rganimizdek, bir qatorga ketma-ket kirish deyarli hech qanday xarajat qilmaydi. Aytaylik, 16 baytlik qadam bilan bizda bitta narxga to'rtta xotiraga kirish imkoniyati mavjud.

    Har qanday qadam qiymati bo'yicha testimizda iteratsiyalar soni bir xil bo'lgani uchun, arzonroq qadam kamroq ishlash muddatiga olib keladi.

Topilgan effektlar katta parametr qiymatlarida saqlanib qoladi:

Kesh assotsiativligi ma'lum sharoitlarda o'zini namoyon qilishi mumkin bo'lgan qiziqarli narsadir. Ushbu maqolada muhokama qilingan boshqa muammolardan farqli o'laroq, bu unchalik jiddiy emas. Bu, albatta, dasturlarni yozishda doimiy e'tibor talab qiladigan narsa emas.

6-misol: Keshni noto'g'ri qismlarga ajratish

Ko'p yadroli mashinalarda siz boshqa muammoga duch kelishingiz mumkin - kesh uyg'unligi. Protsessor yadrolarida qisman yoki butunlay alohida keshlar mavjud. Mening mashinamda L1 keshlari alohida (odatdagidek) va har bir yadro juftligi tomonidan taqsimlangan ikkita L2 keshlari ham mavjud. Tafsilotlar farq qilishi mumkin, lekin umuman olganda, zamonaviy ko'p yadroli protsessorlar ko'p darajali ierarxik keshlarga ega. Bundan tashqari, eng tezkor, ammo eng kichik keshlar alohida yadrolarga tegishli.

Bitta yadro keshidagi qiymatni o'zgartirsa, boshqa yadrolar endi eski qiymatdan foydalana olmaydi. Boshqa yadrolarning keshlaridagi qiymat yangilanishi kerak. Bundan tashqari, yangilanishi kerak butun kesh liniyasi, chunki keshlar satr darajasidagi ma'lumotlarda ishlaydi.

Keling, ushbu muammoni quyidagi kod bilan ko'rsatamiz:

xususiy statik int s_counter = yangi int;

xususiy void UpdateCounter (int pozitsiyasi)
{
uchun (int j = 0; j< 100000000; j++)
{
s_counter = s_counter + 3;
}
}


Agar to'rt yadroli mashinamda men ushbu usulni bir vaqtning o'zida to'rtta ipdan 0, 1, 2, 3 parametrlari bilan chaqirsam, u holda ish vaqti bo'ladi. 4,3 soniya. Ammo agar men usulni 16, 32, 48, 64 parametrlari bilan chaqirsam, u holda ish vaqti faqat bo'ladi. 0,28 soniya.

Nega? Birinchi holda, har qanday vaqtda iplar tomonidan qayta ishlangan to'rtta qiymat bitta kesh qatorida tugashi mumkin. Har safar bitta yadro qiymatni oshirganda, u boshqa yadrolardagi ushbu qiymatni o'z ichiga olgan kesh hujayralarini yaroqsiz deb belgilaydi. Ushbu operatsiyadan keyin barcha boshqa yadrolar qatorni yana keshlashi kerak bo'ladi. Bu keshlash mexanizmini ishlamay qo'yadi va ishlashni o'ldiradi.

7-misol: Uskunaning murakkabligi

Hozir ham, kesh bilan ishlash tamoyillari siz uchun sir bo'lmasa ham, apparat sizga kutilmagan hodisalar beradi. Protsessorlar bir-biridan optimallashtirish usullari, evristika va boshqa amalga oshirish nozikliklari bilan farqlanadi.

Ba'zi protsessorlarning L1 keshi, agar ular turli guruhlarga tegishli bo'lsa, ikkita katakka parallel ravishda kirishlari mumkin, lekin ular bir guruhga tegishli bo'lsa, faqat ketma-ket. Men bilishimcha, ba'zilar bir xil hujayraning turli choraklariga parallel ravishda kirishlari mumkin.

Protsessorlar sizni aqlli optimallashtirish bilan ajablantirishi mumkin. Misol uchun, soxta kesh almashish haqidagi oldingi misoldagi kod mening uy kompyuterimda mo'ljallangan tarzda ishlamaydi - eng oddiy hollarda protsessor ishni optimallashtirishi va salbiy ta'sirlarni kamaytirishi mumkin. Agar siz kodni biroz o'zgartirsangiz, hamma narsa joyiga tushadi.

G'alati apparat nosozliklarining yana bir misoli:

xususiy statik int A, B, C, D, E, F, G;

shaxsiy statik bo'shliq G'alati ()
{
uchun (int i = 0; i< 200000000; i++)
{
<какой-то код>
}
}


Agar o'rniga<какой-то код>Uch xil variantni almashtiring, siz quyidagi natijalarni olishingiz mumkin:

A, B, C, D maydonlarini oshirish A, C, E, G maydonlarini oshirishga qaraganda ko'proq vaqt oladi. Bundan ham g'alati tomoni shundaki, A va C maydonlarini oshirish A, C maydonlariga qaraganda ko'proq vaqt oladi. Va E, G. Buning sabablari nima ekanligini aniq bilmayman, lekin ehtimol ular xotira banklari bilan bog'liq ( ha, ha, oddiy uch litrli jamg'arma xotira banklari bilan, va siz o'ylagandek emas). Agar sizda bu masala bo'yicha biron bir fikringiz bo'lsa, iltimos, sharhlarda gapiring.

Mening mashinamda yuqorida aytilganlar kuzatilmaydi, ammo ba'zida g'ayritabiiy yomon natijalar mavjud - katta ehtimollik bilan vazifalarni rejalashtiruvchi o'zining "tuzatishlarini" qiladi.

Ushbu misoldan olinadigan saboq shundaki, apparatning harakatini to'liq bashorat qilish juda qiyin. Ha, mumkin juda ko'p bashorat qilish, lekin siz doimo o'lchovlar va testlar orqali prognozlaringizni tasdiqlashingiz kerak.

Xulosa

Umid qilamanki, yuqorida muhokama qilingan hamma narsa protsessor keshlarining dizaynini tushunishga yordam berdi. Endi siz kodingizni optimallashtirish uchun ushbu bilimlarni amalda qo'llashingiz mumkin.

Kesh - bu protsessorga o'rnatilgan xotira bo'lib, unda RAMning eng tez-tez ishlatiladigan ma'lumotlari (buyruqlari) yoziladi, bu ishni sezilarli darajada tezlashtiradi.

L1 kesh hajmi (8 dan 128 KB gacha)
1-darajali kesh hajmi.
1-darajali kesh to'g'ridan-to'g'ri protsessor yadrosida joylashgan yuqori tezlikdagi xotira blokidir.
RAMdan olingan ma'lumotlar unga ko'chiriladi.

Asosiy ko'rsatmalarni saqlash tezroq ma'lumotlarni qayta ishlash tezligi tufayli protsessor ish faoliyatini yaxshilaydi (keshdan ishlov berish RAMdan tezroq).

Birinchi darajali kesh hajmi kichik va kilobaytni tashkil qiladi.
Odatda, "eski" protsessor modellari kattaroq L1 keshiga ega.
Ko'p yadroli modellar uchun bir yadro uchun L1 kesh xotirasi miqdori ko'rsatilgan.

L2 kesh hajmi (128 dan 12288 KB gacha)
2-darajali kesh hajmi.
L2 keshi - bu L1 keshi bilan bir xil funktsiyalarni bajaradigan ("L1 kesh hajmi" ga qarang), lekin past tezlik va katta hajmga ega bo'lgan yuqori tezlikdagi xotira blokidir.

Agar siz resurs talab qiladigan vazifalar uchun protsessorni tanlasangiz, u holda katta L2 keshiga ega model afzalroq bo'ladi.
Ko'p yadroli protsessorlar uchun ikkinchi darajali kesh xotirasining umumiy miqdori ko'rsatilgan.

L3 kesh hajmi (0 dan 16384 KB gacha)
3-darajali kesh hajmi.
Integratsiyalashgan L3 keshi tezkor tizim avtobusi bilan birgalikda tizim xotirasi bilan yuqori tezlikdagi ma'lumotlar almashinuv kanalini tashkil qiladi.

Qoida tariqasida, faqat server echimlari yoki "ish stoli" protsessorlarining maxsus nashrlari uchun protsessorlar uchinchi darajali kesh xotirasi bilan jihozlangan.

Masalan, Intel Pentium 4 Extreme Edition, Xeon DP, Itanium 2, Xeon MP va boshqalar kabi protsessor liniyalari uchinchi darajali kesh xotirasiga ega.

Twin BiCS FLASH - yangi 3D flesh xotira texnologiyasi

2019-yil 11-dekabr kuni IEEE xalqaro elektron qurilmalar yig‘ilishida (IEDM) TOKYO-Kioxia korporatsiyasi 3D flesh-xotira texnologiyasi - Twin BiCS FLASHni e’lon qildi.

AMD Radeon Software Adrenalin Edition 2020 drayveri 19.12.2 WHQL (Qo'shilgan)

10 dekabr kuni AMD kompaniyasi Radeon Software Adrenalin 2020 Edition 19.12.2 WHQL mega drayverini taqdim etdi.

Windows 10 jami yangilanishi 1909 KB4530684

2019-yil 10-dekabrda Microsoft x64-ga asoslangan tizimlar uchun x86, x64 (amd64), ARM64 va Windows Server 2019 (1909) protsessorlarida Windows 10-noyabr 2019-yil yangilanishi (1909-versiyasi) uchun KB4530684 (18363.535-ni qurish) kümülatif yangilanishini chiqardi.

NVIDIA Game Ready GeForce 441.66 WHQL drayveri

NVIDIA GeForce Game Ready 441.66 WHQL drayveri MechWarrior 5: Mercenaries va Detroit: Become Human dasturlarini qo‘llab-quvvatlaydi, shuningdek, MSI MAG251RX va ViewSonic XG270 monitorlari uchun G-SYNC qo‘llab-quvvatlashini qo‘shadi.

ko'rishlar