Cilk Plus

Cilk Plus er en udvidelse til C og C ++ programmeringssprog, designet til flertrådede parallel computing.

Cilk Plus tilføjer finkornet opgave støtte til C og C ++ programmeringssprog, hvilket gør det lettere at skrive parallelle programmer, der udnytter flere processorer og vector instruktioner til rådighed på moderne CPU'er. Det giver enkle sprog udvidelser til at udtrykke data og opgave parallelitet til C og C ++ sproget. Cilk Plus kan bruges til opbygning af IA-32 og Intel® 64 arkitektur programmer, der kører på Windows, Linux og OS X.

Cilk plus giver støtte til både opgaven og data parallelitet. Det er særligt velegnet til, men ikke begrænset til, del og hersk algoritmer. Denne strategi løser problemer ved at bryde dem i sub-problemer, der kan løses uafhængigt af hinanden, så at kombinere resultaterne. Rekursive funktioner bruges ofte til del og hersk algoritmer.

Cilk Plus er implementeret i en række compilere:

  • Intel C ++ Compiler - Intel annoncerede støtte for Cilk Plus udvidelser til C og C ++ med udgivelsen af ​​Intel compiler i intel Komponist XE 2010.
  • GNU Compiler Collection - Intel har implementeret de Cilk Plus udvidelser i GCC C og C ++ compilere, og den fulde gennemførelse er blevet fusioneret ind i GCC hovedstrækning fra version 4.9.
  • Dunk / LLVM - Intel annonceret i februar 2013, at det var i orden på en implementering af Cilk Plus som en udvidelse til klang / LLVM. Arbejdet hidtil er tilgængelig på GitHub.

Den Cilk Plus runtime bibliotek er udgivet under to licenser:

  • Kommercielle, når leveres med Intel C ++ Compiler.
  • BSD-3, når der følger med GCC C og C ++ compilere og Dunk / LLVM compiler. Kilderne er også tilgængelige fra den cilkplus.org hjemmeside under BSD-3 licens.

Cilk Plus tilbyder en række forbedringer i forhold til OpenMP, for eksempel garanteret maksimal brug af hukommelse skalering. Udvikleren samfund og forum er placeret på Cilk Plus hjemmesiden.

Historie

Den Cilk programmeringssprog voksede ud af tre separate projekter på MIT laboratorium for Datalogi:

  • Teoretisk arbejde med planlægning multi-threaded applikationer.
  • STARTECH - en parallel skak program bygget til at køre på Thinking Machines Corporation Connection Machine model CM-5.
  • PCM / gevind-C - en C-baserede pakke for planlægning continuation-forbifarten-stil tråde på CM-5

I april 1994 de tre projekter blev kombineret og døbt "Cilk". Navnet Cilk er ikke en forkortelse, men en hentydning til "nice tråde" og C-programmeringssproget.

MIT Cilk er en udvidelse af C, og gennemføres som en kilde-til-source oversætter. Den Cilk-1-system blev udgivet i september 1994. Den nuværende implementering, Cilk-5.3, er tilgængelig fra MIT datalogi og kunstig intelligens Laboratory, selvom det understøttes ikke længere.

I 2006 Cilk Arts licenseret Cilk teknologi fra MIT med det mål at udvikle en kommerciel C ++ gennemførelse. Cilk ++ v1.0 blev frigivet i december 2008 med understøttelse af både Windows * Visual Studio og GCC / C ++ på Linux.

Den 31. juli 2009 Cilk Arts, meddelte, at dets produkter og ingeniør team var nu en del af Intel Corp Intel og Cilk Arts integreret og avancerede teknologi yderligere, hvilket resulterer i en September 2010 Meddelelse Intel Cilk Plus. Intel Cilk Plus adskiller sig fra Cilk og Cilk ++ ved at tilføje array-extensions, er indarbejdet i en kommerciel compiler, kompatibilitet med eksisterende debuggere, og ved hjælp af standard telekort konventioner. Intel har udtalt sit ønske om at forfine Cilk Plus og for at kunne gennemføres med andre compilere at få industrien bred vedtagelse. I november 2010, Intel offentliggjorde et sprog specifikation og en ABI specifikation til at gøre det muligt for andre compilere at implementere Cilk Plus og til eventuelt udnytte Intel runtime.

De centrale elementer

Søgeord

  • cilk_for - Tillader gentagelser af løkken kroppen til at blive henrettet i parallel.
  • cilk_spawn - Angiver, at en funktion opkald kan udføre asynkront, uden at kræve den, der ringer for at vente på, at vende tilbage. Dette er et udtryk for en mulighed for parallelitet, ikke en kommando, der mandater parallelitet. Intel Cilk Plus runtime vil vælge, om at køre funktionen sideløbende med sin ringer op.
  • cilk_sync - Angiver, at alle opfostrede opkald i en funktion, skal udfylde før henrettelse fortsætter. Der er en stiltiende cilk_sync ved slutningen af ​​hver funktion, der indeholder en cilk_spawn.

Reduktionsgear

Intel Cilk Plus indeholder reduktionsgear til at gøre parallel programmering lettere. Traditionelle parallelle programmer bruger låse til at beskytte delte variabler, som kan være problematisk. Forkert brug lås kan resultere i dødvande. Påstand for låste regioner kode kan bremse et program ned. Og mens låse kan forhindre løb, er der ingen måde at håndhæve bestilling, hvilket resulterer i ikke-deterministiske resultater. Reduktionsgear giver en lock-fri mekanisme, der tillader parallel kode for at bruge private "visninger" af en variabel, der er lagt sammen ved næste synkronisering. Sammenfletningen sker på en ordnet måde at fastholde de serielle semantik af Intel Cilk Plus ansøgning.

Opgave parallelitetstole- Værktøj

Parallelitet introducerer nye typer af fejl, der kræver specifikke redskaber til at finde dem. Download side i Cilk Plus fællesskabet hjemmeside tilbyder en Race Detector og skalerbarhed Analyzer, samt en værktøjskasse, så du kan bygge dine egne værktøjer:

Cilk Plus SDK

Intel Cilk Plus SDK leverer yderligere værktøjer til Intel Cilk Plus udviklere, der arbejder på Microsoft Windows * og Linux * operativsystemer. Disse værktøjer understøtter Intel Cilk Plus implementering, som både Intel Komponist C / C ++ compilere og GCC "cilkplus" filial C / C ++ compilere.

Intel Cilk Plus SDK indeholder følgende værktøjer:

  • Intel Cilk skærm løb detektor - Overvåger selve driften af ​​en Intel Cilk Plus-programmet, som køres med din test input. Cilk screen rapporter alle data racer indført af Intel Cilk Plus sproglige konstruktioner, der kunne støde på under udførelsen. Ved at overvåge gennemførelsen af ​​programmet, kan Cilk skærm registrere løb i din produktion binær, og kan endda afsløre løb produceret af tredjeparts-biblioteker, som du måske ikke har kildekoden.
  • Intel Cilk view skalerbarhed analysator - Hjælper dig med at forstå den parallelle ydeevne din Intel Cilk Plus-programmet. Cilk view rapporterer parallelle statistik om en Intel Cilk Plus-programmet og forudsiger hvordan præstation vil skalere på flere processor systemer. Derudover kan Cilk view automatisk benchmark en Intel Cilk Plus, der kører på en eller flere processorer. Integration af Cilk skærm og Cilk visning i Microsoft Visual Studio * 2008 og 2010 på Microsoft Windows * operativsystemer. Integration i brugerens udviklingsmiljø giver brugerne mulighed for at se fejl steder med et klik på en mus.

libzca

Ud over den Sprog Specification og Application Binary Interface Cilk definerer en mekanisme til lave overhead værktøj anmærkninger, kaldet metadata. libzca giver adgang til metadata uden at skulle parse metadata afsnit af et program, der bruger Intel Cilk Plus.

Array notation

Intel Cilk Plus indeholder et sæt notater, der giver brugerne mulighed for at udtrykke højt niveau operationer på hele arrays eller sektioner af arrays. Disse notater hjælper compileren til effektivt vectorize ansøgningen. Intel Cilk Plus giver C / C ++ operationer, der skal anvendes til flere array elementer parallelt, og giver også et sæt indbyggede funktioner, der kan bruges til at udføre vektoriseret skift, roterer, og reduktioner.

Elemental funktioner

En elementært funktion er en regelmæssig funktion, som kan gøres gældende på skalar argumenter eller array-elementer i parallel. De er mest nyttige, når det kombineres med matrix notation eller #pragma SIMD.

#pragma SIMD

Denne pragma giver compiler tilladelse til vectorize en løkke, selv i tilfælde, hvor auto-vectorization kunne mislykkes. Det er den enkleste måde at manuelt anvende vectorization.

Programeksempler

Fibonacci - cilk_spawn og cilk_sync

Følgende funktion beregner en Fibonacci nummer. Der er sikkert mere effektive algoritmer til at beregne Fibonacci tal, men denne ene giver en enkel rekursiv funktion og gør et godt eksempel:

Det centrale idé er, at beregningen af ​​FIB kan udføres parallelt med beregningen af ​​fib uden indblanding. Parallelitet kan udtrykkes i Cilk Plus med følgende modifikationer:

Den cilk_spawn søgeord angiver, at barnet funktionen kan udføre parallelt med den, der ringer. Koden efter en cilk_spawn erklæring omtales som en fortsættelse. Det er vigtigt at bemærke, at cilk_spawn tillader parallelitet. Det betyder ikke befaler det. Det er også vigtigt at bemærke, at cilk_spawn ikke oprette en tråd. Den runtime skaber en pulje af arbejdstager tråde, og cilk_spawn tillader runtime at stjæle fortsættelsen til at udføre i en af ​​arbejdstager tråde.

Den cilk_sync erklæring hedder det, at alle underordnede funktioner opfostrede fra denne funktion, skal udfylde før henrettelse fortsætter forbi denne erklæring. Der er altid en stiltiende cilk_sync ved slutningen af ​​hver funktion, der indeholder en cilk_spawn. Det er vigtigt at bemærke, at cilk_sync kun påvirker barnet funktioner opfostrede fra denne funktion. Funktioner opfostrede højere på opkaldet træet vil fortsætte med at køre parallelt med den funktion, udførelse af cilk_sync.

Simpelt for loop - cilk_for

Den cilk_for erklæring konverterer en simpel for-løkke til en parallel til løkke. Det vil sige, en hvor gentagelser af for-løkken organ kan udføres parallelt. Overvej følgende loop:

En bedre metode er at bruge en cilk_for løkke:

Intel Cilk Plus compiler og runtime samarbejder om at opdele arbejdet i løkken i halve, og derefter opdele det i halve igen, indtil der er nok brikker til at holde kernerne travlt, men samtidig minimere overhead pålagt af cilk_spawn. Ligesom den rekursive gennemførelse af FIB ovenfor, effektivt spreder arbejdet på tværs af de tilgængelige kerner og minimerer stjæler.

  0   0

Kommentarer - 0

Ingen kommentar

Tilføj en kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tegn tilbage: 3000
captcha