Кіріспе

CPU жобалауда, сомамен адрестелген декодерді (SAD) немесе сомамен адрестелген жадты (SAM) декодерді қолдану CPU кэшіне кірудің және адрес есептеудің (базалық + смещение) кешігуін азайту тәсілі болып табылады. Бұл кэштің SRAM-ындағы адрес жасау операциясын және декодтау операциясын біріктіру арқылы жүзеге асырылады.

Шолу

L1 деректер кэші әдетте ең маңызды CPU ресурсында болуы керек, өйткені үлкен деректер кэші сияқты цикл бойынша нұсқауларды (IPC) тікелей жақсартуға мүмкіндік беретін заттар аз. Үлкен деректер кэшіне кіру үшін көбірек уақыт қажет, ал деректер кэшін құбырландыру IPC-ді нашарлатады. L1 деректер кэшін пайдаланудың кідіріс уақытын азайтудың бір жолы – адрес генерациялау қосындысы операциясын кэш SRAM-дегі декодтау операциясымен біріктіру. Адресті құру қосындысы әлі де орындалуы керек, өйткені жад құбырындағы басқа бірліктер алынған виртуалды адресті пайдаланады. Бұл қосынды осы жерде сипатталған біріктірілген қосу/декодтаумен қатар орындалады. Жеделдетудің ең тиімді қайталануы – жүктеме, содан кейін осы жүктеменің нәтижесін пайдаланатын бүтін сандық операциялардың тізбегі, одан кейін тағы бір жүктеме. Егер жүктеме нәтижелері бүтін сандық нәтижелермен бірдей басымдықпен айналып өтетін болса, онда бұл қайталануды бағдарлама сілтемелі тізімді орындағандай, жүктеменің артынан жүктеме деп қорытындылауға болады. Осы беттің қалған бөлігі бір адрестеу режимі (тіркеуіш+ұйым), виртуалды индекстелген деректер кэші және өзгермелі ені болуы мүмкін жүктемелерді кеңейтетін белгілерді қамтитын нұсқаулар жиынтығы архитектурасын (ISA) қабылдайды. Көптеген RISC ISA-лары осы сипаттамаға сәйкес келеді. Intel x86 сияқты ISA-да виртуалды мекен-жайды құру үшін үш немесе төрт кіріс қосылады. Көптеген кіріс қосуларын екі кіріс қосуға дейін азайтуға болады, ал қалған мәселе төменде сипатталғандай. Сондықтан, маңызды қайталану – қосушы, декодер, SRAM сөз сызығы, SRAM бит сызығы(лары), сезімдік күшейткіш(тер), байт бағыттау мультиплексорлары және айналма мультиплексорлары. Бұл мысал үшін doubleword (8 байт) сәйкестендірілген мәндерді қайтаратын 16 КБ тікелей сәйкестендірілген деректер кэшін қарастырайық. SRAM-нің әрбір жолы 8 байт, ал Addr[13:3] арқылы адрестелетін 2048 жол бар. Адрестелген SRAM идеясы ассоциативтік кэштерге де бірдей қолданылады.

LSB-ге мән берілмейді: кеш таңдап алу

Жоғарыда келтірілген формула қосудың толық нәтижесін тексереді. Дегенмен, CPU кэш декодерінде қосудың толық нәтижесі байт адресі болып табылады, ал кэш әдетте үлкен адресімен индекстеледі, мысалы, біздің жағдайымызда 8 байттық блок. Адрестің ең кіші тақ биттерінің (LSB) бірнешеуін елемегені жөн. Алайда, екі қосылғыштың ең кіші тақ биттерін елемеуге болмайды, себебі олар қосылған сөздің адресін өзгертетін артық мәнді тудыруы мүмкін. Егер R[13:3] және O[13:3] қосылса, нәтижесінде I[13:3] индексі алынса, онда нақты адресі Addr[13:3] I[13:3] немесе I[13:3] + 1-ге тең болады, бұл R[2:0]+O[2:0] қосудан артық мән тудыра ма, тудырмай ма дегенге байланысты. Егер SRAM-нің екі банкі болса, бірі жұп, бірі тақ адрестер үшін, I және I+1 екеуін де алуға болады. Жұп банк 000xxx, 010xxx, 100xxx, 110xxx сияқты адрестерді, ал тақ банк 001xxx, 011xxx, 101xxx, 111xxx сияқты адрестерді сақтайды. R[2:0]+O[2:0] қосудан алынған артық мәнді кейін алынатын жұп немесе тақ қосылған сөзді таңдау үшін пайдалануға болады. SRAM-нің екі жартылай өлшемді банктерінен мәліметтерді алу, бір толық өлшемді банктен алуға қарағанда көбірек қуатты жұмсайды, себебі бұл сезімдік күшейткіштерде (sense amps) және деректерді бағыттау логикасында көбірек ауысуға (switching) себеп болады.

Не сақталды?

Көбірек жеңілдетілген дерек кэшінің схемасы қосылғыштан кейін дәстүрлі декодерден тұрады. Біздің мысал кэш-қосалқы жүйеміз үшін, ең маңызды кезең – 14 биттік қосылғыш, ол тура және толықтыру мәндерін шығарады, содан кейін декодердің әр қатары үшін 11 биттік ЖӘНЕ (AND) қақпасы орналасады. Толық адрестік жобада декодердегі соңғы ЖӘНЕ қақпасы сақталады, бірақ ені 11-дің орнына 10 битті құрайды. Қосылғыш әр битте төрт кірісті логикалық өрнекпен алмастырылды. Күту уақытының үнемделуі қосылғыш пен төрт кірісті өрнек арасындағы жылдамдық айырмашылығынан туындайды, шамамен үш қарапайым CMOS қақпасының үнемделуі. Егер оқырман көп циклды ең маңызды кезеңде үш қақпалық жақсарту үшін тым көп ой жұмсады деп ойласа, онда ол қазіргі заманғы процессорлардың қаншалықты оңтайландырылғанын жақсырақ түсінеді.

Қосымша оңтайландырулар: алдын ала кодтау

Көптеген декодерлік жобалар декодтау желісіндегі жоғары сандық қақпалардан (fan-in) аулақ болу үшін алдын ала кодтау сатысын қолданады. Мысалы, 11 биттік декодер 4, 4 және 3 биттен тұратын үш топқа алдын ала кодталуы мүмкін. Әр 3 биттік топ негізгі декодтау массивіне 8 сымды, ал әр 4 биттік топ 16 сымды жеткізеді. Осылайша декодерлік желі 3 кірісті ЖӘНЕ (AND) қақпасына айналады. Бұл қайта ұйымдастыру орындау аумағын және қуатты айтарлықтай үнемдеуге мүмкіндік береді. Осы реорганизацияны сомалық адресті декодерге де қолдануға болады. Жоғарыда көрсетілген алдын ала кодталмаған формула бойынша әр бит жергілікті екі биттік қосым ретінде қарастырылуы мүмкін. Алдын ала кодтау кезінде әрбір алдын ала кодтау тобы жергілікті үш, төрт, тіпті бес биттік қосым болып табылады, ал алдын ала кодтау топтары бір битпен жабысады. Алдын ала кодтау декодер арқылы өтетін сымдардың санын көбейтуі мүмкін, ал сомалық адресті декодерлер қарапайым декодерлерге қарағанда әдетте екі есе көп сымдарға ие болады. Бұл сымдар алдын ала кодтаудың мүмкіндігін шектейтін фактор болуы мүмкін.