Kesh - bu so'ralishi mumkin bo'lgan ma'lumotlarni o'z ichiga olgan tezkor kirish oraliq buferi. Keshdagi ma'lumotlarga kirish operativ xotiradan (RAM) dastlabki ma'lumotlarni olishdan tezroq va tashqi xotiradan (qattiq disk yoki qattiq disk) tezroq bo'ladi, shu bilan o'rtacha kirish vaqtini qisqartiradi va kompyuter tizimining umumiy ishlashini oshiradi.

Bir qator markaziy protsessor (CPU) modellari registrlarga qaraganda sekinroq bo'lgan tasodifiy kirish xotirasiga (RAM) kirishni minimallashtirish uchun o'z keshiga ega. Kesh xotirasi operativ xotiraning tezligi protsessor soat tezligidan sezilarli darajada past bo'lsa, sezilarli ishlash afzalliklarini ta'minlaydi. Kesh xotirasi uchun soat tezligi odatda protsessor tezligidan kam emas.

Kesh darajalari

CPU keshi bir necha darajalarga bo'lingan. Bugungi kunda umumiy maqsadli protsessorda darajalar soni 3 tagacha boʻlishi mumkin. N+1-darajali kesh odatda N-darajali keshga qaraganda kattaroq va kirish tezligi va maʼlumotlarni uzatishda sekinroq.

Eng tez xotira birinchi darajali kesh - L1-kesh. Aslida, bu protsessorning ajralmas qismidir, chunki u bir xil chipda joylashgan va funktsional bloklarning bir qismidir. Zamonaviy protsessorlarda L1 keshi odatda ikkita keshga bo'linadi, ko'rsatmalar keshi va ma'lumotlar keshi (Garvard arxitekturasi). L1 keshi bo'lmagan protsessorlarning aksariyati ishlay olmaydi. L1 keshi protsessor chastotasida ishlaydi va umuman olganda, har bir soat siklida foydalanish mumkin. Ko'pincha bir vaqtning o'zida bir nechta o'qish / yozish operatsiyalarini bajarish mumkin. Kirish kechikishi odatda 2-4 yadroli soat siklini tashkil qiladi. Ovoz odatda kichik - 384 KB dan oshmaydi.

Ikkinchi eng tez L2-kesh - ikkinchi darajali kesh, odatda L1 kabi chipda joylashgan. Eski protsessorlarda anakartdagi chiplar to'plami. L2 kesh hajmi 128 KB dan 1?12 MB gacha. Zamonaviy ko'p yadroli protsessorlarda bir xil chipda joylashgan ikkinchi darajali kesh alohida xotira hisoblanadi - umumiy kesh hajmi nM MB, har bir yadro nM/nC MB ga ega, bu erda nC protsessor yadrolari soni. Odatda, yadro chipida joylashgan L2 keshining kechikishi 8 dan 20 yadroli soat tsiklini tashkil qiladi.

Uchinchi darajali kesh eng kam tezdir, lekin u hajmi jihatidan juda ta'sirli bo'lishi mumkin - 24 MB dan ortiq. L3 keshi oldingi keshlarga qaraganda sekinroq, ammo operativ xotiradan sezilarli darajada tezroq. Ko'p protsessorli tizimlarda u umumiy qo'llaniladi va turli L2 lardan ma'lumotlarni sinxronlashtirish uchun mo'ljallangan.

Ba'zan 4-darajali kesh ham mavjud, odatda u alohida chipda joylashgan. 4-darajali keshdan foydalanish faqat yuqori unumdor serverlar va asosiy kadrlar uchun oqlanadi.

Turli keshlar (bir va bir nechta protsessorlar) o'rtasidagi sinxronizatsiya muammosi kesh kogerentligi bilan hal qilinadi. Turli darajadagi keshlar yoki ular aytganidek, kesh arxitekturalari o'rtasida ma'lumot almashishning uchta varianti mavjud: inklyuziv, eksklyuziv va eksklyuziv.

AMD protsessorlari uchun L3 keshi qanchalik muhim?

Haqiqatan ham, ko'p yadroli protsessorlarni barcha mavjud yadrolar tomonidan taqsimlanadigan maxsus xotira bilan jihozlash mantiqan. Ushbu rolda tezkor uchinchi darajali (L3) kesh tez-tez so'raladigan ma'lumotlarga kirishni sezilarli darajada tezlashtirishi mumkin. Keyin yadrolar, agar iloji bo'lsa, sekin asosiy xotiraga (RAM) kirishga majbur bo'lmaydi.

Hech bo'lmaganda nazariy jihatdan. Yaqinda AMD Athlon II X4 protsessorini e'lon qildi, bu L3 keshsiz Phenom II X4 modeli bo'lib, bu unchalik zarur emasligini ko'rsatadi. Kesh ishlashga qanday ta'sir qilishini tekshirish uchun ikkita protsessorni (L3 keshli va keshsiz) to'g'ridan-to'g'ri solishtirishga qaror qildik.

Kattalashtirish uchun rasm ustiga bosing.

Kesh qanday ishlaydi?

Sinovlarga kirishdan oldin, ba'zi bir asoslarni tushunish muhimdir. Kesh qanday ishlashi printsipi juda oddiy. Kesh protsessor so'rovlarini uzoqroq va sekinroq xotiraga kamaytirish uchun protsessorning qayta ishlash yadrolariga iloji boricha yaqinroq ma'lumotlarni buferlaydi. Zamonaviy ish stoli platformalarida kesh ierarxiyasi RAMga kirishdan oldingi uchta darajani o'z ichiga oladi. Bundan tashqari, ikkinchi va, xususan, uchinchi darajali keshlar nafaqat ma'lumotlarni buferlash uchun xizmat qiladi. Ularning maqsadi yadrolar ma'lumot almashishi kerak bo'lganda protsessor avtobusining ortiqcha yuklanishini oldini olishdir.

Xitlar va o'tkazib yuborilganlar

Kesh arxitekturalarining samaradorligi urish tezligi bilan o'lchanadi. Kesh tomonidan qondirilishi mumkin bo'lgan ma'lumotlar so'rovlari xit deb hisoblanadi. Agar ushbu keshda kerakli ma'lumotlar bo'lmasa, so'rov xotira quvuri bo'ylab uzatiladi va o'tkazib yuborilgan hisoblanadi. Albatta, o'tkazib yuborish ma'lumot olish uchun ko'proq vaqt talab qiladi. Natijada, hisoblash quvurida "pufakchalar" (bo'sh turish) va kechikishlar paydo bo'ladi. Xitlar, aksincha, maksimal ishlashni saqlab qolishga imkon beradi.

Keshga kirish, eksklyuzivlik, izchillik

O'zgartirish siyosati yangi yozuvlar uchun keshda bo'sh joy qanday bo'lishini belgilaydi. Keshga yozilgan ma'lumotlar oxir-oqibat asosiy xotirada paydo bo'lishi kerakligi sababli, tizimlar buni keshga yozish (yozish orqali) bilan bir vaqtda amalga oshirishi yoki ma'lumotlar joylarini "iflos" (qayta yozish) deb belgilashi va unga yozishi mumkin. xotira. u keshdan chiqarilganda.

Bir nechta kesh darajalaridagi ma'lumotlar faqat, ya'ni ortiqcha holda saqlanishi mumkin. Keyin ikkita turli kesh ierarxiyasida bir xil ma'lumotlar qatorlarini topa olmaysiz. Yoki keshlar inklyuziv tarzda ishlashi mumkin, ya'ni pastki kesh darajalari yuqori kesh darajalarida (protsessor yadrosiga yaqinroq) mavjud ma'lumotlarni o'z ichiga olishi kafolatlanadi. AMD Phenom eksklyuziv L3 keshidan foydalanadi, Intel esa inklyuziv kesh strategiyasiga amal qiladi. Muvofiqlik protokollari turli yadrolar, kesh darajalari va hatto protsessorlarda ma'lumotlarning yaxlitligi va yangiligini ta'minlaydi.

Kesh hajmi

Kattaroq kesh ko'proq ma'lumotni saqlashi mumkin, ammo kechikishni oshiradi. Bundan tashqari, katta kesh juda ko'p protsessor tranzistorlarini iste'mol qiladi, shuning uchun tranzistorlar byudjeti, o'lchami, quvvat sarfi va ishlash / kechikish o'rtasidagi muvozanatni topish muhimdir.

Assotsiativlik

Operativ xotiradagi yozuvlar to'g'ridan-to'g'ri keshga joylashtirilishi mumkin, ya'ni RAMdan olingan ma'lumotlarning nusxasi uchun faqat bitta kesh pozitsiyasi mavjud yoki ular n-tarmoqli assotsiativ bo'lishi mumkin, ya'ni keshda bu joylashishi mumkin bo'lgan n ta joy mavjud. ma'lumotlar saqlanishi mumkin. Assotsiativlikning yuqori darajalari (to'liq assotsiativ keshlargacha) keshlashda ko'proq moslashuvchanlikni ta'minlaydi, chunki keshdagi mavjud ma'lumotlarni qayta yozish kerak emas. Boshqacha qilib aytganda, yuqori n-darajali assotsiativlik yuqori urish tezligini kafolatlaydi, lekin u kechikishni ham oshiradi, chunki bu barcha assotsiatsiyalarni urish uchun tekshirish uchun ko'proq vaqt kerak bo'ladi. Odatda, eng yuqori assotsiatsiya darajasi keshlashning oxirgi darajasi uchun maqbuldir, chunki u erda maksimal sig'im mavjud va bu keshdan tashqarida ma'lumotlarni qidirish protsessorning sekin RAMga kirishiga olib keladi.

Mana bir nechta misollar: Core i5 va i7 maʼlumotlar uchun 8 tomonlama assotsiativlikka ega 32 KB L1 keshdan va koʻrsatmalar uchun 4 tomonlama assotsiativlikka ega 32 KB L1 keshdan foydalanadi. Intel ko'rsatmalar tezroq mavjud bo'lishini va L1 ma'lumotlar keshi maksimal urish tezligiga ega bo'lishini xohlashi tushunarli. Intel protsessorlaridagi L2 keshi 8 tomonlama assotsiativlikka ega va Intel L3 keshi yanada aqlli, chunki u hitlarni maksimal darajada oshirish uchun 16 tomonlama assotsiativlikni amalga oshiradi.

Biroq, AMD kechikishni kamaytirish uchun ikki tomonlama assotsiativ L1 keshdan foydalanadigan Phenom II X4 protsessorlari bilan boshqa strategiyaga amal qilmoqda. Mumkin bo'lgan xatolarni qoplash uchun kesh hajmi ikki baravar oshirildi: ma'lumotlar uchun 64 KB va ko'rsatmalar uchun 64 KB. L2 keshi Intel dizayni kabi 8 tomonlama assotsiativlikka ega, ammo AMD L3 keshi 48 tomonlama assotsiativlik bilan ishlaydi. Ammo bitta kesh arxitekturasini boshqasiga tanlash qarorini butun CPU arxitekturasini hisobga olmasdan baholash mumkin emas. Sinov natijalari amaliy ahamiyatga ega bo'lishi tabiiydir va bizning maqsadimiz aynan ushbu kompleks ko'p darajali keshlash strukturasini amaliy sinovdan o'tkazish edi.

Har bir zamonaviy protsessorda protsessor ko'rsatmalari va ma'lumotlarini saqlaydigan, deyarli bir zumda foydalanishga tayyor bo'lgan maxsus kesh mavjud. Bu daraja odatda 1-darajali yoki L1 keshi deb ataladi va birinchi marta 486DX protsessorlarida joriy qilingan. So'nggi paytlarda AMD protsessorlari har bir yadro uchun 64 KB L1 kesh (ma'lumotlar va ko'rsatmalar uchun) bilan standartga aylandi va Intel protsessorlari har bir yadro uchun 32 KB L1 keshdan foydalanadi (shuningdek, ma'lumotlar va ko'rsatmalar uchun)

L1 keshi birinchi marta 486DX protsessorlarida paydo bo'ldi, shundan so'ng u barcha zamonaviy protsessorlarning ajralmas xususiyatiga aylandi.

Ikkinchi darajali kesh (L2) Pentium III chiqarilgandan so'ng barcha protsessorlarda paydo bo'ldi, garchi uning qadoqdagi birinchi tatbiqlari Pentium Pro protsessorida bo'lgan (lekin chipda emas). Zamonaviy protsessorlar 6 MB gacha bo'lgan chipdagi L2 kesh bilan jihozlangan. Qoida tariqasida, bu hajm, masalan, Intel Core 2 Duo protsessoridagi ikkita yadro o'rtasida bo'linadi. Odatda L2 konfiguratsiyalari yadro uchun 512 KB yoki 1 MB keshni ta'minlaydi. Kichikroq L2 keshiga ega protsessorlar odatda past narx darajasida bo'ladi. Quyida L2 keshini dastlabki joriy qilish diagrammasi keltirilgan.

Pentium Pro protsessor paketida L2 keshiga ega edi. Pentium III va Athlonning keyingi avlodlarida L2 keshi alohida SRAM chiplari orqali amalga oshirildi, bu o'sha paytda juda keng tarqalgan edi (1998, 1999).

180 nm gacha bo'lgan texnologik texnologiyaning keyingi e'lon qilinishi ishlab chiqaruvchilarga L2 keshini protsessor matritsasiga nihoyat birlashtirishga imkon berdi.


Birinchi ikki yadroli protsessorlar har bir paketga ikkita matritsani o'z ichiga olgan mavjud dizaynlardan foydalanganlar. AMD monolit chipda ikki yadroli protsessorni taqdim etdi, xotira kontrolleri va kalitni qo'shdi va Intel o'zining birinchi ikki yadroli protsessoriga ikkita bitta yadroli chiplarni bitta paketga yig'di.


Birinchi marta L2 keshi Core 2 Duo protsessorlarida ikkita hisoblash yadrolari o'rtasida taqsimlana boshladi. AMD oldinga bordi va o'zining birinchi to'rt yadroli Phenomni noldan yaratdi va Intel xarajatlarni kamaytirish uchun birinchi to'rt yadroli protsessor uchun yana bir juft matritsadan, bu safar ikkita ikki yadroli Core 2 o'lchagichdan foydalandi.

Uchinchi darajadagi kesh Alpha 21165 (96 KB, protsessorlar 1995 yilda taqdim etilgan) yoki IBM Power 4 (256 KB, 2001) protsessorlarining dastlabki kunlaridan beri mavjud. Biroq, x86-ga asoslangan arxitekturalarda L3 keshi birinchi marta Intel Itanium 2, Pentium 4 Extreme (Gallatin, ikkala protsessor 2003 yilda) va Xeon MP (2006) modellarida paydo bo'ldi.

Ilk amalga oshirishlar kesh ierarxiyasining boshqa darajasini ta'minladi, ammo zamonaviy arxitekturalar L3 keshini ko'p yadroli protsessorlarda yadrolararo ma'lumotlarni uzatish uchun katta, umumiy bufer sifatida ishlatadi. Bu assotsiativlikning yuqori n-darajasi bilan ta'kidlanadi. Bir nechta yadrolar asosiy operativ xotiraga juda sekin kirishni ishlatadigan vaziyatga duch kelgandan ko'ra, keshda ma'lumotlarni bir oz ko'proq izlash yaxshiroqdir. AMD birinchi marta yuqorida aytib o'tilgan Phenom liniyasiga ega ish stoli protsessorida L3 keshini taqdim etdi. 65 nm Phenom X4 2 MB umumiy L3 keshiga ega va zamonaviy 45 nm Phenom II X4 allaqachon 6 MB umumiy L3 keshiga ega. Intel Core i7 va i5 protsessorlari 8 MB L3 keshdan foydalanadi.

Zamonaviy to'rt yadroli protsessorlarda har bir yadro uchun ajratilgan L1 va L2 keshlari, shuningdek, barcha yadrolar tomonidan taqsimlangan katta L3 keshlari mavjud. Birgalikda L3 keshi, shuningdek, yadrolar parallel ravishda ishlashi mumkin bo'lgan ma'lumotlarni almashish imkonini beradi.


AMD protsessorlari uchun L3 keshi qanchalik muhim?

Haqiqatan ham, ko'p yadroli protsessorlarni barcha mavjud yadrolar tomonidan taqsimlanadigan maxsus xotira bilan jihozlash mantiqan. Ushbu rolda tezkor uchinchi darajali (L3) kesh tez-tez so'raladigan ma'lumotlarga kirishni sezilarli darajada tezlashtirishi mumkin. Keyin yadrolar, agar iloji bo'lsa, sekin asosiy xotiraga (RAM) kirishga majbur bo'lmaydi.

Hech bo'lmaganda nazariy jihatdan. AMD yaqinda L3 keshsiz Phenom II X4 modeli bo'lgan Athlon II X4 protsessorini e'lon qildi va bu unchalik zarur emasligini ta'kidladi. Kesh ishlashga qanday ta'sir qilishini tekshirish uchun ikkita protsessorni (L3 keshli va keshsiz) to'g'ridan-to'g'ri solishtirishga qaror qildik.

Kesh qanday ishlaydi?

Sinovlarga kirishdan oldin, ba'zi bir asoslarni tushunish muhimdir. Kesh qanday ishlashi printsipi juda oddiy. Kesh protsessor so'rovlarini uzoqroq va sekinroq xotiraga kamaytirish uchun protsessorning qayta ishlash yadrolariga iloji boricha yaqinroq ma'lumotlarni buferlaydi. Zamonaviy ish stoli platformalarida kesh ierarxiyasi RAMga kirishdan oldingi uchta darajani o'z ichiga oladi. Bundan tashqari, ikkinchi va, xususan, uchinchi darajali keshlar nafaqat ma'lumotlarni buferlash uchun xizmat qiladi. Ularning maqsadi yadrolar ma'lumot almashishi kerak bo'lganda protsessor avtobusining ortiqcha yuklanishini oldini olishdir.

Xitlar va o'tkazib yuborilganlar

Kesh arxitekturalarining samaradorligi urish tezligi bilan o'lchanadi. Kesh tomonidan qondirilishi mumkin bo'lgan ma'lumotlar so'rovlari xit deb hisoblanadi. Agar ushbu keshda kerakli ma'lumotlar bo'lmasa, so'rov xotira quvuri bo'ylab uzatiladi va o'tkazib yuborilgan hisoblanadi. Albatta, o'tkazib yuborish ma'lumot olish uchun ko'proq vaqt talab qiladi. Natijada, hisoblash quvurida "pufakchalar" (bo'sh turish) va kechikishlar paydo bo'ladi. Xitlar, aksincha, maksimal ishlashni saqlab qolishga imkon beradi.

Keshga kirish, eksklyuzivlik, izchillik

O'zgartirish siyosati yangi yozuvlar uchun keshda bo'sh joy qanday bo'lishini belgilaydi. Keshga yozilgan ma'lumotlar oxir-oqibat asosiy xotirada paydo bo'lishi kerakligi sababli, tizimlar buni keshga yozish (yozish orqali) bilan bir vaqtda amalga oshirishi yoki ma'lumotlar joylarini "iflos" (qayta yozish) deb belgilashi va unga yozishi mumkin. xotira. u keshdan chiqarilganda.

Bir nechta kesh darajalaridagi ma'lumotlar faqat, ya'ni ortiqcha holda saqlanishi mumkin. Keyin ikkita turli kesh ierarxiyasida bir xil ma'lumotlar qatorlarini topa olmaysiz. Yoki keshlar inklyuziv tarzda ishlashi mumkin, ya'ni pastki kesh darajalari yuqori kesh darajalarida (protsessor yadrosiga yaqinroq) mavjud ma'lumotlarni o'z ichiga olishi kafolatlanadi. AMD Phenom eksklyuziv L3 keshidan foydalanadi, Intel esa inklyuziv kesh strategiyasiga amal qiladi. Muvofiqlik protokollari turli yadrolar, kesh darajalari va hatto protsessorlarda ma'lumotlarning yaxlitligi va yangiligini ta'minlaydi.

Kesh hajmi

Kattaroq kesh ko'proq ma'lumotni saqlashi mumkin, ammo kechikishni oshiradi. Bundan tashqari, katta kesh juda ko'p protsessor tranzistorlarini iste'mol qiladi, shuning uchun tranzistorlar byudjeti, o'lchami, quvvat sarfi va ishlash / kechikish o'rtasidagi muvozanatni topish muhimdir.

Assotsiativlik

Operativ xotiradagi yozuvlar to'g'ridan-to'g'ri keshga joylashtirilishi mumkin, ya'ni RAMdan olingan ma'lumotlarning nusxasi uchun faqat bitta kesh pozitsiyasi mavjud yoki ular n-tarmoqli assotsiativ bo'lishi mumkin, ya'ni keshda bu joylashishi mumkin bo'lgan n ta joy mavjud. ma'lumotlar saqlanishi mumkin. Assotsiativlikning yuqori darajalari (to'liq assotsiativ keshlargacha) keshlashda ko'proq moslashuvchanlikni ta'minlaydi, chunki keshdagi mavjud ma'lumotlarni qayta yozish kerak emas. Boshqacha qilib aytganda, yuqori n-darajali assotsiativlik yuqori urish tezligini kafolatlaydi, lekin u kechikishni ham oshiradi, chunki bu barcha assotsiatsiyalarni urish uchun tekshirish uchun ko'proq vaqt kerak bo'ladi. Odatda, eng yuqori assotsiatsiya darajasi keshlashning oxirgi darajasi uchun maqbuldir, chunki u erda maksimal sig'im mavjud va bu keshdan tashqarida ma'lumotlarni qidirish protsessorning sekin RAMga kirishiga olib keladi.

Mana bir nechta misollar: Core i5 va i7 maʼlumotlar uchun 8 tomonlama assotsiativlikka ega 32 KB L1 keshdan va koʻrsatmalar uchun 4 tomonlama assotsiativlikka ega 32 KB L1 keshdan foydalanadi. Intel ko'rsatmalar tezroq mavjud bo'lishini va L1 ma'lumotlar keshi maksimal urish tezligiga ega bo'lishini xohlashi tushunarli. Intel protsessorlaridagi L2 keshi 8 tomonlama assotsiativlikka ega va Intel L3 keshi yanada aqlli, chunki u hitlarni maksimal darajada oshirish uchun 16 tomonlama assotsiativlikni amalga oshiradi.

Biroq, AMD kechikishni kamaytirish uchun ikki tomonlama assotsiativ L1 keshdan foydalanadigan Phenom II X4 protsessorlari bilan boshqa strategiyaga amal qilmoqda. Mumkin bo'lgan xatolarni qoplash uchun kesh hajmi ikki baravar oshirildi: ma'lumotlar uchun 64 KB va ko'rsatmalar uchun 64 KB. L2 keshi Intel dizayni kabi 8 tomonlama assotsiativlikka ega, ammo AMD L3 keshi 48 tomonlama assotsiativlik bilan ishlaydi. Ammo bitta kesh arxitekturasini boshqasiga tanlash qarorini butun CPU arxitekturasini hisobga olmasdan baholash mumkin emas. Sinov natijalari amaliy ahamiyatga ega bo'lishi tabiiydir va bizning maqsadimiz aynan ushbu kompleks ko'p darajali keshlash strukturasini amaliy sinovdan o'tkazish edi.

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, kod ishlashiga ta'sir qiluvchi omillarni tushunish uchun kesh mexanizmlari haqida zerikarli tafsilotlarni bilish kerak.

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 ishlashni baholash va yakuniy xulosalarga katta ta'sir qilmaydi. Tabiiyki, oqilona chegaralar ichida, agar siz massivdagi qiymatni o'qish xesh-jadvalga 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 bir vaqtning o'zida bir 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, turli massiv o'lchamlarini tekshirib ko'raylik; massiv endi turli darajadagi keshlarga mos kelmasa, unumdorlikning pasayishini ko'rishimiz kerak.

Kod quyidagicha:

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 sikl ichidagi buyruqlar turli xil ma'lumotlarga bog'liqliklarga ega. 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 hududidan olingan 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-da, 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, biz 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 sonli zarbalarni 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 chegarasida uziladi? Massiv hajmi 4 MB yoki undan kam bo'lsa, 16-yozuvli kesh o'zini to'liq assotsiativ kesh kabi tutadi, 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. Bu erda kesh assotsiativlik darajasi ikkinchi darajali rol o'ynaydi; cheklash L2 keshining hajmiga 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. Esda tutingki, 512 qadam va massiv o'lchami 8 MB bo'lgan allaqachon muhokama qilingan misolda barcha kerakli ma'lumotlarni saqlash uchun bizga atigi 1 MB kesh kerak, ammo kesh assotsiativligi etarli emasligi sababli bu mumkin emas.

  4. Nima uchun uchburchakning chap tomoni asta-sekin kuchayib boradi? 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 uchun testimizda iteratsiyalar soni bir xil bo'lganligi sababli, arzonroq qadam kamroq ishlashga 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 so'ng barcha boshqa yadrolar qatorni yana keshlashi kerak bo'ladi. Bu keshlash mexanizmini ishlamay qoldiradi 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 oshirishdan ko'ra 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 bashoratlaringizni tasdiqlashingiz kerak.

Xulosa

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

Ko'pgina zamonaviy ish stoli kompyuterlaridagi chiplar to'rt yadroga ega, ammo chip ishlab chiqaruvchilari allaqachon olti yadroga o'tish rejalarini e'lon qilishgan va 16 yadroli protsessorlar bugungi kunda ham yuqori darajali serverlar uchun odatiy hol emas.

Yadrolar qanchalik ko'p bo'lsa, bir vaqtning o'zida birgalikda ishlashda barcha yadrolar o'rtasida xotirani taqsimlash muammosi shunchalik katta bo'ladi. Yadrolar sonining ko'payishi bilan ma'lumotlarni qayta ishlashda yadrolarni boshqarish uchun yo'qotilgan vaqtni minimallashtirish yanada foydali bo'ladi - chunki ma'lumotlar almashinuvi tezligi protsessor tezligidan va xotirada ma'lumotlarni qayta ishlash tezligidan orqada qoladi. Siz boshqa birovning tezkor keshiga jismonan kirishingiz mumkin yoki o'zingizning sekin xotirangizga kirishingiz mumkin, lekin ma'lumotlarni uzatish vaqtini tejashingiz mumkin. Vazifa dasturlar tomonidan talab qilinadigan xotira miqdori har bir turdagi kesh xotira hajmiga aniq mos kelmasligi bilan murakkablashadi.

Jismoniy jihatdan, protsessorga imkon qadar yaqinroq bo'lgan juda cheklangan hajmdagi xotirani joylashtirish mumkin - protsessorning L1 keshi, hajmi juda ahamiyatsiz. Massachusets texnologiya instituti kompyuter fanlari va sun'iy intellekt laboratoriyasi tadqiqotchilari Daniel Sanches, Po-An Tsay va Natan Bekmann real vaqtda dasturlarning moslashuvchan ierarxiyasi uchun kompyuterga xotirasining turli turlarini sozlashni o'rgatishdi. "Jenga" deb nomlangan yangi tizim dasturning xotiraga kirish hajmi va chastotasini tahlil qiladi va 3 turdagi protsessor keshlarining har birining quvvatini yuqori samaradorlik va energiya tejashni ta'minlaydigan kombinatsiyalarda qayta taqsimlaydi.


Boshlash uchun tadqiqotchilar bir yadroli protsessor uchun dasturlar ustida ishlashda statik va dinamik xotirani birlashtirganda unumdorlikni oshirishni sinab ko'rdilar va birlamchi ierarxiyani olishdi - qachon qaysi kombinatsiyadan foydalanish yaxshiroq. 2 turdagi xotiradan yoki bittadan. Ikki parametr baholandi: signalning kechikishi (kechikish) va har bir dasturning ishlashi paytida energiya sarfi. Dasturlarning taxminan 40% xotira turlarining kombinatsiyasi bilan yomonroq ishlay boshladi, qolganlari esa yaxshiroq. Qaysi dasturlar aralash ishlashni "yoqadi" va qaysilari xotira hajmini yoqtirishini qayd etib, tadqiqotchilar Jenga tizimini yaratdilar.

Ular 36 yadroli virtual kompyuterda 4 turdagi dasturlarni virtual sinovdan o‘tkazishdi. Sinovdan o'tgan dasturlar:

  • omnet - Objective Modular Network Testbed, C simulyatsiya kutubxonasi va tarmoq simulyatsiya vositalari platformasi (rasmda ko'k)
  • mcf - Meta Content Framework (qizil rang)
  • astar - virtual haqiqatni ko'rsatish dasturi (yashil)
  • bzip2 - arxivchi (binafsha rang)


Rasmda har bir dasturning ma'lumotlari qayerda va qanday qayta ishlanganligi ko'rsatilgan. Harflar har bir ilova qayerda ishlayotganini (har kvadrantda bittadan), ranglar uning ma'lumotlari qayerda joylashganligini va soyalar mavjud bo'lganda virtual ierarxiyaning ikkinchi darajasini ko'rsatadi.

Kesh darajalari

CPU keshi bir necha darajalarga bo'lingan. Universal protsessorlar uchun - 3 gacha. Eng tez xotira birinchi darajali kesh - L1-kesh, chunki u protsessor bilan bir xil chipda joylashgan. Ko'rsatmalar keshi va ma'lumotlar keshidan iborat. L1 keshi bo'lmagan ba'zi protsessorlar ishlay olmaydi. L1 keshi protsessor chastotasida ishlaydi va unga har bir soat siklida kirish mumkin. Ko'pincha bir vaqtning o'zida bir nechta o'qish / yozish operatsiyalarini bajarish mumkin. Ovoz odatda kichik - 128 KB dan oshmaydi.

Ikkinchi darajali kesh, L2, L1 keshi bilan o'zaro ta'sir qiladi. Bu ikkinchi eng tez. Odatda u L1 kabi chipda yoki yadroga yaqin joyda, masalan, protsessor kartridjida joylashgan. Eski protsessorlarda anakartdagi chiplar to'plami. L2 kesh hajmi 128 KB dan 12 MB gacha. Zamonaviy ko'p yadroli protsessorlarda bir xil chipda joylashgan ikkinchi darajali kesh alohida xotira hisoblanadi - umumiy kesh hajmi 8 MB, har bir yadro 2 MB ni tashkil qiladi. Odatda, yadro chipida joylashgan L2 keshining kechikishi 8 dan 20 yadroli soat tsiklini tashkil qiladi. Cheklangan xotira maydoniga ko'p kirishni o'z ichiga olgan vazifalarda, masalan, DBMS, undan to'liq foydalanish unumdorlikni o'n barobar oshiradi.

L3 keshi odatda undan ham kattaroqdir, garchi L2 keshidan biroz sekinroq (L2 va L3 orasidagi avtobus L1 va L2 orasidagi avtobusga qaraganda torroq bo'lganligi sababli). L3 odatda CPU yadrosidan alohida joylashgan, lekin katta bo'lishi mumkin - 32 MB dan ortiq. L3 keshi oldingi keshlarga qaraganda sekinroq, ammo RAMga qaraganda tezroq. Ko'p protsessorli tizimlarda u umumiy qo'llaniladi. Uchinchi darajali keshdan foydalanish juda tor vazifalar doirasida oqlanadi va nafaqat unumdorlikning oshishini ta'minlabgina qolmay, balki, aksincha, tizimning ishlashining umumiy pasayishiga olib kelishi mumkin.

Ikkinchi va uchinchi darajali keshni o'chirib qo'yish, ma'lumotlar hajmi kesh hajmidan kamroq bo'lsa, matematik muammolarni hal qilishda eng foydali hisoblanadi. Bunday holda, siz barcha ma'lumotlarni bir vaqtning o'zida L1 keshiga yuklashingiz va keyin uni qayta ishlashingiz mumkin.


Jenga vaqti-vaqti bilan resurs cheklovlari va dastur xatti-harakatlarini hisobga olgan holda ma'lumotlar almashinuvini minimallashtirish uchun OS darajasida virtual ierarxiyalarni qayta sozlaydi. Har bir qayta konfiguratsiya to'rt bosqichdan iborat.

Jenga ma'lumotlarni faqat qaysi dasturlar jo'natilayotganiga qarab emas - katta bir tezlikli xotirani yaxshi ko'radiganlar yoki aralash keshlar tezligini yaxshi ko'radiganlar, balki xotira hujayralarining qayta ishlanayotgan ma'lumotlarga jismoniy yaqinligiga qarab ham tarqatadi. Dastur sukut bo'yicha yoki ierarxiya bo'yicha qanday kesh turini talab qilishidan qat'i nazar. Asosiysi, signalning kechikishi va energiya sarfini minimallashtirish. Dastur qancha xotira turiga "yoqtirishiga" qarab, Jenga har bir virtual ierarxiyaning kechikish vaqtini bir yoki ikki daraja bilan modellaydi. Ikki darajali ierarxiyalar sirtni, bir darajali ierarxiyalar egri chiziqni hosil qiladi. Jenga keyin VL1 o'lchamlarida minimal kechikishni loyihalashtiradi, natijada ikkita egri chiziq paydo bo'ladi. Nihoyat, Jenga eng yaxshi ierarxiyani tanlash uchun ushbu egri chiziqlardan foydalanadi (ya'ni VL1 o'lchami).

Jenga foydalanish sezilarli ta'sir ko'rsatdi. Virtual 36 yadroli chip 30 foizga tezroq ishlay boshladi va 85 foizga kamroq energiya sarfladi. Albatta, hozircha Jenga faqat ishlaydigan kompyuterning simulyatsiyasi va bu keshning haqiqiy misollarini ko'rishdan oldin va hatto chip ishlab chiqaruvchilari texnologiyani yoqtirsa, uni qabul qilishdan oldin biroz vaqt o'tadi.

An'anaviy 36 yadroli mashinaning konfiguratsiyasi

  • Protsessorlar. 36 yadroli, x86-64 ISA, 2,4 gigagertsli, Silvermontga o'xshash OOO: 8B kenglikda
    ifetch; 2-darajali bpred 512 × 10-bit BHSR + 1024 × 2-bit PHT, 2 tomonlama dekodlash/muammo/nomini o'zgartirish/commit, 32-kirish IQ va ROB, 10-kirish LQ, 16-kirish SQ; 371 pJ/ko'rsatma, 163 mVt/yadro statik quvvat
  • L1 keshlari. 32 KB, 8 tomonlama to'plam-assotsiativ, ajratilgan ma'lumotlar va ko'rsatmalar keshlari,
    3 davrli kechikish; Har bir urish/o‘tkazib yuborish uchun 15/33 pJ
  • Prefetchers xizmati. 16-kirish oqim prefetchers keyin modellashtirilgan va qarshi tasdiqlangan
    Nehalem
  • L2 keshlari. Yadro boshiga 128 KB shaxsiy, 8 tomonlama to‘plam-assotsiativ, inklyuziv, 6 davrli kechikish; Har bir urish/o'tkazib yuborish uchun 46/93 pJ
  • Kogerent rejim. Jenga uchun 16 tomonlama, 6 davrli kechikish ma'lumotnomalari banklari; boshqalar uchun keshdagi L3 kataloglari
  • Global NoC. 6 × 6 mesh, 128-bitli flits va havolalar, X-Y marshrutlash, 2-sikl quvurli routerlar, 1-sikli havolalar; Router/bog'lanish uchun 63/71 pJ, 12/4 mVt router/bog'lanish statik quvvati
  • Statik xotira SRAMni bloklaydi. 18 MB, har bir plitka uchun bitta 512 KB bank, 4 tomonlama 52 nomzod zcache, 9 davrli bank kechikishi, Vantage bo'limi; 240/500 pJ boshiga urish/o‘tkazib yuborish, 28 mVt/bank statik quvvat
  • Ko'p qatlamli stacked DRAM. 1152MB, 4 ta plitka uchun bitta 128MB ombor, MAP-I DDR3-3200 (1600MHz) bilan qotishma, 128-bitli avtobus, 16 daraja, 8 ta bank/darajali, 2 KB qatorli bufer; Har bir urish/o‘tkazib yuborish uchun 4,4/6,2 nJ, 88 mVt/toza statik quvvat
  • Asosiy xotira. 4 ta DDR3-1600 kanali, 64 bitli avtobus, 2 daraja/kanal, 8 ta bank/darajali, 8 KB qatorli bufer; 20 nJ/kirish, 4 Vt statik quvvat
  • DRAM vaqtlari. tCAS=8, tRCD=8, tRTP=4, tRAS=24, tRP=8, tRRD=4, tWTR=4, tWR=8, tFAW=18 (tCKdagi barcha vaqtlar; stacked DRAM asosiy xotira sifatida tCK ning yarmiga ega) )