Nya algoritmer och optimeringstekniker behövs för att balansera den accelererande trenden mot bandbreddsstarka multikärnchips. Det är välkänt att prestandan hos schablonkoder kan förbättras genom tidsblockering, vilket minskar trycket på minnesgränssnittet. Vi introducerar ett nytt pipeled tillvägagångssätt som explicit använder delade cache i multicore miljöer och minimerar synkronisering och gräns overhead. För kluster av delade minnesnoder visar vi hur tidsblockering kan användas framgångsrikt i en hybrid delad/distribuerad minnesmiljö. 1 Temporal blockering av schablonkoder Den Jacobi algoritmen är en enkel metod för att lösa gränsvärdesproblem. Det fungerar här som en prototyp för mer avancerade stencilbaserade metoder som lattice-Boltzmann algoritm (LBM). I tre dimensioner, en schablon (cell) uppdatering beskrivs av Successiva svep över beräkningsdomänen utförs för att nå konvergens, skriva till rutnät A och B i sin tur. Om man räknar den vanliga läsningen för ägarskap (RVO) på ett skrivfel, har kärnan en naiv kodbalans på B c = 8/6 W/F (dubbelprecisionsord per flopp). Det faktiska antalet ord som överförs över den långsammaste datavägen (minnesbussen) kan dock minskas till tre per schablonuppdatering med ett lämpligt rumsligt blockeringsschema. Dessutom kan RFO kringgås på nuvarande x86-baserade processorarkitekturer genom att använda icke-temporella butiksinstruktioner, som kringgår cachehierarkin. Dessa och andra välkända standardoptimeringar som datajustering och SIMD vektorisering har tillämpats för vår baslinjeversion av algoritmen och beskrivs i litteraturen [1, 2]. Vi använder OpenMP-parallel C/C++-kod när det är möjligt, och återgår till kompilatorns inneboende endast om det är nödvändigt, t.ex. om kompilatorn avvisar SIMD-vektorisering eftersom en loop körs bakåt (som är fallet med den komprimerade rutnätsversionen av rörledningsblockering, som kommer att beskrivas i Sect. När det gäller de åtgärder som vidtagits för att minska utsläppen av växthusgaser och för att minska utsläppen av växthusgaser är det viktigt att se till att dessa åtgärder genomförs så snabbt som möjligt och på ett effektivt sätt. Den minnesbundna prestandan för baslinjekoden på en viss arkitektur kan enkelt uppskattas genom att anta att minnesbandbredden är den enda begränsande faktorn, och att alla andra bidrag kan döljas bakom den. Detta antagande är giltigt för nuvarande multicore processorer om alla kärnor som delar ett minne gränssnitt används i en parallell beräkning, men kan vara falska för enkelgängad kod [8]. Om den uppnåeliga STREAM COPY bandbredd (med användning av icke-temporala butiker) är M s, en "perfekt" baslinje Jacobi kod (B c = 0,33 W/F) bör visa en prestanda på 1
I ett mer allmänt arbete med schablongenomföranden undersöker REF uttryckligen användningen av delade cacheminnen i flerkärniga system för att genomföra en rörledningsbaserad tidsblockeringsmetod för schablonberäkning.
Multicore-aware parallel temporal blocking of stencil codes for shared and distributed memory
{'venue': 'ArXiv', 'journal': 'ArXiv', 'mag_field_of_study': ['Computer Science']}