Rapport (1,5 HP) Lunds Universitet HT15

Relevanta dokument
Cache-koherens protokoll MESI och MOSI

Cache coherence hos multicoreprocessorer

MESI-Protokollet. Richard Elvhammar. Lund Universitet 4/12-16

MESI protokollet och dess derivater

MESI i Intel Core 2 Duo

Improved-MOESI Cache koherens Protokoll

MESI-protokollets funktion i multiprocessorer

En överblick på cachedesignen i Intels mikroarkitektur Nehalem

Emil Kristiansson Kurs: EDT621 Delmoment: Rapport. En introduktion till Smart cache

Schemaläggnings metoderna AMP & SMP i en Multiprocessor

Snapdragon 810: Cacheminnet

Cacheminne i en Intel Core 2 Duo-processor

Multi-ported cache En rapport om några lösningar till att få flera minnesaccesser simultant.

SYNKRONISERING I EN SHARED MEMORY MULTIPROCESSOR

Jämförelse av skrivtekniker till cacheminne

Hantering av hazards i pipelines

Cacheminne i en AMD Opteron Processor

Öka prestanda i Shared-Cache multi-core processorer

Cacheminne Intel Core i7

Hur det går att minska effektutvecklingen i en processor genom att ändra pipeline

Datorarkitekturer med Operativsystem

Hannes Larsson - IDA 2, LTH Campus Helsingborg. NEC V R 4300i. Interlock-handling EDT621

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

32 Bitar Blir 64 Sammanfattning

Minnet från processorns sida Datorteknik

HF0010. Introduktionskurs i datateknik 1,5 hp

Parallellism i NVIDIAs Fermi GPU

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Datorhistorik. Föreläsning 3 Datorns hårdvara EDSAC. Eniac. I think there is a world market for maybe five computers. Thomas Watson, IBM, 1943

Datorsystem. Tentamen

Föreläsningsanteckningar 5. Cacheminnen

Pipelining i Intel 80486

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

Arm Cortex-A8 Pipeline

En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn.

Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar

Mer datorarkitektur. En titt I datorn Minnen

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Dugga 1 status 41 godkända 39 ej godkända ERIK LARSSON

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

Datorhårdvaruteknik 1DV426 - Seminarie 1

Datorsystemteknik för E/D

Digitalteknik och Datorarkitektur 5hp

Komma över Memory wall med 3D stacked minne LTH Ingenjörshögskolan vid Campus Helsingborg Institutionen för datavetenskap

Schemaläggningsmetodik för multi-core inom Windows 7 OS Vad är scheduling och hur schemalägger Windows OS sina processer?

Tentamen den 9 januari 2018 Datorarkitekturer med operativsystem (EITF60)

Datorteknik ERIK LARSSON

Hantering av hazards i multi-pipelines

TSEA28 Datorteknik Y (och U)

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

TSEA28 Datorteknik Y (och U)

Bank Switching. Att nå multipla adressrymder. Av: Drazen Mijatovic

Datorarkitekturer med operativsystem ERIK LARSSON

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Hantering av begränsat antal skrivningar på Solid State diskar

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Tentamen den 17 mars 2016 Datorteknik, EIT070

Uppgift 1: a) u= a c + a bc+ ab d +b cd

Datorsystem. Exempeltentamen

CE_O8. Cacheminne. Hemlaboration 2.

Hyper Threading Intels implementation av SMT. Datorarkitekturer med operativsystem - EITF60. Felix Danielsson IDA2

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

What Is Hyper-Threading and How Does It Improve Performance

Lathund Blanketthotell Komma igång

Tentamen den 18 mars svar Datorteknik, EIT070

Hyper-Threading i Intelprocessorer

Skärmbilden i Netscape Navigator

Prestandapåverkan på databashanterare av flertrådiga processorer. Jesper Dahlgren

Att köpa ny dator SeniorNet Lidingö Februari-2019

Aktivitetsschemaläggning för flerkärninga processorer

Processor pipelining genom historien (Intel i9-intel i7)

Datorsystem. Tentamen

Digitala System: Datorteknik ERIK LARSSON

Grundläggande datavetenskap, 4p

Föreläsningsanteckningar 4. Pipelining

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

Program som ska exekveras ligger i primärminnet. Processorn hämtar instruk7on för instruk7on. Varje instruk7on, som är e= antal 1:or och 0:or, tolkas

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

IPv6 Jonas Aronsson 3TEa

Digitala System: Datorteknik ERIK LARSSON

SIMD i Intel s P5- baserade Pentium MMX

CE_O5. Cacheminne. Hemlaboration 2.

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Fö 2: Minnen. Introduktion. Primärminnet. Interna och externa minnen. Introduktion, Klassificiering

Filöverföring i Windowsmiljö

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Parallellism i CDC 7600, pipelinens ursprung

Vad är en dator? Introduktion till datorer och nätverk. Pontus Haglund Institutionen för datavetenskap (IDA) 21 augusti 2018

TSEA28 Datorteknik Y (och U)

Närliggande allokering Datorteknik

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Random Access Memory. Amare Reda Jenny Holmberg Henrik Kreipke Gaylord Kaya

IT-GUIDE Version 1.0 Författare: Juha Söderqvist

Nätverksteknik A - Introduktion till Routing

Transkript:

Rapport (1,5 HP) Lunds Universitet HT15 Cache-koherens protokoll i Intel Core i7 En rapport om cache-koherens och protokollet som används i Intel Core i7 processorer för att hålla minnet koherent Författare: Osama Menim

Sammanfattning Utvecklingen av multiprocessorer, eller snarare sagt multi-core processorer, där en processor består av ett flertal kärnor har frambringat ett stort problem. Ett problem som utvecklarna av processorer inte behöver handskas med vid utvecklingen av processorer som innehåller endast en kärna. Ett problem som drabbat de världskända Intel Core i7 processorerna, där samtliga processorer består av minst två kärnor. Detta stora problem kallas nämligen för cachekoherens problemet, där två eller flera olika kärnor kan se olika värden i sina privata cacheminnen för samma plats i primärminnet. Det amerikanska elektronikföretaget vid namnet Intel löste detta cachekoherens problem i deras Intel Core i7 processorer genom att skapa ett så kallat protokoll vid namnet MESIF. Ett protokoll som håller cacheminnet mellan varje kärna i en multi-core processor koherent och som därmed löser cache-koherens problemet. Protokollet MESIF använder sig av en teknik vid namnet snooping för att lösa detta problem. En teknik som fungerar på så sätt att samtliga kärnor i en multi-core processor ser och hör precis allting som sker i cacheminnet för samtliga kärnor med hjälp av en så kallad buss. Nyckelord: Cacheminne Cache-koherens Intel Core i7 MESIF

Innehållsförteckning 1 INLEDNING... 1 1.1 BAKGRUND... 1 1.2 SYFTE... 1 1.3 FRÅGESTÄLLNINGAR... 1 1.4 METOD OCH MATERIAL... 1 2 CACHE-KOHERENS I INTEL CORE I7... 2 3 CACHE-KOHERENS PROTOKOLLET MESIF... 3 4 DISKUSSION... 6 5 REFERENSER... 7

Inledning Bakgrund Tekniken går snabbt framåt. Från att från första början använda oss av en centralprocessor (CPU) i en dator har vi numera börjat använda oss av multiprocessorer, eller snarare sagt multi-core processorer som består av två eller flera kärnor som samarbetar. Då tekniken går framåt är det dock inte alltid att det medför en positiv utveckling av tekniken och skapar större möjligheter. Det kan även leda till något negativt och skapa nya problem, som i exempelvis denna utveckling av multi-core processorer. Denna utveckling ledde bland annat till att ett nytt problem skapades vid namnet cache-koherens problemet. Ett problem som kan lösas med diverse cache-koherens protokoll. Jag valde att skriva om cache-koherens problemet i Intel Core i7 processorer eftersom det är en väldigt modern processorfamilj, där samtliga processorer består av minst två kärnor och som idag finns ute på marknaden. Detta medförde till att jag blev oerhört intresserad av hur ett flertal kärnor samarbetar och hur cacheminnet mellan varje kärna i en multi-core processor hålls koherent. Syfte Syftet med denna rapport är att undersöka vad cache-koherens är och vad för protokoll Intel Core i7 processorer använder sig av för att hålla minnet koherent och lösa cache-koherens problemet. Jag vill även fördjupa mig i detta protokoll som Intel Core i7s processorer använder sig av vid namnet MESIF och ta reda på hur detta protokoll fungerar och hur den håller minnet koherent i en multi-core processor. Frågeställningar - Vad är cache-koherens? - Hur fungerar cache-koherens? - Vilket protokoll använder Intel Core i7s processorer för att hålla minnet koherent? - Hur fungerar detta protokoll? Metod och material För att besvara mina frågeställningar har jag främst använt mig av en engelsk bok, där boken är en av de rekommenderade kursböckerna och engelska videoklipp på webbplatsen Youtube, där två olika rätt så kunniga föreläsare från olika universitet besvarar en del av mina frågeställningar. Jag har även använt mig av två engelska hemsidor, där ena hemsidan är Wikipedia. Eftersom jag använt mig av bland annat Wikipedia för att besvara mina frågeställningar blir det svårt att vara källkritisk. Jag har i och med det försökt använda mig som mest av kursboken och videoklippen på Youtube, där dessa troligtvis är mer trovärdiga. Fördelen med användningen av både böcker och videoklipp från universitet är att det blir lättare att vara källkritisk. 1

Cache-koherens i Intel Core i7 Utvecklingen av multiprocessorer eller snarare sagt multi-core processorer har nämligen bidragit till skapandet av starkare och snabbare processorer, men även skapat nya stora problem. Problem som man inte hade vid användandet av processorer som innehåller endast en kärna. Det stora problemet med multi-core processorer kallas nämligen för cache-koherens problemet, där värdet på exempelvis en plats i primärminnet, som sparats i cacheminnet för två olika kärnor kan ha olika värden. Detta kommer givetvis att leda till problem då två olika kärnor ser två olika värden i sina cacheminnen för samma plats i primärminnet. Detta cache-koherens problem kan lösas genom att cacheminnet mellan varje kärna i en multi-core processor hålls koherent (1). Cacheminnet i varje kärna i en multi-core processor anses vara koherent om varje kärna ser samma värde i sina cacheminnen för samma plats i primärminnet och om en läsning (read) av data utfört av en kärna får det senaste värdet som skrivits (write) på det data lästes. Data som skickas mellan primärminnet och cacheminnet som vid exempelvis en läsning eller en skrivning skickas nämligen i så kallade cache lines, eller närmare sagt datablock. Ett datablock består av data och en adress för dataplatsen i primärminnet. Ett exempel på en situation där cache-koherens problemet kan uppstå i minnet är då två olika kärnor i en multicore processor läser data från en plats i primärminnet och där en av kärnorna därefter skriver ett nytt värde på det data som lästes av båda kärnorna (1). Låt oss ta ett litet exempel där en multi-core processor består av två olika kärnor, kärna A och kärna B. Kärna A gör från första början en läsning av data på plats x i primärminnet och placerar det i sitt cacheminne, där det data som lästes har värdet noll. Kärna B gör därefter också en läsning på plats x i primärminnet och placerar det i sitt cacheminne, där värdet också är noll. Kärna A får senare för sig att skriva ett nytt värde på det data som lästes av kärna A och kärna B och ersätter därmed värdet noll med exempelvis värdet ett. Det stora problemet kommer att ske då kärna B vill läsa värdet på det data som lästes från plats x i primärminnet och placerades i cacheminnet. Värdet i cacheminnet för kärna B är noll, medan värdet för plats x i cacheminnet tillhörande kärna A är ett. Kärna B kommer därmed få det gamla värdet som är noll istället för det nya värdet som är ett, vilket är fel värde och kommer leda till problem (1). Ett annat krav för att cacheminnet mellan varje kärna i en multi-core processor ska hållas koherent är att skrivningar som görs av två olika kärnor till samma plats måste vara serialiserade. Det vill säga att samtliga andra kärnor i multicore processorn måste kunna se skrivningarna i samma ordning. Låt oss ta ett exempel liknande det tidigare exemplet där en multi-processor består av två olika kärnor, kärna A och kärna B. Efter att kärna A och kärna B gjort en läsning av data på plats x i primärminnet och placerat det i sina cacheminnen får kärna A för sig att skriva till plats x och lagrar därmed värdet fem på plats x. Därefter skriver kärna B till plats x i primärminnet och lagrar värdet två. Samtliga kärnor i multi-core processorn kommer därmed aldrig kunna göra en läsning på plats x som värdet två före en läsning på plats x som värdet fem, eftersom kärna A skrev till plats x före kärna B (1). 2

Samtliga Intel Core i7 processorer består av minst två kärnor (2) och är därmed också drabbade av cache-koherens problemet. Cache-hierarkin i Intel Core i7 processorerna är uppbyggd på så sätt att L1-cacheminnet och L2-cacheminnet är privata för varje kärna och där L3-cacheminnet delas på samtliga kärnor i multicore processorn. Kärnornas privata cacheminnen (L1 & L2) är den stora orsaken till cache-koherens problemet, då kärnorna kan se olika värden i sina privata cacheminnen för samma plats i primärminnet (3). Men hur har utvecklarna av Intel löst detta cache-koherens problem i Intel Core i7 processorer? Utvecklarna av Intel har nämligen skapat ett så kallat protokoll vid namnet MESIF, som ska kunna lösa cache-koherens problemet som uppstår i Intel Core i7 processorer (4). Cache-koherens protokollet MESIF MESIF är ett protokoll som tidigare nämnt är utvecklat av det amerikanska elektronikföretaget vid namnet Intel. Detta protokoll utvecklades för att lösa cache-koherens problemet i Intel Core i7 processorer, som är väldigt lik ett annat äldre cache-koherens protokoll vid namnet MESI. För att lösa cache-koherens problemet använder sig protokollet MESIF av en teknik vid namnet snooping, där tekniken även kan kallas för bus sniffing (4). Snooping fungerar på så sätt att samtliga kärnor i en multi-core processor ser och hör precis allting som sker i cacheminnet för samtliga kärnor. Det vill säga att varje gång en kärna vill göra en läsning eller skrivning i primärminnet informeras precis alla kärnor. Låt oss ta ett exempel där exempelvis kärna A skriver ett nytt värde på det data som tidigare lästes av kärna A på plats x i primärminnet och ersätter därmed det tidigare värdet som exempelvis var fem med det nya värdet tio. Kärna A kommer då informera samtliga kärnor att den har skrivit ett nytt värde på det data som finns på plats x i primärminnet och ersatt värdet fem med det nya värdet tio. Samtliga kärnor som tidigare hade gjort en läsning av data på plats x i primärminnet och placerat det i sitt cacheminne, har nu som uppgift att uppdatera värdet i sina privata cacheminnen (5). För att det ska vara möjligt för samtliga kärnor i en multi-core processor att kunna se och höra precis allting som sker i cacheminnet använder sig snoopingtekniken av en så kallad buss. Samtliga kärnor sitter och lyssnar på allt som sker på bussen, vilket medför att kärnor som behöver uppdatera sina cacheminnen gör det och cacheminnet mellan varje kärna i multi-core processorn hålls därmed koherent (5). MESIF protokollet består nämligen av fem olika så kallade tillstånd, till skillnad från det tidigare nämnda MESI protokollet som består av endast fyra olika tillstånd. Data som finns lagrade i det privata cacheminnet och som därmed tidigare blivit lästa från primärminnet av en kärna kan därmed vara i dessa fem olika tillstånd (4). Det första tillståndet kallas för Modified (M), där data i datablocket som innehåller det data som blivit läst från primärminnet sägs nämligen ha blivit modifierat, där det har skrivits över av kärnan som tillhör detta cacheminne och där till och med primärminnet inte har rätt värde på dataplatsen. Data i datablocket som finns i cacheminnet kallas i och med det för 3

dirty. Detta datablock finns enbart i en kopia i cache-hierarkin och placerad i enbart ett cacheminne som tillhör en kärna (6). Det andra tillståndet kallas för Exclusive (E), där data i datablocket till skillnad från det första tillståndet kallas för clean. Detta tillstånd är väldigt likt det första tillståndet. Den enda skillnaden mellan dessa två tillstånd är att det data som finns i det enda cacheminnet har samma värde som det data som finns i primärminnet (6). Det tredje tillståndet kallas för Shared (S), där skillnaden mellan det andra tillståndet och detta tillstånd är att det i detta tillstånd finns två eller flera liknande datablock i cacheminnet, där samtliga datablock innehåller precis samma data och värde på data. Det vill säga att två eller flera olika kärnor har identiska datablock i sina privata cacheminnen (6). Det fjärde tillståndet kallas för Invalid (I), där det data som finns i datablocket i ett cache-minne anses vara icke-giltig och kan därmed inte användas av en kärna som behöver det data som finns i datablocket (6). Det femte och sista tillståndet kallas för Forward (F), där detta tillstånd är en speciell version av det tredje tillståndet (Shared). Låt oss säga att exempelvis kärna A får för sig att göra en läsning på plats x i primärminnet och andra kärnor redan gjort en läsning på plats x, där data i cacheminnet tillhörande kärna B är i tillståndet F medan data i cacheminnet tillhörande två andra kärnor (C & D) är i tillståndet S. Kärna A kommer därmed att få ett identiskt datablock skickat till sig av enbart kärna B, trots att kärna C och kärna D har ett liknande datablock i sina cacheminnen. En kärna med data som finns i ett datablock i cacheminnet tillhörande kärnan som befinner sig i tillstånd F är därmed den enda kärnan som svarar på andra kärnors förfrågan om just det datablocket. Kärna B kommer även som regel att ge över ansvaret för svarandet på andra kärnors förfrågan om just det datablocket till kärna A. Detta kommer därmed att leda till att kärna A kommer att hamna i tillståndet F och kärna B kommer att hamna i tillståndet S (4). Låt oss ta ett exempel på några läsningar och skrivningar till primärminnet av fyra olika kärnor (A, B, C och D) i en multi-core processor för att reda ut hur MESIF protokollet med alla fem tillstånd fungerar och hur cacheminnet mellan varje kärna i en multi-core processor hålls koherent. Kärna A får för sig att göra en läsning på plats x i primärminnet, och självklart letar kärnan först i sina privata cacheminnen om det data som finns på plats x redan finns lagrad där. Kärna A hittar inte data för plats x i sitt privata cache-minne (L1 & L2) och inte heller i det delade cacheminnet (L3). Vid förfrågan på bussen om data för plats x får kärna A inte heller något svar, då ingen av de tre andra kärnorna har datablocket för plats x lagrat i sina cacheminnen. Detta leder till att datablocket för plats x hämtas från primärminnet och lagras i låt oss säga det privata cacheminnet för kärna A, där data i datablocket hamnar i tillståndet E och anses vara clean (6). 4

Senare bestämmer sig kärna B för att göra en läsning på plats x i primärminnet likt kärna A. Kärna B hittar inte data för plats x i sitt privata cacheminne och inte heller i det delade cacheminnet, men det gör den med hjälp av bussen då kärna A tidigare gjort en läsning på plats x i primärminnet och lagrat det i sitt privata cacheminne. Detta leder till kärna A skickar en identisk kopia av datablocket för plats x i primärminnet till kärna B, vilket leder till att data i datablocket som tillhör kärna A hamnar i tillståndet S (6) och data i datablocket som tillhör kärna B hamnar i tillståndet F (4). Kärna C får även för sig att göra en läsning på plats x i primärminnet likt kärna A och kärna B. Likt kärna B hittar den data för plats x i med hjälp av bussen (6). Datablocket för kärna B är som tidigare nämnt i F tillståndet, vilket därmed leder till att kärna B skickar en identisk kopia av datablocket till kärna C. Data i datablocket för kärna C hamnar i och med det i tillståndet F och data i datablocket för kärna B hamnar i tillståndet S (4). Låt oss nu säga att kärna A får för sig att göra en skrivning på plats x i primärminnet och därmed skriva ett nytt värde på det data som lästes tidigare av kärna A, B och C. Detta leder därmed till att kärna A lagrar det nya värdet för plats x i sitt privata cacheminne och data i datablocket för kärna A hamnar i tillståndet M och anses då vara dirty, medan data i datablocket för kärna B och C hamnar i tillståndet I. Detta beror nämligen på att data i cacheminnet för kärna B och kärna C samt i primärminnet har fel och ett gammalt värde i jämförelse med cacheminnet för kärna A (6). Kärna D får nu för sig att göra en läsning till plats x i primärminnet och hittar därmed data för plats x med hjälp av bussen. Detta beror på att kärna A som tidigare nämnt har data i tillståndet M i datablocket i sitt privata cacheminne för plats x. Primärminnet har dock ett fel och gammalt värde i jämförelse med datablocket i cacheminnet för kärna A, vilket leder till att primärminnet först måste uppdatera sitt värde för data på plats x innan en identisk kopia av datablocket kan skickas till kärna D. Detta görs nämligen med en metod som kallas för write-back, där kärna A skickar en identisk kopia av datablocket till primärminnet (6). Då kärna A skickat en kopia av datablocket i sitt cacheminne så hamnar data i det datablocket i tillstånd S och data i datablocket i kärna D hamnar i tillstånd F. Skulle kärna B eller kärna C få för sig att göra en läsning på plats x så skulle data i datablocket för just den kärnan återigen hamna i tillstånd F, medan data i datablocket för kärna D skulle hamna i tillstånd S (4). Detta långa exempel visar därmed hur cacheminnet mellan varje kärna i en Intel Core i7 multi-core processor hålls koherent, där varje kärna i en multi-core processor ser och hör precis allting som sker på bussen. Varje kärna håller därmed deras cacheminne uppdaterat och riskerar inte att använda sig av ett gammalt och inte giltigt värde. Primärminnet hålls även för det mesta uppdaterat, förutom då data i ett cacheminne anses vara dirty. Primärminnet uppdateras dock som tidigare nämnt vid ett senare tillfälle och datan i cacheminnet blir clean. 5

Diskussion Användandet av så kallade multi-core processorer har nämligen blivit en trend. En trend som troligtvis kommer att hålla i flera år framöver. Intel Core i7s samtliga processorer består av minst två kärnor och har därmed fått problem med att cacheminnet mellan varje kärna i en multi-core processor måste hållas koherent. Intel kunde nämligen lösa detta problem med ett så kallat cachekoherens protokollet MESIF. Men varför använde inte Intel sig av ett äldre cachekoherens protokoll som exempelvis MESI? Vilka är fördelarna och nackdelarna med detta protokoll? MESIF är väldigt lik protokollet MESI, där en av de troligtvis största skillnaderna är att MESIF protokollet har ett tillstånd vid namnet Forward (F), som däremot inte finns i protokollet MESI. Detta tillstånd är som tidigare nämnt en speciell version av tillståndet Shared (S), som finns i både MESIF och MESI. Intel har troligtvis skapat och lagt till detta tillstånd i MESIF på grund av att lösa problemet där flera kärnor som har data för exempelvis plats x i sitt privata cacheminne skickar det till den kärna som gör en läsning på plats x i primärminnet. Det vill säga att det är flera kärnor som svarar på förfrågan om data för plats x som gjordes av en kärna i multi-core processorn, vilket troligtvis är rätt så onödigt. Intel tänkte troligtvis på att spara bandbredd genom att istället låta en enda kärna som har data för plats x i sitt privata cacheminne att besvara den kärna som frågade efter data för plats x. Att lägga till tillståndet F kan vara en fördel då det troligtvis sparar på bandbredd och bussen behöver inte heller överflödas som i protokollet MESI, där alla kärnor som har ett datablock innehållande det data som en kärna frågat om svarar och skickar en identisk kopia av datablocket. En kärna med ett datablock i cacheminnet tillhörande kärnan som befinner sig i tillstånd F är därmed den enda kärnan som svarar på andra kärnors förfrågan om just det datablocket, vilket löser problemet som protokollet MESI har och anses troligtvis vara ett bättre och effektivare protokoll som passar Intel Core i7 processorer bättre. En nackdel med protokollet MESIF kan vara att den inte innehåller ett tillstånd vid namnet Owned (O), som finns i cache-koherens protokollet MOESI. Det rätt så kända amerikanska företaget AMD använder sig av just detta protokoll i vissa av deras processorer. Ett datablock i ett cacheminne som befinner sig i tillståndet O fungerar på så sätt att det data som finns i datablocket anses vara dirty likt tillståndet M i protokollet MESIF. Skillnaden mellan tillståndet O och tillståndet M är dock att den kan dela med sig data för exempelvis plats x i primärminnet som är dirty med andra kärnor utan att behöva skicka en identisk kopia av datablocket till primärminnet varje gång en kärna frågar om data för plats x. Uppdateringen av primärminnet kan därmed skjutas upp. Det vill säga att kärnorna i en multi-core processor som har ett datablock i sitt privata cacheminne för plats x i primärminnet, förutom den kärna som har ett datablock i tillståndet O hamnar därmed i tillstånd S, trots att deras data anses vara dirty. Datablocket som är i tillstånd O i MOESI protokollet behöver inte heller som i MESIF protokollet (tillståndet M) hamna i tillståndet F utan stannar i tillståndet O (7). Införandet av tillståndet O kan därmed troligtvis spara på bandbredd. 6

Referenser (1) Patterson, D, & Hennessy, J 2013, Computer Organization And Design: The Hardware/Software Interface, n.p.: Oxford : Morgan Kaufmann, [2013], cop. 2014 (2) Intel Core i7. 2015. https://en.wikipedia.org/wiki/intel_core#core_i7 (Hämtad 22/11-2015) (3) Snooping Cache Coherence I. 2012. http://www.cs.cmu.edu/afs/cs/academic/class/15418- s12/www/lectures/10_coherence.pdf (Hämtad 22/11-2015) (4) MESIF protocol. 2014. https://en.wikipedia.org/wiki/mesif_protocol (Hämtad 22/11-2015) (5) David Henty. Multicore Memory Caching Issues - Cache Coherency. Edinburgh Parallel Computing Centre at The University of Edinburgh (EPCC). 2012. https://www.youtube.com/watch?v=s3kg_zcz_pa (Hämtad 23/11-2015) (6) David Wentzlaff. 19 5 L18S5 Cache Coherence Protocols. Princeton University - Computer Architecture. 2014. https://www.youtube.com/watch?v=l5ftgnmgyrm (Hämtad 25/11-2015) (7) MOESI protocol. 2015. https://en.wikipedia.org/wiki/moesi_protocol (Hämtad 28/11-2015) 7