Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
CPU жобалауда, сомамен адрестелген декодерді (SAD) немесе сомамен адрестелген жадты (SAM) декодерді қолдану CPU кэшіне кірудің және адрес есептеудің (базалық + смещение) кешігуін азайту тәсілі болып табылады. Бұл кэштің SRAM-ындағы адрес жасау операциясын және декодтау операциясын біріктіру арқылы жүзеге асырылады.
In CPU design, the use of a sum addressed decoder (SAD) or sum addressed memory (SAM) decoder is a method of reducing the latency of the CPU cache access and address calculation (base + offset). This is achieved by fusing the address generation sum operation with the decode operation in the cache 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 идеясы ассоциативтік кэштерге де бірдей қолданылады.
The L1 data cache should usually be in the most critical CPU resource, because few things improve instructions per cycle (IPC) as directly as a larger data cache, a larger data cache takes longer to access, and pipelining the data cache makes IPC worse. One way of reducing the latency of the L1 data cache access is by fusing the address generation sum operation with the decode operation in the cache SRAM. The address generation sum operation still must be performed, because other units in the memory pipe will use the resulting virtual address. That sum will be performed in parallel with the fused add/decode described here. The most profitable recurrence to accelerate is a load, followed by a use of that load in a chain of integer operations leading to another load. Assuming that load results are bypassed with the same priority as integer results, then it's possible to summarize this recurrence as a load followed by another load—as if the program was following a linked list. The rest of this page assumes an instruction set architecture (ISA) with a single addressing mode (register+offset), a virtually indexed data cache, and sign extending loads that may be variable width. Most RISC ISAs fit this description. In ISAs such as the Intel x86, three or four inputs are summed to generate the virtual address. Multiple input additions can be reduced to a two input addition with carry save adders, and the remaining problem is as described below. The critical recurrence, then, is an adder, a decoder, the SRAM word line, the SRAM bit line(s), the sense amp(s), the byte steering muxes, and the bypass muxes. For this example, a direct mapped 16 KB data cache which returns doubleword (8 byte) aligned values is assumed. Each line of the SRAM is 8 bytes, and there are 2048 lines, addressed by Addr[13:3]. The sum addressed SRAM idea applies equally well to set associative caches.
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) себеп болады.
The formulation above checks the entire result of an add. However, in a CPU cache decoder, the entire result of the add is a byte address, and the cache is usually indexed with a larger address, in our example, that of an 8 byte block. It is preferable to ignore a few of the LSBs of the address. However, the LSBs of the two summands can't be ignored because they may produce a carry out which would change the doubleword addressed. If R[13:3] and O[13:3] are added to get some index I[13:3], then the actual address Addr[13:3] is equal to either I[13:3], or I[13:3] + 1, depending on whether R[2:0]+O[2:0] generates a carry out. Both I and I+1 can be fetched if there are two banks of SRAM, one with even addresses and one with odd. The even bank holds addresses 000xxx, 010xxx, 100xxx, 110xxx, etc., and the odd bank holds addresses 001xxx, 011xxx, 101xxx, 111xxx, etc. The carry out from R[2:0]+O[2:0] can then be used to select the even or odd doubleword fetched later. Note that fetching from two half size banks of SRAM will dissipate more power than fetching from one full size bank, as it causes more switching in the sense amps and data steering logic.
Не сақталды?
Көбірек жеңілдетілген дерек кэшінің схемасы қосылғыштан кейін дәстүрлі декодерден тұрады. Біздің мысал кэш-қосалқы жүйеміз үшін, ең маңызды кезең – 14 биттік қосылғыш, ол тура және толықтыру мәндерін шығарады, содан кейін декодердің әр қатары үшін 11 биттік ЖӘНЕ (AND) қақпасы орналасады. Толық адрестік жобада декодердегі соңғы ЖӘНЕ қақпасы сақталады, бірақ ені 11-дің орнына 10 битті құрайды. Қосылғыш әр битте төрт кірісті логикалық өрнекпен алмастырылды. Күту уақытының үнемделуі қосылғыш пен төрт кірісті өрнек арасындағы жылдамдық айырмашылығынан туындайды, шамамен үш қарапайым CMOS қақпасының үнемделуі. Егер оқырман көп циклды ең маңызды кезеңде үш қақпалық жақсарту үшін тым көп ой жұмсады деп ойласа, онда ол қазіргі заманғы процессорлардың қаншалықты оңтайландырылғанын жақсырақ түсінеді.
A simpler data cache path would have an adder followed by a traditional decoder. For our example cache subsystem, the critical path would be a 14 bit adder, producing true and complement values, followed by an 11 bit AND gate for each row of the decoder. In the sum addressed design, the final AND gate in the decoder remains, although 10 bits wide instead of 11. The adder has been replaced by a four input logical expression at each bit. The latency savings comes from the speed difference between the adder and that four input expression, a savings of perhaps three simple CMOS gates. If the reader feels that this was an inordinate amount of brain twisting work for a three gate improvement in a multi cycle critical path, then the reader has a better appreciation for the level to which modern CPUs are optimized.
Қосымша оңтайландырулар: алдын ала кодтау
Көптеген декодерлік жобалар декодтау желісіндегі жоғары сандық қақпалардан (fan-in) аулақ болу үшін алдын ала кодтау сатысын қолданады. Мысалы, 11 биттік декодер 4, 4 және 3 биттен тұратын үш топқа алдын ала кодталуы мүмкін. Әр 3 биттік топ негізгі декодтау массивіне 8 сымды, ал әр 4 биттік топ 16 сымды жеткізеді. Осылайша декодерлік желі 3 кірісті ЖӘНЕ (AND) қақпасына айналады. Бұл қайта ұйымдастыру орындау аумағын және қуатты айтарлықтай үнемдеуге мүмкіндік береді. Осы реорганизацияны сомалық адресті декодерге де қолдануға болады. Жоғарыда көрсетілген алдын ала кодталмаған формула бойынша әр бит жергілікті екі биттік қосым ретінде қарастырылуы мүмкін. Алдын ала кодтау кезінде әрбір алдын ала кодтау тобы жергілікті үш, төрт, тіпті бес биттік қосым болып табылады, ал алдын ала кодтау топтары бір битпен жабысады. Алдын ала кодтау декодер арқылы өтетін сымдардың санын көбейтуі мүмкін, ал сомалық адресті декодерлер қарапайым декодерлерге қарағанда әдетте екі есе көп сымдарға ие болады. Бұл сымдар алдын ала кодтаудың мүмкіндігін шектейтін фактор болуы мүмкін.
Many decoder designs avoid high fan in AND gates in the decode line itself by employing a predecode stage. For instance, an 11 bit decoder might be predecoded into three groups of 4, 4, and 3 bits each. Each 3 bit group would drive 8 wires up the main decode array, each 4 bit group would drive 16 wires. The decoder line then becomes a 3 input AND gate. This reorganization can save significant implementation area and some power. This same reorganization can be applied to the sum addressed decoder. Each bit in the non predecoded formulation above can be viewed as a local two bit add. With predecoding, each predecode group is a local three, four, or even five bit add, with the predecode groups overlapping by one bit. Predecoding generally increases the number of wires traversing the decoder, and sum addressed decoders generally have about twice as many wires as the equivalent simple decoder. These wires can be the limiting factor on the amount of feasible predecoding.