Qattiq disk keshi nima va u nima uchun? Kesh hajmining 3-avlod Core i5 protsessorining xotira hajmiga ta'siri

Hammaga xayrli kun. Bugun biz sizga kesh kabi narsani tushuntirishga harakat qilamiz. Protsessor keshi - bu DDR4 haqida gap ketganda, standart operativ xotiradan 16-17 baravar tezroq bo'lgan juda tez ma'lumotlarni qayta ishlash massivi.

Ushbu maqoladan siz quyidagilarni bilib olasiz:

Bu protsessorning maksimal tezlikda ishlashiga imkon beruvchi kesh xotirasining hajmi, operativ xotira har qanday ma'lumotni qayta ishlashni kutmasdan va yakunlangan hisob-kitoblar natijalarini keyingi ishlov berish uchun chipga jo'natadi. Shunga o'xshash printsipni HDD-da kuzatish mumkin, u erda faqat 8-128 MB bufer ishlatiladi. Yana bir narsa shundaki, tezliklar ancha past, lekin jarayon shunga o'xshash.

Protsessor keshi nima?

Umuman olganda, hisoblash jarayoni qanday ishlaydi? Barcha ma'lumotlar RAMda saqlanadi, u muhim foydalanuvchi va tizim ma'lumotlarini vaqtincha saqlash uchun mo'ljallangan. Protsessor o'zi uchun kesh xotirasi deb ataladigan o'ta tezkor blokga o'rnatiladigan ma'lum miqdordagi vazifalarni tanlaydi va o'zining bevosita vazifalarini bajarishga kirishadi.

Hisoblash natijalari yana operativ xotiraga yuboriladi, lekin ancha kichikroq miqdorda (mingta chiqish qiymati o'rniga biz ancha kamroq olamiz) va qayta ishlash uchun yangi massiv olinadi. Va shunga o'xshash ish tugamaguncha.

Ish tezligi operativ xotira samaradorligi bilan belgilanadi. Ammo biron bir zamonaviy DDR4 moduli, shu jumladan 4000 MGts dan past chastotali overclocking echimlari ham "sekin" keshga ega bo'lgan eng past protsessorning imkoniyatlariga yaqin emas edi.

Buning sababi shundaki, protsessorning tezligi operativ xotiraning ishlashidan o'rtacha 15 marta yoki undan ham yuqori. Va faqat chastota parametrlariga qaramang, ularga qo'shimcha ravishda etarli farqlar mavjud.
Nazariy jihatdan, hatto o'ta kuchli Intel Xeon va AMD Epyc ham bo'sh turishga majbur bo'lganligi ma'lum bo'ldi, lekin aslida ikkala server chiplari ham o'z chegaralarida ishlaydi. Va barchasi, chunki ular kesh hajmi (60 MB yoki undan ko'p) bo'yicha kerakli miqdordagi ma'lumotlarni to'playdi va ma'lumotlarni bir zumda qayta ishlaydi. Operativ xotira o'ziga xos ombor vazifasini bajaradi, undan massivlar hisob-kitoblar uchun olinadi. Kompyuterning hisoblash samaradorligi oshadi va hamma xursand.

Tarixga qisqacha ekskursiya

Kesh xotirasi haqida birinchi eslatma 80-yillarning oxiriga to'g'ri keladi. Shu vaqtgacha protsessor va xotira tezligi taxminan bir xil edi. Chiplarning jadal rivojlanishi operativ xotira tezligini oshirish uchun qandaydir "tayoqcha" ni talab qildi, ammo o'ta tezkor chiplardan foydalanish juda qimmatga tushdi va shuning uchun ular yanada tejamkor variant - yuqori tezlikdagi xotirani joriy etish bilan ishlashga qaror qilishdi. CPUdagi massiv.

Kesh xotira moduli birinchi marta Intel 80386 da paydo bo'ldi. O'sha paytda DRAM kechikishlari 120 nanosekund atrofida bo'lgan, zamonaviyroq SRAM moduli esa kechikish vaqtini o'sha paytda ta'sirchan 10 nanosekundga qisqartirgan. Taxminiy rasm HDD va SSD o'rtasidagi qarama-qarshilikda aniqroq namoyon bo'ladi.

Dastlab, kesh xotirasi to'g'ridan-to'g'ri anakartlarga lehimlangan, bu o'sha davrdagi texnik jarayonning darajasiga bog'liq. Intel 80486 dan boshlab, 8 kb xotira to'g'ridan-to'g'ri protsessor qolipiga kiritildi, bu esa unumdorlikni yanada oshirdi va o'lim maydonini qisqartirdi.

Ushbu joylashtirish texnologiyasi Pentium MMX chiqarilgunga qadar dolzarb bo'lib qoldi, shundan so'ng SRAM-xotira yanada rivojlangan SDRAM bilan almashtirildi.
Va protsessorlar ancha kichiklashdi va shuning uchun tashqi sxemalarga bo'lgan ehtiyoj yo'qoldi.

Kesh darajalari

Zamonaviy protsessorlarni belgilashda va ga qo'shimcha ravishda siz 1,2 va 3 darajali kesh hajmi kabi narsalarni topishingiz mumkin. Bu qanday aniqlanadi va u nimaga ta'sir qiladi? Keling, oddiy so'zlar bilan tushunaylik.

  • Birinchi darajali kesh (L1) protsessor arxitekturasidagi eng muhim va eng tezkor chipdir. Bitta protsessor yadro soniga teng modullar sonini sig'dira oladi. Shunisi e'tiborga loyiqki, mikrosxema xotirada eng ko'p talab qilinadigan va muhim ma'lumotlarni faqat yadrodan saqlashi mumkin. Massiv hajmi ko'pincha 32-64 KB bilan chegaralanadi.
  • Ikkinchi darajadagi kesh (L2) - tezlikning pasayishi bufer hajmining oshishi bilan qoplanadi, bu 256 yoki hatto 512 KB ga etadi. Ishlash printsipi L1 bilan bir xil, ammo undagi kamroq ustuvor ma'lumotlarni saqlash tufayli xotira so'rovi chastotasi pastroq.
  • Uchinchi darajali kesh (L3) barcha ro'yxatdagilar orasida eng sekin va eng katta hajmli bo'limdir. Shunga qaramay, bu massiv RAMga qaraganda ancha tezroq. Server chiplari haqida gap ketganda, hajmi 20 va hatto 60 MB ga yetishi mumkin. Massivning foydasi juda katta: u tizimning barcha yadrolari o'rtasida ma'lumotlar almashinuvining asosiy bo'g'inidir. L3 bo'lmasa, chipning barcha elementlari tarqalib ketgan bo'lar edi.

Sotuvda siz ikki va uch darajali xotira tuzilishini topishingiz mumkin. Qaysi biri yaxshiroq? Agar siz protsessorni faqat ofis dasturlari va tasodifiy o'yinlar uchun ishlatsangiz, unda siz hech qanday farqni sezmaysiz. Agar tizim murakkab 3D o'yinlar, arxivlash, renderlash va grafiklarga e'tibor bilan yig'ilgan bo'lsa, ba'zi hollarda o'sish 5 dan 10% gacha bo'ladi.
L3 keshi, agar siz muntazam ravishda murakkab hisob-kitoblarni talab qiladigan ko'p tarmoqli ilovalar bilan muntazam ishlashni xohlasangiz oqlanadi. Shu sababli, server modellari ko'pincha katta L3 keshlaridan foydalanadi. Garchi bu etarli bo'lmagan paytlar bo'lsa ham, shuning uchun siz L4 deb ataladigan modullarni qo'shimcha ravishda o'rnatishingiz kerak bo'ladi, ular anakartga ulangan alohida mikrosxemaga o'xshaydi.

Protsessoringizdagi darajalar sonini va kesh hajmini qanday aniqlash mumkin?

Keling, buni 3 usulda amalga oshirish mumkinligidan boshlaylik:

  • buyruq satri orqali (faqat L2 va L3 kesh);
  • Internetda texnik xususiyatlarni qidirish orqali;
  • uchinchi tomon yordam dasturlaridan foydalanish.

Agar biz L1 protsessorlarining ko'pchiligi uchun 32 KB va L2 va L3 keng tarqalgan bo'lib o'zgarishi mumkinligini asos qilib olsak, bizga oxirgi 2 qiymat kerak bo'ladi. Ularni qidirish uchun "Ishga tushirish" orqali buyruq qatorini oching (qidiruv satri orqali "cmd" qiymatini kiriting).

Tizim L2 uchun shubhali darajada yuqori qiymatni ko'rsatadi. Siz uni protsessor yadrolari soniga bo'lishingiz va yakuniy natijani bilib olishingiz kerak.

Agar siz tarmoqdagi ma'lumotlarni qidirmoqchi bo'lsangiz, avval CPUning aniq nomini bilib oling. "Mening kompyuterim" belgisini o'ng tugmasini bosing va "Xususiyatlar" ni tanlang. "Tizim" ustunida bizga haqiqatan ham kerak bo'lgan "Protsessor" elementi bo'ladi. Xuddi shu Google yoki Yandex-da uning nomini qayta yozing va saytlardagi qiymatni ko'ring. Ishonchli ma'lumot uchun ishlab chiqaruvchining rasmiy portallarini (Intel yoki AMD) tanlash yaxshidir.
Uchinchi usul ham muammo tug'dirmaydi, lekin toshning texnik xususiyatlarini o'rganish uchun GPU-Z, AIDA64 va boshqa yordamchi dasturlar kabi qo'shimcha dasturlarni o'rnatishni talab qiladi. Overclocking va batafsil to'planish muxlislari uchun variant.

Natijalar

Endi siz kesh xotirasi nima ekanligini, uning hajmi nimaga bog'liqligini va ultra tezkor ma'lumotlar majmuasi qanday maqsadlarda ishlatilishini tushunasiz. Hozirgi vaqtda katta hajmdagi kesh xotirasi bo'yicha bozordagi eng qiziqarli echimlarni AMD Ryzen 5 va 7 qurilmalari 16 MB L3 deb atash mumkin.

Keyingi maqolalarda biz protsessorlar, chiplarning afzalliklari va boshqalar kabi mavzularni ko'rib chiqamiz. va biz bilan qoling. Yana uchrashgunimizcha, xayr.

Barcha foydalanuvchilar kompyuterning ma'lumotlarni qayta ishlash uchun mas'ul bo'lgan protsessor kabi elementlarini, shuningdek ularni saqlash uchun mas'ul bo'lgan tasodifiy kirish xotirasini (RAM yoki RAM) yaxshi bilishadi. Ammo protsessor keshi (Cache CPU), ya'ni protsessorning o'zi (super-RAM xotirasi) mavjudligini hamma ham bilmaydi.

Kompyuter ishlab chiqaruvchilarini protsessor uchun maxsus xotiradan foydalanishga undagan sabab nima? Kompyuter uchun operativ xotira yetarli emasmi?

Darhaqiqat, uzoq vaqt davomida shaxsiy kompyuterlar hech qanday kesh-xotirasiz ishladilar. Ammo, ma'lumki, protsessor shaxsiy kompyuterdagi eng tezkor qurilma bo'lib, uning tezligi har bir yangi avlod protsessorlari bilan o'sib bordi. Hozirgi vaqtda uning tezligi soniyada milliardlab operatsiyalar bilan o'lchanadi. Shu bilan birga, standart RAM evolyutsiya jarayonida o'z ish faoliyatini sezilarli darajada oshirmadi.

Umuman olganda, xotira chiplari uchun ikkita asosiy texnologiya mavjud - statik xotira va dinamik xotira. Ularning tuzilishining tafsilotlarini o'rganmasdan, biz faqat statik xotira dinamik xotiradan farqli o'laroq, regeneratsiyani talab qilmasligini aytamiz; bundan tashqari, statik xotirada bir bit axborot uchun 4-8 tranzistor, dinamik xotirada esa 1-2 tranzistor ishlatiladi. Shunga ko'ra, dinamik xotira statik xotiradan ancha arzon, lekin ayni paytda ancha sekinroq. Hozirgi vaqtda operativ xotira chiplari dinamik xotira asosida ishlab chiqariladi.

Protsessorlar va operativ xotira tezligi nisbatining taxminiy evolyutsiyasi:

Shunday qilib, agar protsessor doimiy ravishda asosiy xotiradan ma'lumot olgan bo'lsa, u holda sekin dinamik xotirani kutish kerak bo'ladi va u doimo bo'sh qoladi. Xuddi shu holatda, agar statik xotira operativ xotira sifatida ishlatilsa, u holda kompyuterning narxi bir necha marta oshadi.

Shuning uchun oqilona kelishuv ishlab chiqildi. Operativ xotiraning asosiy qismi dinamik bo'lib qoldi, protsessor esa statik xotira chiplari asosida o'zining tezkor keshiga ega bo'ldi. Uning hajmi nisbatan kichik - masalan, L2 kesh hajmi bir necha megabaytni tashkil qiladi. Biroq, bu erda birinchi IBM PC kompyuterlarining barcha operativ xotirasi 1 MB dan kam bo'lganligini yodda tutish kerak.

Bundan tashqari, keshlash texnologiyasini joriy etishning maqsadga muvofiqligi, shuningdek, operativ xotiradagi turli ilovalar protsessorni turlicha yuklashi va buning natijasida qolganlarga nisbatan ustuvor ishlov berishni talab qiladigan juda ko'p ma'lumotlarga ta'sir qiladi.

Kesh tarixi

To'g'risini aytganda, kesh xotirasi shaxsiy kompyuterlarga o'tishidan oldin, u bir necha o'n yillar davomida superkompyuterlarda muvaffaqiyatli ishlatilgan.

Birinchi marta i80386 protsessoriga asoslangan shaxsiy kompyuterda atigi 16 KB kesh xotirasi paydo bo'ldi. Bugungi protsessorlar birinchi (eng kichik hajmdagi eng tez kesh - odatda 128 KB)dan uchinchisiga (eng katta hajmdagi eng sekin kesh - o'nlab MB gacha) keshning turli darajalaridan foydalanadi.

Dastlab protsessorning tashqi kesh xotirasi alohida chipda joylashgan edi. Biroq, vaqt o'tishi bilan, bu kesh va protsessor o'rtasida joylashgan avtobus ma'lumotlar almashinuvini sekinlashtirib, to'siq bo'lib qolishiga olib keldi. Zamonaviy mikroprotsessorlarda kesh xotiraning birinchi va ikkinchi darajalari protsessor yadrosining o'zida joylashgan.

Uzoq vaqt davomida protsessorlarda faqat ikkita kesh darajasi mavjud edi, lekin Intel Itanium CPUda birinchi marta barcha protsessor yadrolari uchun umumiy bo'lgan uchinchi darajali kesh xotirasi paydo bo'ldi. To'rt darajali keshga ega protsessorlarning ishlanmalari ham mavjud.

Keshni ishlash arxitekturasi va tamoyillari

Bugungi kunga kelib kesh xotirasini tashkil qilishning ikkita asosiy turi ma'lum bo'lib, ular kibernetika sohasidagi birinchi nazariy ishlanmalardan kelib chiqadi - Prinston va Garvard arxitekturalari. Prinston arxitekturasi ma'lumotlar va buyruqlarni saqlash uchun yagona xotira maydonini nazarda tutadi, Garvardda esa alohida. X86 liniyasining ko'pgina shaxsiy kompyuter protsessorlari alohida turdagi kesh xotirasidan foydalanadi. Bundan tashqari, zamonaviy protsessorlarda uchinchi turdagi kesh xotirasi ham paydo bo'ldi - operatsion tizim virtual xotirasi manzillarini jismoniy xotira manzillariga o'tkazishni tezlashtirish uchun mo'ljallangan assotsiativ tarjima buferi.

Soddalashtirilgan holda kesh xotirasi va protsessor o'rtasidagi o'zaro ta'sir sxemasini quyidagicha ta'riflash mumkin. Birinchidan, protsessor uchun zarur bo'lgan ma'lumotlarning mavjudligi eng tezkor - birinchi darajali keshda, keyin - ikkinchi darajali keshda va hokazolarda tekshiriladi. Agar keshning biron bir darajasida kerakli ma'lumotlar topilmasa, ular xato yoki keshni o'tkazib yuborish haqida gapirishadi. Agar keshda umuman ma'lumot bo'lmasa, protsessor uni operativ xotiradan yoki hatto tashqi xotiradan (qattiq diskdan) olishi kerak.

Protsessorning xotiradagi ma'lumotlarni qidirish tartibi:

Protsessor ma'lumotni shunday izlaydi

Kesh-xotiraning ishlashini va uning protsessorning hisoblash bloklari, shuningdek, operativ xotira bilan o'zaro ta'sirini boshqarish uchun maxsus kontroller mavjud.

Protsessor yadrosi, kesh va RAMning o'zaro ta'sirini tashkil qilish sxemasi:

Kesh-kontroller protsessor, operativ xotira va kesh o'rtasidagi asosiy aloqadir.

Shuni ta'kidlash kerakki, ma'lumotlarni keshlash ko'plab texnologiyalar va matematik algoritmlardan foydalanadigan murakkab jarayondir. Keshlashda qo'llaniladigan asosiy tushunchalar orasida keshni yozish usullari va kesh xotirasi assotsiativligi arxitekturasini ajratib ko'rsatish mumkin.

Kesh yozish usullari

Keshga ma'lumot yozishning ikkita asosiy usuli mavjud:

  1. Qayta yozish usuli (qayta yozish) - ma'lumotlar avval keshga, so'ngra ma'lum shartlar yuzaga kelganda RAMga yoziladi.
  2. Yozish usuli (yozish orqali) - ma'lumotlar bir vaqtning o'zida RAM va keshga yoziladi.

Kesh assotsiativlik arxitekturasi

Kesh assotsiativligi arxitekturasi RAMdan olingan ma'lumotlarni keshga joylashtirish usulini belgilaydi. Keshlash assotsiativlik arxitekturasining quyidagi asosiy variantlari mavjud:

  1. To'g'ridan-to'g'ri xaritalangan kesh - keshning ma'lum bir maydoni RAMning ma'lum bir maydoni uchun javobgardir
  2. To'liq assotsiativ kesh - har qanday kesh maydoni har qanday RAM maydoni bilan bog'lanishi mumkin
  3. Aralash kesh (to'plam-assotsiativ)

Turli kesh assotsiativlik arxitekturalari odatda turli kesh darajalarida ishlatilishi mumkin. To'g'ridan-to'g'ri RAM bilan keshlash eng tez keshlash variantidir, shuning uchun bu arxitektura odatda katta keshlar uchun ishlatiladi. O'z navbatida, to'liq assotsiativ keshda kamroq kesh xatolari (o'tkazib yuborilgan) mavjud.

Xulosa

Ushbu maqolada siz kesh xotirasi tushunchasi, kesh xotira arxitekturasi va keshlash usullari bilan tanishdingiz va zamonaviy kompyuterning ishlashiga qanday ta'sir qilishini bilib oldingiz. Kesh xotirasining mavjudligi protsessorning ish faoliyatini sezilarli darajada optimallashtirishi, uning bo'sh vaqtini qisqartirishi va natijada butun tizimning ish faoliyatini oshirishi mumkin.

Bugungi maqola mustaqil material emas - u oddiygina Core arxitekturasining uchta avlodi ishlashini teng asosda o'rganishni davom ettiradi (o'tgan yilning oxirida boshlangan va yaqinda davom etgan). To'g'ri, bugun biz yon tomonga kichik qadam qo'yamiz - yadrolar va kesh xotirasining chastotalari avvalgidek qoladi, ammo ikkinchisining sig'imi pasayadi. Bu nima uchun kerak? Eksperimentning tozaligi uchun biz oxirgi ikki avlodning “to‘liq” Core i7-dan foydalandik, uni Hyper-Threading texnologiyasi uchun yoqilgan va o‘chirilgan qo‘llab-quvvatlash bilan sinab ko‘rdik, chunki Core i5 8 emas, balki bir yarim yil davomida ta’minlangan. , lekin 6 MiB L3. Kesh-xotira hajmining ishlashga ta'siri ba'zan ishonganidek katta emasligi aniq, lekin u mavjud va undan uzoqlashishning iloji yo'q. Bundan tashqari, Core i5 Core i7 ga qaraganda ko'proq ommaviy ishlab chiqarilgan mahsulotlardir va birinchi avlodda ularni bu parametrda hech kim "xafa qilmadi". Ammo oldin ular biroz boshqacha tarzda cheklangan edi: birinchi avlod i5-da UnCore soat tezligi atigi 2,13 gigagertsli edi, shuning uchun bizning "Nehalem" 2,4 gigagertsli 700-chi qatorning aniq vakili emas, balki biroz tezroq protsessor . Biroq, biz ishtirokchilar ro'yxatini sezilarli darajada kengaytirish va sinov shartlarini qayta ishlashni keraksiz deb hisobladik - baribir, biz bir necha bor ogohlantirganimizdek, ushbu chiziqni sinab ko'rish hech qanday yangi amaliy ma'lumot keltirmaydi: haqiqiy protsessorlar butunlay boshqa rejimlarda ishlaydi. Ammo barcha nozik fikrlarni chuqur tushunishni istaganlar uchun, biz uchun bunday sinov qiziqarli bo'ladi.

Sinov stend konfiguratsiyasi

Biz o'zimizni faqat to'rtta protsessor bilan cheklashga qaror qildik va ikkita asosiy ishtirokchi bo'ladi: ikkalasi ham to'rt yadroli Ivy Bridge, lekin turli xil L3 kesh sig'imlariga ega. Uchinchisi – “Nehalem HT”: oxirgi marta yakuniy hisob bo‘yicha “Ivy Bridge is simple” bilan deyarli bir xil edi. Va "shunchaki Nehalem", yuqorida aytib o'tganimizdek, 2,4 gigagertsli chastotada ishlaydigan birinchi avlod haqiqiy Core i5-dan bir oz tezroq (UnCore chastotasi 700-qatorda biroz pastroq bo'lganligi sababli) , lekin juda radikal emas. Ammo taqqoslash ham qiziq: bir tomondan, mikroarxitekturani yaxshilash uchun ikkita qadam bor, boshqa tomondan, kesh xotirasi cheklangan. Apriori, biz birinchisi ko'p hollarda og'irroq bo'ladi deb taxmin qilishimiz mumkin, ammo qancha va umuman olganda - "birinchi" va "uchinchi" i5-larni qanday solishtirish mumkin (UnCore chastotasi uchun sozlangan, albatta, agar ko'p odamlar bo'lsa ham. mutlaqo to'g'ri taqqoslashni ko'rishni xohlaydiganlar, biz keyinroq qilamiz) allaqachon tadqiqot uchun yaxshi mavzu.

Sinov

An'anaga ko'ra, biz barcha testlarni bir necha guruhlarga ajratamiz va diagrammalar bo'yicha testlar/ilovalar guruhi uchun o'rtacha natijani ko'rsatamiz (sinov metodologiyasi haqida batafsil ma'lumot uchun alohida maqolaga qarang). Diagrammalardagi natijalar ballar bilan berilgan, 100 ball uchun 2011 yil namunasi sayti ma'lumotnoma test tizimining ko'rsatkichlari olinadi. U AMD Athlon II X4 620 protsessoriga asoslangan, ammo xotira miqdori (8 GB) va video karta () "asosiy chiziq" ning barcha sinovlari uchun standart bo'lib, faqat maxsus tadqiqotlar doirasida o'zgartirilishi mumkin. Batafsil ma'lumotga qiziqqanlar yana an'anaviy ravishda Microsoft Excel formatidagi jadvalni yuklab olish uchun taklif qilinadi, unda barcha natijalar konvertatsiya qilingan nuqtalarda ham, "tabiiy" shaklda ham ko'rsatiladi.

3D paketlarda interaktiv ish

Kesh xotira hajmining ba'zi ta'siri bor, lekin u 1% dan kam. Shunga ko'ra, ikkala Ivy Bridges ham bir-biriga o'xshash deb hisoblanishi mumkin, ammo arxitektura yaxshilanishlari yangi Core i5-ga eski Core i7-ni yangi Core i7-ga o'xshab osonlik bilan ortda qoldirish imkonini beradi.

3D sahnalarni yakuniy ko'rsatish

Bu holda, albatta, hech qanday yaxshilanishlar qayta ishlangan iplar sonining ko'payishini qoplay olmaydi, lekin bugungi kunda biz uchun eng muhimi bu emas, balki kesh xotirasi hajmining ishlashga ta'sirining to'liq yo'qligi. Bu erda Celeron va Pentium, biz allaqachon o'rnatganimizdek, turli xil protsessorlardir, shuning uchun renderlash dasturlari L3 hajmiga sezgir, lekin faqat ikkinchisi etarli bo'lmaganda. Ko'rib turganimizdek, to'rt yadro uchun 6 MB etarli.

Qadoqlash va ochish

Tabiiyki, bu vazifalar kesh hajmiga sezgir, ammo bu erda uni 6 dan 8 MiBgacha oshirish samarasi juda kam: taxminan 3,6%. Qizig'i shundaki, birinchi avlod bilan taqqoslash - arxitektura yaxshilanishlari yangi i5-ga hatto eski i7-ni ham teng chastotalarda "parchalash" imkonini beradi, ammo bu umumiy reytingda: to'rtta sinovdan ikkitasi bo'lganligi sababli. bitta ipli, biri ikki ipli. 7-Zip orqali ma'lumotlarni siqish tabiiy ravishda Nehalem HT-da eng tezdir: sakkizta oqim har doim taqqoslanadigan to'rtta oqimdan tezroq. Ammo agar biz o'zimizni faqat to'rtta bilan cheklasak, bizning "Ivy Bridge 6M" nafaqat o'zining avlodiga, balki eski Nehalemga ham yutqazadi: mikroarxitekturaning yaxshilanishi kesh xotirasi hajmining pasayishiga to'liq ta'sir qiladi.

Audio kodlash

Ikki Ayvi ko'prigi o'rtasidagi farqning kattaligi emas, balki uning umuman mavjudligi kutilmaganda edi. Haqiqat shunchalik arzonki, uni yaxlitlash yoki o'lchash xatolarining xususiyatlariga ham bog'lash mumkin.

Jamlama

Mavzular muhim, lekin kesh hajmi ham muhimdir. Biroq, odatdagidek, juda ko'p emas - taxminan 1,5%. Hyper-Threading o'chirilgan birinchi avlod Core bilan taqqoslash qiziqroq: yangi Core i5 hatto teng chastotada ham g'alaba qozonadi, lekin uchta kompilyatordan biri (aniqrog'i Microsoft tomonidan) ikkala protsessorda bir vaqtning o'zida ishlagan. Hatto kattasi uchun 5 soniyalik afzallik bilan - bu dasturda "to'liq kesh" Ivy Bridge Nehalemga qaraganda 4 soniyada yaxshiroq natija berishiga qaramay. Umuman olganda, bu erda L3 quvvatining pasayishi ikkinchi va uchinchi avlod Core i5-ga qandaydir tarzda katta ta'sir ko'rsatdi deb hisoblash mumkin emas, ammo nuanslar mavjud.

Matematik va muhandislik hisoblari

Shunga qaramay, "eski" kristall bilan 1% dan kam farq va yana barcha ko'rinishlarda birinchi avlod ustidan ishonchli g'alaba. Qaysi bir qoidadan ko'ra ko'proq qoida bu kabi past tishli testlar uchun istisno, lekin nima uchun yana bir bor ishonch hosil qilmaslik kerak? Ayniqsa, bunday nozik shaklda, (oddiy rejimdagi sinovlardan farqli o'laroq) chastotalardagi farq ("standart" yoki Turbo Boost tufayli paydo bo'ladigan) xalaqit bermasa.

Rastr grafikasi

Ammo ko'p oqimdan to'liqroq foydalanish bilan ham, rasm har doim ham o'zgarmaydi. Va kesh xotirasining sig'imi umuman hech narsa bermaydi.

Vektor grafika

Va bu erda ham xuddi shunday. To'g'ri, faqat bir nechta hisoblash iplari kerak.

Video kodlash

Ushbu guruhdan farqli o'laroq, hatto Hyper-Threading ham Nehalemga yangi avlod izdoshlari bilan teng sharoitlarda kurashishga imkon bermaydi. Ammo kesh xotirasi hajmining pasayishi ularga juda to'sqinlik qilmaydi. Aniqrog'i, bu deyarli hech qanday aralashmaydi, chunki farq yana 1% dan kam.

Ofis dasturiy ta'minot

Kutilganidek, kesh hajmini oshirish (aniqrog'i, uni kamaytirishdan uning tushishi) dan unumdorlikka erishilmaydi. Agar siz batafsil natijalarni ko'rib chiqsangiz ham, ushbu guruhdagi yagona ko'p tarmoqli test (masalan, FineReader-da matnni aniqlash) 8 MiB L3 da 6 MiB ga qaraganda taxminan 1,5% tezroq ekanligini ko'rishingiz mumkin. Ko'rinishidan - 1,5% nima? Amalda aytganda, hech narsa. Ammo tadqiqot nuqtai nazaridan, bu allaqachon qiziq: ko'rib turganingizdek, bu ko'pincha kesh xotirasiga ega bo'lmagan ko'p bosqichli testlar. Natijada, farq (kichik bo'lsa ham) ba'zida bo'lmasligi kerak bo'lgan joyda ham bo'ladi. Bunda unchalik tushunarsiz narsa bo'lmasa-da - qo'pol qilib aytganda, past ipli testlarda biz har bir ip uchun 3-6 MiBga egamiz, lekin ko'p tarmoqli testlarda biz bir joyda 1,5 MiB olamiz. Birinchisi juda ko'p, lekin ikkinchisi etarli bo'lmasligi mumkin.

Java

Biroq, Java mashinasi bu baholashga rozi emas, lekin bu ham tushunarli: biz bir necha marta yozganimizdek, u umuman x86 protsessorlari uchun emas, balki telefonlar va kofe qaynatgichlar uchun juda yaxshi optimallashtirilgan. ko'p yadrolar, lekin bu erda kesh juda kam xotira. Va ba'zida yadrolar va kesh xotirasi kam - chip maydoni va quvvat sarfi jihatidan qimmat manbalar. Va agar yadro va megahertz bilan biror narsa qilish mumkin bo'lsa, unda kesh bilan hamma narsa qiyinroq: to'rt yadroli Tegra 3da, masalan, bu atigi 1 MiB. Aniqki, JVM ko'proq (baytekodli barcha tizimlar kabi) "xirg'ishi" mumkin, buni biz allaqachon Celeron va Pentiumni solishtirganda ko'rganmiz, lekin har bir ip uchun 1,5 Mb dan ortiq, agar u foydali bo'lsa, unda bu vazifalarda emas. , ular SPECjvm 2008 ga kiritilgan.

O'yinlar

Biz o'yinlarga katta umid bog'lagan edik, chunki ular ko'pincha kesh xotirasi hajmi bo'yicha hatto arxivchilardan ham talabchanroq bo'lib chiqadi. Ammo bu juda kichik bo'lganda sodir bo'ladi va 6 MiB - biz ko'rib turganimizdek, etarli. Va yana, har qanday avlodning to'rt yadroli Core darajasidagi protsessorlari, hatto 2,4 gigagertsli chastotada ham, ishlatiladigan o'yin ilovalari uchun juda kuchli echimdir, shuning uchun ular shubhasiz, muammo emas, balki tizimning boshqa komponentlari bo'ladi. Shuning uchun biz past grafik sifati bo'lgan rejimlardan changni silkitishga qaror qildik - bunday tizimlar uchun bu juda sintetik ekanligi aniq, ammo bizning barcha sinovlarimiz sintetik :)

Har xil turdagi video kartalar va boshqalar xalaqit bermasa, ikkita Ivy Bridges o'rtasidagi farq allaqachon "aqldan ozgan" 3% ga etadi: bu holda siz amalda buni e'tiborsiz qoldirishingiz mumkin, ammo nazariya uchun bu juda ko'p. Ko'proq faqat arxivchilarda chiqdi.

Ko'p vazifali muhit

Biror joyda biz buni allaqachon ko'rganmiz. Xo'sh, ha - biz LGA2011 ostida olti yadroli protsessorlarni sinab ko'rganimizda. Va endi vaziyat o'zini takrorlaydi: yuk ko'p tarmoqli, ishlatiladigan dasturlarning ba'zilari kesh xotirasiga "ochko'z", lekin uning ortishi faqat o'rtacha ishlashni pasaytiradi. Buni qanday tushuntirish mumkin? Agar arbitraj yanada murakkablashmasa va o'tkazib yuborilganlar soni ko'paymasa. Bundan tashqari, biz shuni ta'kidlaymizki, bu L3 quvvati nisbatan katta bo'lganda va kamida to'rtta bir vaqtning o'zida ishlaydigan hisoblash iplari mavjud bo'lganda sodir bo'ladi - byudjet segmentida butunlay boshqacha rasm. Har holda, bizning Pentium va Celeron testlarimiz shuni ko'rsatdiki, ikki yadroli protsessorlar uchun L3 ni 2 dan 3 MiBgacha oshirish unumdorlikka 6% qo'shadi. Ammo to'rt va olti yadroli, yumshoq qilib aytganda, hech narsa bermaydi. Hatto hech narsadan kamroq.

Jami

Mantiqiy umumiy natija: har xil L3 o'lchamli protsessorlar o'rtasida hech qanday sezilarli farq topilmaganligi sababli, "umumiy va butun" da hech qanday farq yo'q. Shunday qilib, ikkinchi va uchinchi avlod Core i5-da kesh-xotira hajmining pasayishidan xafa bo'lish uchun hech qanday sabab yo'q - birinchi avlodning o'tmishdoshlari baribir ularga raqobatchi emas. Ha, va eski Core i7, o'rtacha hisobda, faqat shunga o'xshash ishlash darajasini namoyish etadi (albatta, asosan, past tishli ilovalardagi kechikish tufayli - va ular teng sharoitlarda tezroq ishlay oladigan stsenariylar mavjud). Ammo, yuqorida aytib o'tganimizdek, amalda haqiqiy protsessorlar chastotalar bo'yicha teng emas, shuning uchun avlodlar o'rtasidagi amaliy farq bunday tadqiqotlarda olish mumkin bo'lganidan kattaroqdir.

Faqat bitta savol ochiq qolmoqda: biz birinchi avlod Core bilan tenglikni ta'minlash uchun soat tezligini sezilarli darajada kamaytirishimiz kerak edi, ammo kuzatilgan naqshlar haqiqatga yaqinroq sharoitlarda saqlanib qoladimi? Axir, to'rtta past tezlikli hisoblash iplari 6 va 8 MiB kesh xotirasi o'rtasidagi farqni ko'rmasligi to'rtta yuqori tezlikda aniqlanmaydi degani emas. To'g'ri, buning aksi kuzatilmaydi, shuning uchun nazariy tadqiqotlar mavzusini oxirigacha yopish uchun bizga yana bitta laboratoriya ishi kerak, biz keyingi safar buni qilamiz.

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 L3 keshi 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 keshi bo'lmagan Phenom II X4 modeli bo'lgan Athlon II X4 protsessorini e'lon qildi va bu kerak emasligiga ishora qildi. Kesh ishlashga qanday ta'sir qilishini ko'rish 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. Keshni saqlash printsipi juda oddiy. Kesh protsessor so'rovlarini uzoqroq va sekinroq xotiraga kamaytirish uchun ma'lumotlarni protsessorning qayta ishlash yadrolariga imkon qadar yaqin 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 arxitekturasining samaradorligi xitlar ulushi bilan o'lchanadi. Kesh tomonidan qondirilishi mumkin bo'lgan ma'lumotlarga bo'lgan so'rovlar 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 yuborilgan ma'lumot olish uchun ko'proq vaqt kerak bo'ladi. Natijada, hisoblash quvur liniyasida "pufakchalar" (to'xtash vaqti) va kechikishlar paydo bo'ladi. Xitlar esa maksimal ishlashni saqlab qolish imkonini beradi.

Kesh yozish, eksklyuzivlik, izchillik

O'zgartirish siyosati kesh maydoni yangi yozuvlar uchun qanday qilib taqdim etilishini belgilaydi. Keshga yozilgan ma'lumotlar oxir-oqibat asosiy xotirada paydo bo'lishi kerakligi sababli, tizimlar buni keshga yozish (yozish) bilan bir vaqtda amalga oshirishi yoki hudud ma'lumotlarini "iflos" (qayta yozish) deb belgilashi mumkin va u keshdan chiqarilganda xotiraga yozing.

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 keshning pastki darajalari keshning yuqori 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 yadrolar, kesh darajalari va hatto protsessorlar bo'ylab ma'lumotlarni izchil va yangilab turadi.

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 tranzistorlarning "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 operativ xotiradan ma'lumotlarning nusxasi uchun keshda faqat bitta pozitsiya mavjud yoki ular n-tarmoqli assotsiativ bo'lishi mumkin, ya'ni keshda n ta mumkin bo'lgan joy mavjud. bu ma'lumotlar qaerda saqlanishi mumkin. Yuqori assotsiativlik (to'liq assotsiativ keshlargacha) eng yaxshi keshlash moslashuvchanligini 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 oshiradi, chunki bu barcha assotsiatsiyalarni zarba uchun sinab ko'rish uchun ko'proq vaqt kerak bo'ladi. Qoida tariqasida, eng yuqori darajadagi assotsiatsiya keshlashning oxirgi darajasi uchun mos keladi, chunki u erda maksimal sig'im mavjud va bu keshdan tashqarida ma'lumotlarni qidirish protsessorning sekin RAMga kirishiga olib keladi.

Bir nechta misollar keltirish uchun, Core i5 va i7 maʼlumotlar uchun 8 tomonlama assotsiativlikka ega 32KB L1 keshdan va koʻrsatmalar uchun 4 tomonlama assotsiativlikka ega 32KB L1 keshdan foydalanadi. Intel ko'rsatmalar tezroq mavjud bo'lishini xohlashi tushunarli va ma'lumotlar uchun L1 keshi maksimal hit foiziga ega. Intelning L2 keshi 8 tomonlama assotsiativlikka ega, Intelning L3 keshi esa undan ham aqlli, chunki u xitlar sonini oshirish uchun 16 tomonlama assotsiativlikni amalga oshiradi.

Biroq, AMD kechikishni kamaytirish uchun ikki tomonlama assotsiativlik bilan L1 keshdan foydalanadigan Phenom II X4 protsessorlari bilan boshqa strategiyani amalga oshirmoqda. 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 bir yoki boshqa kesh arxitekturasini tanlash to'g'risidagi qarorni butun protsessor arxitekturasini hisobga olmagan holda baholab bo'lmaydi. Sinov natijalari amaliy ahamiyatga ega bo'lishi tabiiy va bizning maqsadimiz ushbu kompleks ko'p darajali keshlash tuzilmasining amaliy sinovi edi.

Deyarli barcha ishlab chiquvchilar protsessor keshi shunday kichik, ammo tez xotira ekanligini bilishadi, u xotiraning yaqinda tashrif buyurilgan joylaridan ma'lumotlarni saqlaydi - ta'rif qisqa va juda aniq. Shunga qaramay, kodning ishlashiga ta'sir qiluvchi omillarni tushunish uchun keshning mexanizmlari haqidagi "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# da bo'ladi, til va platformani tanlash ishlashni baholash va yakuniy xulosalarga unchalik ta'sir qilmaydi. Tabiiyki, oqilona chegaralar ichida, agar siz massivdagi qiymatni o'qish xesh-jadvalga kirishga teng bo'lgan tilni tanlasangiz, sharhlash uchun mos keladigan natijalarni olmaysiz. Tarjimonning eslatmalari kursiv bilan yozilgan.

Habrakut - - -

1-misol: xotiraga kirish va ishlash

Sizningcha, ikkinchi halqa birinchisiga qaraganda qanchalik tez?
int arr = new 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 barcha massiv qiymatlarini 3 ga ko'paytiradi, ikkinchi tsikl faqat har o'n oltinchi qiymatni ko'paytiradi. Ikkinchi tsikl faqat ishlaydi 6% ishlaydi birinchi tsikl, ammo zamonaviy mashinalarda ikkala tsikl ham taxminan bir xil vaqtni oladi: 80ms Va 78 ms mos ravishda (mening mashinamda).

Javob 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 qazaylik - faqat 1 va 16 emas, balki boshqa qadam qiymatlarini ham sinab ko'raylik:
uchun (int i = 0; i< arr.Length; i += K /* шаг */ ) arr[i] *= 3;

K qadamining turli qiymatlari uchun ushbu tsiklning ishlash vaqti:

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 ikki baravar 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 baytlar orqali emas, balki kesh satrlari deb ataladigan kichik bloklar orqali kirishadi. Odatda, satr hajmi 64 baytni tashkil qiladi. Xotiradan biron bir qiymatni o'qiganingizda, keshga kamida bitta kesh qatori kiradi. Ushbu satrdan istalgan qiymatga keyingi kirish juda tez.

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

Buni tushunish ba'zi optimallashtirish usullari uchun juda muhimdir. Unga kirishlar soni ma'lumotlarning xotiradagi joylashuviga bog'liq. Misol uchun, noto'g'ri moslashtirilgan ma'lumotlar bitta o'rniga ikkita RAMga kirishni talab qilishi mumkin. Yuqorida bilib olganimizdek, ish tezligi ikki baravar past bo'ladi.

3-misol: Birinchi va Ikkinchi darajali keshlar (L1 va L2) o'lchamlari

Zamonaviy protsessorlar odatda L1, L2 va L3 deb ataladigan ikki yoki uch darajadagi keshlarga ega. Turli darajadagi keshlar hajmini bilish uchun CoreInfo yordam dasturi yoki GetLogicalProcessorInfo Windows API funksiyasidan foydalanishingiz mumkin. Ikkala usul ham har bir daraja uchun kesh qatori hajmi haqida ma'lumot beradi.

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

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, massivni har 16-qiymatni oshirib takrorlaymiz - bu keshning har bir satridagi ma'lumotlarni o'zgartirishning oson usuli. Biz oxiriga yetganimizda, biz boshiga qaytamiz. Keling, massivning turli o'lchamlarini tekshirib ko'raylik, massiv endi turli darajadagi keshlarga mos kelmasa, ishlashning 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 ishlashning pasayishi sezilarli - bu L1 va L2 keshlarining o'lchamlari.

4-misol: Ko‘rsatma parallelligi

Endi boshqa narsani ko'rib chiqaylik. Sizningcha, ikkita halqadan qaysi biri tezroq ishlaydi?
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. Birinchisining buyruqlari 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, shuningdek ikkita oddiy arifmetik ko'rsatmalarni bir vaqtning o'zida bajarish mumkin. Birinchi tsiklda protsessor bu xususiyatlardan foydalana olmaydi, lekin ikkinchisida u mumkin.

5-misol: Kesh assotsiativligi

Keshni loyihalashda javob berilishi kerak bo'lgan asosiy savollardan biri ma'lum bir xotira maydonidagi 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 liniyasining ma'lumotlari faqat bitta oldindan belgilangan kesh katagida saqlanadi. Xaritani hisoblashning eng oddiy usuli: row_in_index % soni_of_cache_cells. Bitta katakka o'rnatilgan ikkita qatorni bir vaqtning o'zida keshlash mumkin emas.
  2. N-kirish qisman assotsiativ kesh, har bir satr N xil kesh joylarida saqlanishi mumkin. Masalan, 16 tomonlama keshda qator guruhni tashkil etuvchi 16 ta katakdan birida saqlanishi mumkin. Odatda, indekslarning past bitlari teng bo'lgan satrlar bitta guruhga bo'linadi.
  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 nizolarga moyil bo'ladi, masalan, ikkita qator bir hujayra uchun raqobatlashsa, navbat bilan keshdan bir-birini itarib yuborsa, samaradorlik juda past bo'ladi. Boshqa tomondan, to'liq assotsiativ keshlar, garchi bu kamchiliksiz bo'lsa ham, amalga oshirish juda murakkab va qimmat. Qisman assotsiativ keshlar amalga oshirishning murakkabligi va samaradorligi o'rtasidagi odatiy kelishuvdir.

Masalan, mening kompyuterimda 4MB L2 keshi 16 tomonlama yarim assotsiativ keshdir. Barcha operativ xotira indekslarining eng kam ahamiyatli bitlari bo'yicha chiziqlar to'plamiga bo'linadi, 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 bo'linadigan qatorlar 16 hujayradan iborat bir xil guruhni bo'lishadi va undagi o'rin uchun kurashadilar.

Assotsiativlik ta'siri ishlashi uchun biz doimiy ravishda bir 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 – kichik):

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 tomonlama keshi barcha kerakli ma'lumotlarni saqlay olmaydi.

    Ba'zi yomon qadam qiymatlari ikkita kuchdir: 256 va 512. Masalan, qadam 512 va 8 MB massivni ko'rib chiqing. Ushbu bosqichda 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 uchastka mavjud va har bir guruh uchun keshda faqat 16 ta hujayra mavjud, shuning uchun hamma uchun joy etarli emas.

    2 kuchiga ega bo'lmagan boshqa qadam qiymatlari shunchaki omadsiz bo'lib, bir xil kesh guruhlariga ko'p kirishga olib keladi va rasmda vertikal ko'k chiziqlar paydo bo'lishiga olib keladi. Shu nuqtada, raqamlar nazariyasini sevuvchilar o'ylashga taklif qilinadi.

  2. Nima uchun vertikal chiziqlar 4MB chegarada uziladi? Massiv hajmi 4 Mb yoki undan kam bo'lsa, 16 tomonlama kesh to'liq assotsiativ kesh bilan bir xil ishlaydi, ya'ni u massivdagi barcha ma'lumotlarni ziddiyatlarsiz sig'dira 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 keshning assotsiativlik darajasi ikkinchi darajali rol o'ynaydi, cheklash L2 keshining hajmi bilan bog'liq.

    Masalan, massiv o'lchami 16 MB va qadam 128 bo'lsa, biz har 128 baytga kiramiz, shu bilan massiv keshining har bir boshqa satrini yangilaymiz. Keshdagi har bir boshqa satrni saqlash uchun 8 MB kerak bo'ladi, lekin mening kompyuterimda faqat 4 MB bor.

    Kesh to'liq assotsiativ bo'lsa ham, bu unda 8 MB ma'lumotni saqlashga ruxsat bermaydi. Esda tutingki, yuqoridagi misolda qadam 512 va massiv o'lchami 8 MB bo'lsa, bizga barcha kerakli ma'lumotlarni saqlash uchun atigi 1 MB kesh kerak, ammo kesh assotsiativligi etarli emasligi sababli bu mumkin emas.

  4. Nima uchun uchburchakning chap tomoni asta-sekin o'zining intensivligini oshirmoqda? Maksimal intensivlik 64 baytlik qadam qiymatiga to'g'ri keladi, bu kesh chizig'ining o'lchamiga teng. Birinchi va ikkinchi misollarda ko'rganimizdek, bir xil satrga ketma-ket kirish deyarli hech narsaga olib kelmaydi. 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.

Aniqlangan effektlar parametrlarning katta qiymatlarida ham saqlanib qoladi:

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

6-misol: noto'g'ri kesh almashish

Ko'p yadroli mashinalarda siz boshqa muammoga duch kelishingiz mumkin - kesh moslashuvi. Protsessor yadrolarida qisman yoki butunlay alohida keshlar mavjud. Mening mashinamda L1 keshlari alohida (odatdagidek) va har bir yadro juftligi tomonidan taqsimlangan ikkita L2 keshlari 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.

Yadrolardan biri keshidagi qiymatni o'zgartirganda, boshqa yadrolar endi eski qiymatdan foydalana olmaydi. Boshqa yadrolarning keshlaridagi qiymat yangilanishi kerak. Bundan tashqari, u 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 barcha to'rtta qiymat bir xil kesh qatorida tugashi mumkin. Har safar bitta yadro qiymatni oshirganda, u boshqa yadrolardagi ushbu qiymatni o'z ichiga olgan kesh joylarini yaroqsiz deb belgilaydi. Ushbu operatsiyadan keyin barcha boshqa yadrolar chiziqni yana keshlashi kerak bo'ladi. Bu keshlash mexanizmini ishlamay qoldiradi va unumdorlikni o'ldiradi.

7-misol: apparat murakkabligi

Hozir ham, kesh bilan ishlash tamoyillari siz uchun sir bo'lmasa ham, apparat sizni hayratda qoldiradi. Protsessorlar bir-biridan optimallashtirish usullari, evristika va amalga oshirishning boshqa nozik jihatlari 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 kompyuterimdagidek ishlamaydi - eng oddiy hollarda protsessor ish faoliyatini optimallashtirishi va salbiy ta'sirlarni kamaytirishi mumkin. Agar kod biroz o'zgartirilsa, hamma narsa joyiga tushadi.

Bu erda g'alati temir g'ayrioddiylarining 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 almashtirsangiz, quyidagi natijalarni olishingiz mumkin:

A, B, C, D maydonlarini oshirish A, C, E, G maydonlarini oshirishga qaraganda ko'proq vaqt oladi. A va C maydonlarini oshirish A, C maydonlariga qaraganda ko'proq vaqt talab etadi. Va E, G. Buning sabablari nima ekanligini aniq bilmayman, lekin ehtimol ular xotira banklari bilan bog'liq ( ha, ha, odatdagidek uch litrli xotira jamg'arma kassalari bilan va siz o'ylagandek emas). Agar sizda bu haqda biron bir fikringiz bo'lsa, iltimos, sharhlaringizni qoldiring.

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, muhokama qilingan hamma narsa protsessor keshlarining tuzilishini tushunishga yordam berdi. Endi siz kodingizni optimallashtirish uchun o'rganganlaringizni amalda qo'llashingiz mumkin.
Maqola yoqdimi? Do'stlaringizga ulashing: