Bosh sahifa Wiki Store Queue

Store Queue

Store Queue — bajarilayotgan Store Instruction’larning manzili, qiymati, kengligi va tartib ma’lumotini xotiraga yakuniy chiqarilishidan oldin saqlaydigan apparat tuzilmasi. U out-of-order bajarishni aniq istisno va me’moriy tartib bilan uyg‘unlashtiradi, shuningdek keyingi load’ga hali keshga yozilmagan yangi qiymatni uzatadi.

Yozuvning ikki qismi

Store manzili Address Generation Unit’da, yoziladigan ma’lumot esa boshqa dependency zanjirida tayyor bo‘lishi mumkin. Queue bitta dinamik store uchun bu qismlarni alohida valid bitlar bilan saqlaydi. Ikkalasi tayyor bo‘lmaguncha xotira bilan to‘liq to‘qnashuv tekshiruvi yoki chiqarish amalga oshirilmaydi.

Byte-enable mask qaysi baytlar yozilishini ko‘rsatadi. Kichik yoki tekislanmagan store keyingi load bilan qisman ustma-ust tushishi mumkin. Forwarding mantiqi kerakli baytlarni eng yangi tegishli store yozuvlaridan yig‘adi; bu oddiy bir xil manzilli to‘liq so‘z uzatishdan murakkabroq.

Commit va chiqarish

Spekulyativ store keshni boshqa yadro ko‘radigan tarzda o‘zgartirmasligi kerak. Buyruq reorder buffer boshiga kelib commit qilingach, queue yozuvi me’moriy jihatdan ruxsat etiladi. Shundan keyin u cache coherence ruxsati va port mavjudligiga qarab chiqariladi. Commit bilan fizik kesh yozuvi orasida vaqt bo‘lishi mumkin.

Branch xatosi yoki oldingi exception’da yosh store yozuvlari o‘chiriladi. Avval commit qilingan yozuvlar esa davom etib, dastur tartibidagi ta’sirini tugatadi. Queue bosh va oxir ko‘rsatkichlari wrap-around qilganda avlod yoki to‘liqlik holati noto‘g‘ri yozuvni ozod qilmasligi kerak.

Load bilan bog‘liqlik

Yosh load o‘zidan oldingi barcha store manzilini tekshiradi. Eng yangi teng manzilli yozuvning ma’lumoti tayyor bo‘lsa, store-to-load forwarding ishlaydi. Manzil noma’lum yoki qiymat tayyor bo‘lmasa, load kutishi mumkin. Protsessor mustaqil deb taxmin qilsa va keyin conflict topilsa, load hamda undan qaram amallar replay qilinadi.

Store queue qidiruvi katta bo‘lsa ko‘p assotsiativ taqqoslash talab qiladi. Banklash, manzil xeshi va dependence predictor energiyani kamaytiradi, lekin aliasni o‘tkazib yubormasligi shart.

Sig‘im va unumdorlik

Queue to‘lsa yangi store dispatch qilinmaydi. Kesh satriga egalik olish, fence, sekin I/O hududi yoki ko‘p cache miss yozuvlarni uzoq ushlab turishi mumkin. Streaming store katta navbat va write-combining buffer’dan foyda oladi; tasodifiy raqobatli yozuv esa coherence bilan cheklanadi.

Store Queue va Write Buffer atamalari ba’zan aralashadi. Store queue odatda spekulyativ, tartib va forwarding ma’lumotini saqlaydi; write buffer ko‘proq commit qilingan yozuvlarni quyi xotira darajasiga yuborishni ajratadi. Ayrim dizaynda ikkalasi bitta fizik tuzilmaning bosqichlari bo‘lishi mumkin.

Atomik va fence amallari

Atomic read-modify-write load va store xususiyatlarini bitta tartibli operatsiyada birlashtiradi. Queue yozuvi coherence egaligi olinguncha boshqa raqib atomik bilan seriallashadi. Fence esa oldingi yozuvlar kerakli kuzatuv nuqtasiga yetmaguncha keyingi xotira amalini ushlab turishi mumkin.

Store Queue’dagi yosh oddiy yozuv imtiyozli yoki I/O store’dan oldinga chiqmasligi kerak. Memory type, privilege va ordering bitlari har entry bilan yuradi. TLB fault aniqlansa xatoli store commit qilinmaydi; undan keyingi queue yozuvlari spekulyativ natija qoldirmasdan bekor qilinadi. Shu tartib aniq exception bilan yuqori throughputni birga ta’minlaydi.

Bog‘liq tushunchalar

store instruction, store buffer, load queue, memory ordering, store-to-load forwarding, reorder buffer