Många studier pekar på svårigheten att skala upp befintliga datorarkitekturer för att möta behoven hos ett exaskala-system (dvs. som kan utföra 10 18 flyttalsoperationer per sekund), som inte förbrukar mer än 20 MW i kraft, omkring år 2020. Detta papper beskriver en ny arkitektur, Active Memory Cube, som minskar energin i beräkningen avsevärt genom att utföra beräkningar i minnesmodulen, snarare än att flytta data genom stora minneshierarkier till processorn kärnan. Arkitekturen utnyttjar en kommersiellt demonstrerad 3D-minne stack kallas Hybrid Memory Cube, placera sofistikerade beräkningselement på logikskiktet under sin stack av dynamisk slumpmässig åtkomst minne (DRAM) dör. I artikeln beskrivs också en aktiv minne kub anpassad till kraven i ett vetenskapligt exaskala system. De beräkningselement har en vektorarkitektur och är kapabla att utföra en omfattande uppsättning av flyttal- och heltal instruktioner, predikerade operationer, och samla-scatter åtkomster över minnet i kuben. Dokumentet beskriver den programvaruinfrastruktur som används för att utveckla applikationer och för att utvärdera arkitekturen, och beskriver resultat av experiment på applikationskärnor, tillsammans med prestanda- och effektprognoser. Stora petaska superdatorer används redan för att lösa viktiga problem inom en rad områden som materialvetenskap, energivetenskap, kemi, jordsystem, astrofysik och astronomi, biologi/livssystem, hälsovetenskap, kärn- och högenergifysik och vätskedynamik [1]. Var och en av dessa områden har specifika problem och en uppsättning algoritmer anpassade för att lösa dessa problem, men det finns överlappningar i användningen av algoritmer över dessa domäner på grund av likhet i den grundläggande karaktären av problem över domäner. Flera funktioner är gemensamma för tillämpningar av intresse för superdatorgemenskapen. Huvuddelen av dessa är den genomträngande användningen av programmeringsmodellen MPI (Message Passing Interface) [2] med partitionering av programminnet i MPI-domäner, var och en normalt högst 2–4 GB i storlek. Många av dessa tillämpningar uppvisar massiv dataparallalism och utför samma uppsättning operationer på miljarder dataelement. Dessutom uppvisar de flesta av de data som behandlas i dessa system ganska kort hyrestid i processorn, streaming in i och ut ur processorn till höga priser. Användningen av ännu större superdatorer förväntas både påskynda lösningarna för dessa problem och möjliggöra lösningen av problem med större datauppsättningar eller med finare upplösning. Copyright 2015 av International Business Machines Corporation. Kopiering i tryckt form för privat bruk är tillåten utan betalning av royalty, under förutsättning att 1) varje reproduktion sker utan ändring och 2) tidningsreferensen och IBM-meddelandet om upphovsrätt ingår på första sidan. Titel och abstract, men inga andra delar, av detta papper får kopieras på något sätt eller distribueras royalty gratis utan ytterligare tillstånd av datorbaserade och andra informationssystem. Tillstånd att återpublicera någon annan del av detta papper måste erhållas från Redaktören. Utöver detta finns det dock en förväntan om att förmågan att beräkna 10 18 operationer per sekund också kommer att medföra en kvalitativ förändring av problemlösning, vilket gör det möjligt att använda exaskalasystem i nya typer av problem såsom kvantifiering av osäkerhet [3] och i nya områden, såsom modellering av människohjärnan [4]. Det finns flera utmaningar i samband med att utforma exaskala system [5], den viktigaste av dem är den kraft som förbrukas av dessa maskiner. Med nuvarande petascale-systems energiförbrukning kan ett exascale-system förbruka så mycket som 500 MW, mycket högre än de 20 MW som är avsedda för dessa anläggningar. Den viktigaste motorn för superdatorernas framsteg under de senaste decennierna har varit Thisrdskalning [6], genom vilken elektronikindustrin framgångsrikt har utnyttjat kombinationen av ökad densitet, bättre prestanda och minskad energi per drift med stadiga förbättringar inom kiselteknik. Med Dennards skalning kunde målet på 20 MW ha uppnåtts i fyra generationer av teknik. Med oxidtjocklek ner till några atomer kan spänningarna inte längre skalas proportionellt utan att allvarligt äventyra tillförlitligheten och förutsägbarheten i anordningens drift, och det är inte längre rimligt att förvänta sig samma förbättring av klockfrekvensen för konstant effekttäthet som tidigare var praktiskt. Den andra utmaningen i utformningen av täta beräkningsnoder är den begränsade bandbredd som finns tillgänglig för att komma åt minnet externt till processorn chip genom det begränsade antalet stift tillgängliga vid chip gränser. Bandbredden av signalering genom dessa stift har ökat i en mycket lägre takt än den av beräkningsförmågan inom processorn chips. I motsats till den 1 byte per sekund (byte/s) bandbredd till minne för varje flyttalsoperation per sekund (flop/s) som är typisk för den tidiga generationen superdatorer, ger dagens superdatorer knappt 0,2 byte/s per flopp/s [7]. Minneshierarkier på processorn chip överbrygga gapet för vissa applikationer, men gör det på bekostnad av makt i statiska slumpmässiga-åtkomstminnen (SRAM) caches, och endast för program som kan utnyttja temporal eller rumslig lokalitet av data. En av de tekniker som mognar och som kan hjälpa i båda dessa avseenden är 3D stapling av kisel dör. 3D stapling hjälper inte bara till att ge en kompakt fotavtryck, men det minskar också latensen av kommunikation mellan kretsar på olika lager. Med omdömesgill användning av throughsilicon vias (TSVs), 3D-teknik kan också ge större bandbredd mellan sektioner av processorn design utan att behöva ta till stora, dyra dör. Hybrid Memory Cube (HMC) [8] är en ny minnesplattform där minneskapaciteten ökas dramatiskt genom 3D-stackning av flera (fyra till åtta) lager av DRAM-minnet dör och ansluter dem till ytterligare ett baslogiskt lager med hjälp av TSV. Basskiktet innehåller minnesregulatorn, den inbyggda självtestlogiken (BIST) och ett gränssnitt till en värdprocessor, och använder CMOS-teknik optimerad för sådan logik. Det logiska lagret i en HMC-struktur ger en bekväm punkt där datatransformationer kan utföras på innehållet i minnesstacken. Sådana omvandlingar kan filtrera data innan data tillhandahålls till en värdprocessor för vidare bearbetning, vilket minskar bandbreddskrav och latens vid gränssnittet mellan värdprocessorn och minnet. I andra fall kan sådana omvandlingar ta bort behovet av att värdprocessorn läser eller skriver någon del av datan. I båda fallen resulterar minskningen av dataflödet mellan chips både i förbättrad prestanda och i energibesparing. Detta dokument beskriver arkitekturen av en sådan personalisering av logikskiktet i en HMC, kallad Active Memory Cube (AMC). AMC är ett exempel på begreppet bearbetning i minnet, som har experimenterats med i flera decennier med begränsad framgång. Begränsningen av dram-arkitekturen för varor till att överensstämma med långsamt utvecklande standarder och begränsningarna för digital logik med den teknik som används vid bearbetningen av dram-minnen har varit svåra att övervinna. Kommersialiseringen av HMC gör det möjligt att blanda DRAM-teknik med logikteknik i en 3D-stack. Genom att behålla HMC:s minnesgränssnitt kan en AMC visas för en värdprocessor som ett vanligt minne tillgängligt genom vanliga kommandon för läsning och skrivande av minne, samtidigt som den ger ytterligare förmåga att självständigt omvandla minnets innehåll. Särskilda kommandon till minne har tillhandahållits på system i det förflutna, till exempel i atomära read-modify-write-operationer; AMC utökar konceptet betydligt ytterligare så att kommandon kan ange godtyckliga program för att utföra transformationer. Denna mångsidighet kommer till en viss kostnad. Programmet som ska utföras i AMC, pekar på data på vilka programmet fungerar, och översättningstabeller för att kartlägga virtuella adresser i användarprogram till verkliga adresser i AMC måste kommuniceras från värddatorn till AMC. En stor del av fördelen med att bearbeta i minnet kan gå förlorad om det behövs för mycket kommunikation mellan värd- och bearbetningselement i minnet. Det finns en subtil balans mellan att hålla bearbetningselementen på AMC enkelt för att maximera effekten av dessa element, och göra dem mångsidiga för att minska behovet av att kommunicera med värdprocessorn. Detta har lett till utformningen av AMC bearbetningselement som körfält som har egenskaper av en allmän funktion kärna, men avpassad för att vara kraft och områdeseffektiv för streaming vektor funktioner som är vanliga i vetenskapliga arbetsbelastningar. Denna kompromiss ger en okonventionell blandning av funktioner inklusive avsaknad av caches och hårdvara schemaläggning av instruktioner, men införlivandet av vektorregister, en vektor instruktionsuppsättning, predikerad körning, virtuell adressering, och samla-scatter åtkomst direkt till minnet. Minnet i AMC är konsekvent och sammanhängande tillgängligt både från körfälten och från värdprocessorn, vilket gör att man undviker behovet av att kopiera data fram och tillbaka mellan det minne som är associerat med dessa enheter, vilket behövs i typiska acceleratorer kopplade till processorer. Med hårdvaran effektiv i område och kraftutnyttjande, mycket av bördan av resursallokering och instruktion schemaläggning faller på kompilatorn. AMC-kompilatorn tar ett standardprogram annoterat för att köra på ett parallellt system med OpenMP** 4.0 [9] direktiv och avgränsar de delar som ska köras på AMC. Den utnyttjar alla vektorer och exponerade rörledningar i körfälten i AMC för att få fram ett effektivt schema med instruktioner för varje körfält. Drifttidstillägg till operativsystemet tillhandahåller de tjänster som behövs av kompilatorn för att fördela filer och styra placeringen av data inom AMC och över flera AMC som är anslutna till värddatorn. Idén om att använda bearbetningskapacitet i baslogikskiktet i en stack som HMC har nyligen utnyttjats i andra förslag som NDC [10] och TOP-PIM [11]. Dessa förslag införlivar i allmänhet kärnor av befintliga processorarkitekturer i basskiktet och kan därför inte närma sig energieffektiviteten hos AMC, vars körfältsarkitektur är särskilt utformad med tanke på målet om energieffektivitet för vetenskapliga superdatorer i exaskala. Avsnitten i resten av detta dokument ger en beskrivning av strukturen på AMC, detaljer om organisationen av filerna, en beskrivning av infrastrukturen för programvaruutveckling, och resultat av vissa experiment på en simulerad version av AMC. Som tidigare nämnts bygger AMC på HMC:s grundläggande struktur och delar med HMC DRAM stackens arkitektur. Minnet dör i en HMC stack delas upp i block, och alla block på samma fysiska plats på alla dör grupperas tillsammans i en enhet som kallas ett valv. En motsvarande valvregulator hanterar varje valv individuellt. Alla valvstyrenheter är sammankopplade med varandra och, genom länkstyrenheter, till externa I/O-länkar via ett internt nätverk. Valvets styrenheter, sammanlänkningsnätverk och länkstyrenheter finns på ett logiskt lager som är skilt från DRAM-minnet. Som anges lägger AMC till flera processelement, som kallas körfält, i baslogikskiktet, som är anslutna till ett förbättrat sammanlänkningsnät som visas i figur 1. Genom att använda samma sammanlänkningsnät och samma transaktionsprotokoll mellan en fil eller en länk och valvstyrenheter kan en fil adressera minnesplatser inom sin AMC precis som en extern processor kan. Länkkontrollen kan skicka och ta emot läs- och skrivkommandon med hjälp av särskilda MMIO-adresser till och från vilket körfält som helst. Detta gör det möjligt för en extern värdprocessor att kommunicera direkt med en fil, och för en fil att indikera någon händelse till värden utan att involvera valv styrenheter. Prototypen design för AMC beskrivs i detta papper, antas vara implementerad i 14-nm teknik, har en 8 GB stack bestående av åtta lager av DRAM, var och en har 32 partitioner på 32 MB. Varje partition har två banker som var och en består av 16 K-sidor med varje sida med 8 128-byte cacherader. Justerade skiljeväggar från vart och ett av de 8 skikten grupperas i ett vertikalt valv som i HMC. De 16 bankerna i ett valv är anslutna till sin valvcontroller i baslogiken lager genom en hög med TSVs. Adress- och kommandoinformation levereras till DRAM-lagren genom en TSV-sändningsbuss och avkodas av varje valvlager, men fångas endast av det lager till vilket adressen avkodar. Varje begäran till en minnesbank levererar ett paket med 32 byte plus 32 bitar metadata. De 32 bitarna metadata är uppdelade i 30 bitar för ECC, en bit för sammanhållningskontroll och en bit för snoopfiltrering stöd som krävs av typiska värd multiprocessorimplementationer, t.ex. de av IBM POWER* arkitektur. Varje 32 byte paket levereras till valvets styrenhet i fyra fil-klocka fästingar. Med en klocka på 1,25 GHz resulterar detta i en maximal bandbredd på 10 GB/s per valv, eller 320 GB/s över hela kuben. Värdprocessorn antas vara en implementering av POWER arkitekturen direkt ansluten till åtta sådana AMCs, kommunicera med varje AMC över en dubbelriktad länk med en bandbredd på 32 GB/s i varje riktning. Var och en av de åtta AMCs är tusen kedjade till en annan AMC genom en annan dubbelriktad länk. Detta ger en total minneskapacitet på 128 GB och en bandbredd på 256 GB/s till minnet i varje riktning. Som jämförelse kan nämnas att den totala inre bandbredden till valven i de 16 AMC:erna är 5 TB/s. Bandbredden är synlig för 512 körfält, 32 per AMC, var och en med en frekvens på 1,25 GHz. Laner inom en AMC kan endast adressera det minne som finns inom denna AMC. Kommunikation och synkronisering mellan AMC:er måste samordnas av värdprocessorn. Detta är inte en orimlig begränsning eftersom den mängd minne som behövs för varje process, t.ex. en MPI-uppgift, i storskaliga vetenskapliga maskiner normalt är mindre än 8 GB. Valvregulatorn på baslogiken får alla förfrågningar till DRAM-lagren antingen från värdprocessorn eller från enskilda körfält inom AMC. Begäran från värddatorn gäller normalt hela 128 B-cacherader. Eftersom inga cacheminnen ingår i AMC kan dock mindre bredder begäras av filerna. För att spara ström och minska latensen av åtkomst för förfrågningar mindre än 32 byte, ger valv controller den behövliga 8 eller 16 byte del begärt men sparar hela 32 byte paket som kommer ner TSVs i en valv buffert som kan hålla 256 sådana paket. En träff i valvbufferten undviker behovet av att skicka begäran upp till DRAM-lagren. Att underhålla en hel värdprocessor cache linje 128 byte tillsammans med sina metadata bitar i en enda DRAM sida undviker bandbredd och effekt overhead att dela en linje bland flera sidor. För att stödja små förfrågningar om granularitet från körfält till samma cachelinjer ändrades standardpolicyn för DRAM-åtkomst från HMC [12], där sidan stängs omedelbart efter en åtkomst, till ett öppet sidläge, där sidan stängs endast om efterföljande åtkomst är till en annan sida på samma lager i valvet. Valvregulatorn är en idealisk plats för att utföra atomoperationer, som är varianter av read-modify-write-operationer som vanligtvis stöds av minnesregulatorer. Atomiska operationer brukar läsa data från en minnesplats, manipulera data genom att utföra logiska eller aritmetiska operationer med andra data, och sedan skriva resultaten tillbaka till minnet. Om returdata är berättigade, returneras de gamla uppgifterna, de ändrade uppgifterna eller en indikation på framgång/misslyckande till framställaren beroende på typ av atomisk operation. Den AMC stöder en särskilt rik uppsättning av atomära operationer inklusive hämta-och-op, jämföra-och-swap, och även en atomisk flytta-punkt tillägg operation. Att kombinera atomisk verksamhet över ett 32 byte block resulterar i en betydande minskning av sammanlänkningstrafiken för flera vektortillämpningar. Valven och filerna är organiserade i fyra kvadranter, var och en med åtta valv och åtta köer. Två uppsättningar nätverk ansluter länkarna, filerna och valvenVone för begäran trafik går från länkar och filer till valven, och en annan för svarstrafik från valven till länkarna och filerna. Varje kvadrant genomför en intern lokal begäran och svar crossbar. Kvadranterna själva är helt sammankopplade med 20 GB/s point-to-point-länkar. Begäran från länkarna/lanerna kan riktas till valv i den givna lokala kvadranten eller till valv i andra kvadranter. Lokala kvadrant valv åtkomster måste hoppa över bara en crossbar. För fjärråtkomst måste förfrågningarna skickas via den första begärans crossbar, som sedan ansluter den till lämplig kvadrant, varifrån begäran paketet måste göra ett andra hopp över begäran crossbar innan du når destinationsvalvet i den avlägsna kvadranten. På samma sätt måste svarspaketet färdas genom två svarskors för att komma tillbaka till källkodslänken/lanen. Hur latent åtkomsten till en plats i minnet är beror inte bara på om åtkomsten är till en lokal kvadrant kontra en avlägsen kvadrant, utan också på om begäran träffar i valvbufferten, om sidan som är tillgänglig redan är öppen, och slutligen om förekomsten av konflikter i tyget. Den minsta latensen för åtkomst är utformad för att vara 24 cykler när åtkomsten är en träff på valvbufferten i en lokal kvadrant. Värden kan komma åt samma minnesplatser på en AMC som körfälten i den AMC. Valvregulatorn har koherenslogik som upprätthåller en konsekvent åtkomst till minnesplatserna som delas mellan filerna och värddatorn. Granulariteten av koherens spårning är 128 byte, identisk med granulariteten av spårning bland caches på värden. AMC spårar varje rads cachelagring genom att lagra denna information i metadataregionen för varje 128 B-minnesrad. Den stat bit som används för spårning replikeras över varje 32-byte sektor av linjen och används för att spåra följande tillstånd: INT_RWVAgents inom AMC, som en fil, har äganderätt till denna linje och kan läsa eller skriva denna linje. EXT_RWV Värddatorn har äganderätt till denna rad och kan läsa, cache, och skriva denna rad. Värddatorns tillgång till en rad resulterar i att tillståndet sätts till EXT_RW om det inte redan är i det tillståndet. En fils åtkomst till en sektor i EXT_RW-tillståndet kommer att försenas för att värddatorn ska kunna ogiltigförklara eller spola in gömda kopior av motsvarande rad. Tillståndet ändras sedan till INT_RW och åtkomsten är klar. Den försening som uppstår liknar den som skulle uppstå när det gäller att hålla kassakistor konsekventa på värden. Endast sektorer av linjer i INT_RW-tillståndet är buffrade i valvbufferten, och även dessa sektorer skrivs igenom till DRAM på skrivförfrågningar från körfält. Det finns således inga problem med samstämmighet inom en AMC eftersom filerna själva inte har några cacheminnen. utföra läs- och skrivåtkomst till minne som finns i valven och ett beräkningsundersystem som utför omvandlingar av data som hämtas och förbereder data som ska skrivas tillbaka till minnesvalven. Undersystemet last/lager i varje körfält har en minnesadressöversättningsenhet som är medveten om kartläggningen från effektiva adresser som används i ett program till verkliga adresser som erkänns av valvregulatorerna. Utöver dessa två huvuddelsystem har varje fil en Lane Control Unit (LCU) som styr flödet av instruktioner till de andra delsystemen, och en Processor Command Unit (PCU) som utför alla operationer som rör kommunikation med värdprocessorn, synkronisering mellan filerna och lastning av konfigurationstillstånd före körfältsutförande. Vektor instruktionsuppsättning arkitektur Beräkningsdelen av varje processfil i AMC består av fyra beräkningsskivor. Varje skiva innehåller en memory-access rörledning (även kallad last / lager rörledning) och en aritmetisk rörledning enligt bild 2. Den aritmetiska rörledningen utför aritmetiska och logiska operationer på flyttals- och heltalsdatatyper vid en 64-bitars granularitet. I instruktionsuppsättningen arkitektur (ISA) ingår vektorinstruktioner som upprepar en given operation på vektorer av operander, ett element per cykel. Detta är det klassiska tidsbundna paradigm för enkelinstruction-multiple-data (SIMD) som banats väg i de tidiga Cray-datorerna [13]. Samtidigt, för datatyper som är mindre än 64 bitar, ISA innehåller instruktioner som utför samma funktion på flera element packade i 64-bitars operander i samma cykel, liknande den rumsliga SIMD paradigm av nyare multimedia arkitekturer. Dessa smalare vektor underord element kan vara 32-bitar, 16-bitar, eller 8-bitar bred. En instruktion, även kallad LIW (long-instruction ord) i ISA, anger alla operationer som måste utföras samtidigt i de nio rörledningarna i körfältet. ISA ger också möjlighet att ange en vektorlängd som ska tillämpas på alla vektorinstruktioner i LIW. Vektorlängden kan anges direkt i instruktionen eller erhållas från ett särskilt iterationsräkningsregister. Således kan en enda LIW i AMC uttrycka tre olika nivåer av parallellism: parallellism över funktionella rörledningar, parallellism på grund av rumslig SIMD i underordsinstruktioner, och parallellism på grund av temporal SIMD över vektorer. Varje skiva av en processfil innehåller tre registerfiler: ett vektorkalkylregister (VCR) med 16 poster av 32 vektorelement, varje 64 bitar bred, ett skalärt beräkningsregister (SCR) med 32 poster, varje 64 bitar brett, och ett vektormaskregister (VMR) med fyra poster av 32 vektorelement, var 8 bitar brett. I allmänhet ska transaktionerna i en skiva avläsas och skrivas in i register som tillhör den delen. Men en skiva kan också avläsa värden från VCR av en annan skiva. Den aritmetiska rörledningen i ALU (aritmetisk logikenhet) omfattar stöd för en stor uppsättning flyttals- och heltalsoperationer som behövs i olika typer av arbetsbelastningar. De datatyper som stöds inkluderar dubbel-precision och enkel-precision flyttal, och byte, 2-byte halvord, 4-byte ord, och 8-byte dubbelord heltal operationer. ISA innehåller multiplikationstilläggsinstruktioner för alla datatyper, särskilda instruktioner till stöd för enkelprecisionskomplexa aritmetiska, och långlatensinstruktioner som t.ex. delning, kvadratrot och invers kvadratrot. Laddnings-/lagringsledningen kan ange en vektoroperans som mål. De separata adresser som behövs för att ladda var och en av vektorelementen beräknas antingen genom att ange ett skalarsteg som ska läggas till en basopera, eller genom att ange ett vektorregister som en av adressoperorna. Det senare alternativet underlättar insamling och spridning av data mellan någon del av AMC-minnet och vektorelement eller underordselement. De åtta bitarna av VMR gör det möjligt att basera en aritmetisk eller en belastnings-/lagringsfunktion på ett vektorelement eller underordselement. Komplexa predikat kan beräknas genom en rik uppsättning logiska operationer som stöds på VMR operands. De flesta flytande punkt instruktioner har en latens av 8 cykler; split, kvadratrot, och invers kvadratrot har en latens av 26 cykler, medan heltal instruktioner och instruktioner data manipulation har en latens av 4 cykler. För att hålla hårdvarukomplexiteten så låg som möjligt exponeras rörledningarna i ISA, vilket innebär att det är monteringsspråkprogrammerarens eller kompilatorns ansvar att ta hänsyn till instruktioners latenser i rörledningen vid schemaläggning av beroende instruktioner. På så sätt undviks behovet av komplex beroendekontroll och instruction-stalling logik som finns i standardprocessorer. Det enda undantaget från detta är det interlock som införts för lastoperationer, som har oförutsägbar latens. Målregistren för lasthantering är förknippade med en väntande bit som indikerar en väntande last. Användning av ett register som har denna väntande bit inställd resulterar i ett bås av alla aktiviteter i körfältet tills lastdata kommer från minnet. Prestanda och effektförbrukning kan förbättras genom att ange förbikopplade manövrer i instruktioner: resultaten av operationer från en skiva kan matas direkt till beroende operationer på någon skiva två cykler tidigare, jämfört med att använda resultaten av operationer från deras målregister platser. En dubbelprecisions flyttalsmultiple-add utförande kan slutföra i varje skiva under varje 1,25 GHz cykel, vilket resulterar i en topp flyttal kapacitet på 10 miljarder flyttal operationer per sekund (Gflop/s) per fil eller 320 Gflop/s per kub. Det resulterande förhållandet på 1 byte/s minnesbandbredd per flopp/s är betydligt bättre än 0,2 förhållandet i en IBM Blue Gene*/Q nod. Load-store-verksamhet Den bandbredd som finns tillgänglig för förfrågningar om belastning/lagring från en fil till sammanlänkningsnätet är 8 byte per cykel. Detta är lämpligt för de flesta tillämpningar av intresse. En djup, 192-entry load-store kö (LSQ) tillhandahålls för att buffra förfrågningar till minne och för att möjliggöra kombination av laster eller butiker när det är möjligt. Kombination gör att flera 8-byte förfrågningar till angränsande delar av en 32-byte sektor kan tillgodoses genom en enda transaktion på sammanlänkningsväven och vid valv. User-level POWER effektiva adresser beräknas i lastlager pipeline och översätts till AMC verkliga adresser med hjälp av en 8-entry effective-to-real address translation unit (ERAT). Missar i ERT tvingar körfältsutförandet att stanna upp och hanteras av PCU som skickar ett kommando tillbaka till värdprocessorn via länkkontrollen. Detta kommando genererar ett avbrott som hanteras av operativsystemet, som får en översättning för den adress som orsakar felet och skickar det tillbaka till den PCU som ska installeras i ERT. PCU väcker sedan rörledningarna från stallet och upprepar minnesoperationen som orsakade felet. Instruktion hämta mekanism av typiska processorer, med sin instruktion catch, instruktion prefetch och gren förutsägelse mekanismer, är kostsamt både i område och i ström förbrukas. Den iterativa karaktären hos vetenskapliga kärnor, deras relativt små storlek, förutsägbarheten hos grenar, och förmågan att dölja grenlatenser genom vektorinstruktioner ifrågasätter alla behovet av komplexa instruktionscacher och maskinvarusystem för att förutsäga och förtränga instruktionsströmmar. Med sina tids- och rumsliga SIMD-funktioner kan AMC spara både i instruktionsavtryck och i ström som förbrukas genom att avskriva kostnaden för att hämta instruktioner över många fler operationer jämfört med typiska processorer. Ytterligare minskning av komplexitet och kraft i en process körfält realiserades i AMC genom att eschewing en instruktionscache till förmån för en körfält instruktion buffert (LIB) med 512 poster, varje innehar en enda LIW. Storleken på LIB är tillräcklig för de flesta funktioner eftersom LIW-formatet och de tidsbundna och rumsliga SIMD-funktionerna i ISA tillåter mycket tät kod. LIB hanteras i programvara antingen genom att laddas direkt av värddatorn eller genom LoadLIB-instruktioner i AMC ISA. Villkorliga och villkorslösa filialer i instruktionsströmmen är begränsade till mål inom LIB. Villkorliga grenar undersöker värdet i ett tillståndsregister som vanligtvis lagras som en bieffekt av att beräkna en vektormask med hjälp av en vektor jämför instruktion. ISA har en decrement-count-and-branch-if-noll instruktion för att hålla reda på iterationer i en loop. ISA har också en indirekt filial som har sitt mål från värdet i ett skalärregister. Detta, tillsammans med en gren-och-länk instruktion, i hög grad underlättar placeringen och åberopandet av små subrutiner i LIB. Det behövs flera verktyg för att utvärdera utformningen av AMC och göra den bekväm att använda av programmerare. I detta avsnitt beskrivs först en simulator som byggdes för att utvärdera arbetsbelastningen för AMC. Den beskriver sedan de ändringar som gjorts i operativsystemet för att ge en lämplig konfigurationsmiljö och en körtid för att utnyttja AMC i ett fullt system. Avsnittet beskriver slutligen programmeringsmodellen och kompilatorn för att hjälpa en programmerare att utveckla kod för ett system som innehåller AMC. AMC-simulatorn är en exekveringsdriven simulator baserad på Mambo-simulatorn [14], som har använts i flera IBM-processorutvecklingsprojekt. Simulatorn skapar en modell för en hel nod bestående av en värd POWER-processor och 16 AMCs. Simulatorn modellerar alla funktioner i AMC troget, inklusive timing detaljer för AMC rörledningar, sammanlänkningsnätet, valv styrenheter, och DRAM lager i valven. Simulatorn kan användas i olika lägen för att underlätta förståelsen av arkitekturen och prestandan hos applikationer. Till exempel låter ett läge i simulatorn användaren ange en fast latens till minnet. Detta läge hjälper användaren att bryta ner fördröjningen av minnesåtkomsten till fördröjning som är inneboende i schemaläggningen av kod och fördröjning på grund av överbelastning i nätverket och i valven. Simulatorn har också alternativ för att visa statistik över användningen av olika resurser i AMC. Eftersom fokus för undersökningen var AMC:s egna resultat, modellerades värdprocessorn funktionellt snarare än på ett tidsmässigt korrekt sätt. Detta tillät simulering av hela systemet, inklusive simulering av operativsystemet och värdregioner för applikationsprogrammet. Timing-accurate simulering av dessa avsnitt skulle ha varit oöverkomligt långsam. För att ytterligare förbättra simulatorns prestanda utvecklades en parallell version av simulatorn, som simulerade AMC-körfält som parallella trådar för utförande i en delad minnesmiljö med värdprocessorn själv som en separat tråd för utförande. Simulering av värdprocessorn förbättrades ytterligare med hjälp av caching och optimering tekniker som vanligen används i just-in-time kompilatorer. En monteringsmaskin utvecklades för att generera binärer från sammansättningsspråkkärnor. Flera sådana kärnor byggdes för arkitektonisk verifiering av simulatorn. Samlingsspråkskärnor skrevs också för flera vanliga biblioteksrutiner och för flera vetenskapliga tillämpningar. Stöd för operativsystem och körtid För att utöka programutbudet utöver enkla matematiska kärnor krävs ett gränssnitt som förenklar utnyttjandet av AMC i ett system. Primärt stöd för att utnyttja AMC resurser tillhandahålls av operativsystemet, som är den lätta Compute Node Kernel (CNK) som används i Blue Gene/Q [15]. Systemanrop används för att fördela och konfigurera resurser, men när dessa resurser har fördelats hanteras de av ett användarbibliotek, och presenteras för programprogrammeraren i ett programprogrammeringsgränssnitt (API) som genomförs genom en kombination av CNK-tjänster och ett lågnivåruntime-bibliotek. AMC API möjliggör logisk namngivning av resurser, vilket ger operativsystemet och körtiden frihet att fördela fysiska resurser efter behov av flera processer. Samtidigt exponerar API alla hårdvaruaspekter som kan vara av intresse för programmerare såsom kvadranten och valvstrukturen hos enskilda AMC:er. Olika datastrukturer i ett program kan behöva placeras i minne i olika layouter. Data som endast används av värdprocessorn skulle normalt vara randiga över alla AMCs för att maximera bandbredden användning. Datastrukturer som manipuleras av körfält inom en AMC måste dock fysiskt tilldelas minnet i denna AMC. AMC API stöder två typer av minnesplaceringssamtal. Den stöder omlokalisering av en befintlig region av kundens adressutrymme till en viss AMC, en kvadrant inom AMC, eller till och med ett valv inom en kvadrant. Dessutom stöder den fördelningen av nya regioner med sådana särskilda lokaliseringsegenskaper. Slutligen innehåller AMC API bestämmelser om fördelning av minnesregioner för passerande parametrar, för användning som en stack efter kod i ett körfält, och för att returnera värden från AMC körfält tillbaka till värden. AMC arkitekturen implementerar en balanserad blandning av flera former av parallellism (heterogena processorer, multitrådning, undervisning-nivå parallellism, vektor och rumslig SIMD) för att ge utmärkt effekt-prestanda för verkliga högpresterande datorapplikationer. Dessutom har AMC-behandlingsfilar radikalt olika minnesåtkomstegenskaper (latens, bandbredd, koherens) än typiska processorer eller acceleratorer. Den unika energimedvetna arkitekturen, och särskilt den exponerade rörledningen, kräver starkt kompilatorstöd för att produktivt och effektivt kunna använda ett system som innehåller AMC. AMC-kompilatorn stöder frontends för C, C++ och FORTRAN språk. Den förlitar sig på användaren att kommentera källkod med OpenMP 4.0 accelerator direktiv. Dessa direktiv gör det möjligt för användaren att identifiera kodavsnitt som kommer att köras på AMC-körfält och att identifiera regioner med data som nås under körning på en AMC-körfält. Kompilatorn genererar AMC binär kod för de identifierade kodsektionerna, och kod för att hantera överföringen av utförandet mellan AMC och värddatorn. Kompilatorn analyserar självständigt loopboen inom den kod som är avsedd för AMC för att utnyttja vektoranläggningarna i AMC-arkitekturen. Compiler transformationer som loopblockering, loop versioning och loop avrullning används för att avslöja potentialen för utnyttjande av alla former av parallellism som finns på en AMC-fil. Dessa omvandlingar tillämpas på ett integrerat sätt, snarare än separat, för att minimera kodstorleken och samtidigt behålla god kodkvalitet. Vid kompilatorn backend, en kartläggning fas först intelligent partitioner instruktioner på en av fyra skivor med hjälp av en multilevel graf partitioning heuristic [16]. Programvarupipelline, en teknik där successiva iterationer av en loop överlappas och planeras för parallell körning, används sedan för att förbättra utnyttjandet av de funktionella enheterna på en AMC-fil. En polynom-tid heuristisk baserad på Swing Modulo Scheduling-algoritm [17] används som schemaläggningsalgoritm. Algoritmen hedrar den exponerade pipeline naturen av arkitekturen, med hänsyn till instruktioner latenser och registrera portbegränsningar för att komma fram till ett giltigt och effektivt schema. Algoritmen försöker också kontrollera hastigheten för utfärdande av laster och butiker till minne schemaläggning dem tillräckligt tidigt för att dölja latency samtidigt som du undviker att fylla upp LSQ. De tekniker som används av kompilatorn mål optimal användning av resurser och därmed bra prestanda, men de kommer till en kostnad i LIB utrymme. Funktionssamtal inom AMC-kodsektioner kan hjälpa till att minska antalet poster som behövs, särskilt när samtalen görs till noggrant optimerade biblioteksrutiner. En mer allmän mekanism, en programvara instruktion cache liknande den som beskrivs i [18], utvecklades dock för att övervinna begränsningen av 512 poster i LIB. När du använder LIB som en programvara instruktion cache, är det partitioneras till flera lika stora slots. Kompilatorn arrangerar AMC-koden i minne i block av storlek som är mindre än eller lika stora som LIB-facken, och använder LoadLIB-instruktionen för att dynamiskt ladda in instruktionsblock i LIB-facken i enlighet med programmets kontrollflöde. Olika optimeringar används för att begränsa omkostnaderna för förgrening och lastning av nya sektioner av kod. Flera experiment har utförts med hjälp av AMC-simulatorn, främst för att karakterisera prestanda och effektförbrukning hos AMC, och för att undersöka den grundläggande förmågan hos AMC att utföra vektoriserbara regioner av olika typer av applikationer. Några representativa experiment beskrivs nedan. Bandbredd och latensegenskaper för minne och tyg Figur 3 visar latensen för ett sekventiellt tillträdesmönster från en fil med hjälp av ett adresseringsschema som placerar intilliggande cachelinjer i samma valv med valvregulatorn som fungerar i en sluten sidpolicy där DRAM-sidan stängs efter varje åtkomst. Alla förfrågningar som behandlas av valvets styrenhet är 32 B avläsningar, utnyttjar begäran-kombinationen kapacitet av körfältet för sekventiella åtkomster. Tre grafer visas som motsvarar den minsta latens som observerats för varje värde på bandbredden i en slumpmässig uppsättning accesssekvenser, den maximala latensen och den genomsnittliga latensen. Den uppnåeliga sammanlagda bandbredden förblir under 280 GB/s, 87 % av DRAM-gränssnittets bandbredd, eftersom varje DRAM-sida cyklas fyra gånger för varje 128 B på varandra följande data. Den slutna sidpolicyn skadar prestandan för detta tillträdesmönster. Figur 4 visar resultaten för samma åtkomstmönster, men med hjälp av en öppen policy där DRAM-sidan lämnas öppen efter varje begäran, standardfallet för AMC. Grafen visar att upp till 310 GB/s av den sammanlagda bandbredden, nästan 97 % av toppen, nu kan utnyttjas. Detta motsvarar den teoretiska gränsen, med hänsyn till den påföljd som uppstår för att byta förare på TSV:erna när en annan dör av DRAM stacken väljs. Figur 4 visar också den lägre genomsnittliga latensen för tillträde i open-page-läget. Det visar vidare att tillgångens latens ökar från cirka 50 cykler, när bandbredden på tyget är låg, till så mycket som 180 cykler eller mer när bandbredden utnyttjas, och därmed trängsel på tyget, är hög.  En vanlig kärna som används vid klassificering av superdatorinstallationer är dubbelprecisionsmatris-matris multiplikationsrutinen (DGEMM), en viktig del av riktmärket High Performance Linpack (HPL) [19], som utvärderar funktionen C 1⁄4 C  och A Â B, där A, B och C är matriser. Denna rutin kodades i monteringsspråket och utvärderades på en AMC. Prestandamåttet för detta riktmärke är floppen/s-medelvärdet under utförandets gång. Med lämpliga blockeringstekniker och användning av atomiska flyttalsoperationer med kombination, var det möjligt att uppnå så mycket som 83 % av toppprestandan på AMC. På så sätt kan en systemnod med 16 AMC upprätthålla så mycket som 4,3 teraflop/s per nod. Den effekt som förbrukas per AMC är cirka 10 W för en konstruktion baserad på 14 nm-teknik, vilket resulterar i totalt 160 W och en verkningsgrad på 26 Gflop/s/W. Denna effektivitet kommer att minskas något på grund av den extra effekt som förbrukas av värdprocessorn. Eftersom det knappast finns något arbete som utförs av värden under beräkningen, kan aggressiv kraftförsörjning begränsa den effekt som förbrukas av delar av systemet utanför AMC. En försiktig uppskattning av den slutliga effekten/prestandan för ett AMC-baserat system för denna rutin är 20 Gflop/s/W. Som jämförelse levererar Blue Gene/Q-systemet (45 nm-tekniken) 2,1 Gflop/s/W, medan det nuvarande bästa systemet i Green500-rankningen, Tsubame-systemet (28 nm-tekniken) levererar 4,4 Gflop/s/W. Med tanke på trenderna inom teknikskalning är det osannolikt att dessa system kommer att omfatta mer än 10 Gflop/s/W i den 14 nm-teknik som har antagits i detta dokument. Kärnan i en typisk beräkning i en processor utförs inom ALU och registerfilerna, som står för mindre än en tredjedel av området och makten i samtida processorer. Även i en effektiv processor som Blue Gene/Q, det område som upptas av vektor flyttals enheter och tillhörande registerfil står för endast 38% av kärnområdet och 27% av strömmen. I kontrast, Figur 5, som visar den andel av området och kraft som går in i olika enheter inom en körfält av AMC, indikerar att ALU och registerfiler står för så mycket som 72% av området och 85% av kraften i en AMC körfält, vilket bekräftar alla mikroarkitekturala beslut som beskrivits tidigare. DAXPY [20] utvärderar funktionen Y 1⁄4 Y ∂ a В X, där a är ett konstant värde, och X och Y är vektorer. Denna rutin laddar två element från minnet och lagrar ett element tillbaka till minnet för varje flyttal multiplicera-add. Således, denna rutin betonar bandbredden till minnet snarare än flyttal-punkt utnyttjande. När alla 32 körfält användes för att utföra denna beräkning, var det möjligt att gå tillbaka 4.95 beräkningar per cykel per AMC med vektorer randiga över alla valv och så många som 7.66 beräkningar per cykel per AMC med vektorer blockerade i valv. Den senare hastigheten motsvarar en läsbandbredd på 153,2 GB/s och en skrivbandbredd på 76,6 GB/s, per AMC, eller 2,4 TB/s (läsa) och 1,2 TB/s (skriva) över noden medan du utför DAXPY, nästan 10 gånger den bandbredd som skulle uppnås om rutinen utfördes på värdprocessorn. DAXPY prestanda För att kvantifiera kompilatorns prestanda jämfördes en kompilerad version av en dubbelprecisionsvolymberäkning som utför en bestämningsberäkning på ett enda körfält med en handskriven monteringsspråkversion. Loopen kommenterades med OpenMP 4.0 pragma #pragma omp-målkartanðx; y; z; volpå, som leder kompilatorn att placera inmatnings- och utgångsmatriserna x, y, z och vol på AMC och att initiera RAT-tabellerna i var och en av körfälten i AMC i enlighet med detta. Programmering i monteringsspråk är tröttsamt eftersom kärnan naturligt kartlägger endast tre av de fyra skivorna i körfältet. Däremot kan kompilatorn lättare utnyttja alla fyra skivorna. Dessutom kan schemaläggaren minska stånden på grund av fördröjning i hämta från minne och på grund av en full belastningsbutik kö ner till endast 2,7% av den totala körningstiden, vilket leder till en flyttal utnyttjande av 33%, vilket är 71% bättre än den handskrivna versionen. En liknande åtgärd genomfördes för det tidigare nämnda DDEMM-riktmärket. På en enda filversion av koden har kompilatorn kunnat uppnå 75 % flyttalseffektivitet, jämfört med de 85 % som har uppnåtts genom handskriven kod på en enda fil. Kompilatorn har också producerat kod för ett antal kärnor av intresse för superdatorgemenskapen för enstaka körfält, för flera körfält och för MPI-program som använder flera AMC med en MPI-domän per AMC. Många av dessa kärnor hade stora instruktionsavtryck för vilka kompilatorn automatiskt genererade kod med hjälp av mekanismen för programvaruinstruction-cache för att övervinna storleksbegränsningarna för LIB. Ytterligare justeringar och experiment genomförs på dessa och andra riktmärken och resultaten kommer att presenteras i ett kommande dokument. Detta papper beskrev en ny process-in-minne arkitektur som kallas Active Memory Cube, som implementerar en uppsättning bearbetningsenheter i basskiktet under en stack av DRAM dör. Processenheternas instruction-set-arkitektur och mikroarkitektur anpassades till vektorkraven för gemensamma vetenskapliga tillämpningar och till de låga effektkraven för framtida exaskalasystem. Komplexa funktioner som införts i hårdvaran av traditionella arkitekturer uteslöts i intresset av att maximera utnyttjandet av det begränsade område som finns i baslogiken skiktet och maximera effekt-prestanda för tillämpningar av intresse. Samtidigt utsattes hårdvarumikroarkitekturen för programvara genom instruction-set arkitekturen för att göra det möjligt för programvara att ställa in program för prestanda. Programinfrastrukturen utformades kring AMC-konceptet, inklusive en cykelaccelererad simulator, en uppsättning funktioner i operativsystemet och ett gränssnitt som underlättar konfiguration och hantering av resurserna i AMC. Programmeringsparadigmet på nodnivå som valts för att demonstrera AMC:s funktioner är OpenMP 4.0. En kompilator som tar program annoterade med OpenMP 4.0 direktiv och producerar körbar kod för AMC närmar sig slutförandet. Experiment som utförs visar de framträdande egenskaperna hos AMC, nämligen dess interna bandbredd som är en storleksordning som är större än den som är tillgänglig från typiska processorer till minne, dess förmåga att ge en storleksordning större antal operationer per sekund jämfört med traditionella processorer, förmågan att köra betydande delar av arbetsbelastning nära minnet, och förmågan att utnyttja den stora grad av parallellism som tillhandahålls av arkitekturen. Kombinationen av dessa funktioner gör det möjligt för energiförbrukningen i en AMC att vara mindre än hälften av vad som skulle behövas i traditionella system i samma teknik med flytande punktintensiva tillämpningar. AMC är ett bevis på idén om att bearbeta i minnet och den allmänna uppfattningen om att uppnå beräkningseffektivitet genom att flytta beräkning till data i stället för den traditionella tekniken att föra data till en central bearbetningsenhet [21].
Till exempel Active Memory Cube REF är en representativ design med HMC.
Active Memory Cube: A processing-in-memory architecture for exascale systems
{'venue': 'IBM J. Res. Dev.', 'journal': 'IBM J. Res. Dev.', 'mag_field_of_study': ['Computer Science']}