En MDE-strategi för automatisk kodgenerering från UML/MARTE till OpenCL En avancerad teknik och vetenskapliga samhällen har använt parallellprogrammering för att lösa sina storskaliga komplexa problem under lång tid. Trots sin expertis på hög nivå har utvecklare i dessa samhällen ofta svårt att genomföra sina parallella tillämpningar på ett effektivt sätt. Vissa inneboende egenskaper hos parallell programmering bidrar till denna svårighet, inklusive rasförhållanden, minnesåtkomst flaskhals, granularitet beslut, schemaläggning politik och tråd säkerhet. För att underlätta programmeringen av parallella applikationer har utvecklarna specificerat flera tillvägagångssätt. De vanligaste standarderna är Open Message Passing (OpenMP) för delat minne och Message Passing Interface (MPI) för distribuerad minnesprogrammering. Dessa tillvägagångssätt låter oss uttrycka och utforska den potentiella parallellismen mellan tillämpningar och arkitekturer. OpenMP lägger till direktiv med samma syntaxnivå som målspråket (C, C++, Fortran), medan MPI genomförs som ett bibliotek för att hantera kommunikation mellan noder. Ur denna synvinkel är dessa strategier faktiskt verktyg för att lägga till parallellismresurser till en sekventiell programplaneringsmodell snarare än en lösning för parallell programplanering. I december 2008 släppte konsortiet som drivs av Chronos Group Open Computing Language (OpenCL) 1.0 specifikationen. 1 OpenCL är den första öppna, royaltyfria standarden för parallell programmering av heterogena system. Det ger en enhetlig programmeringsmiljö för programvaruutvecklare att skriva effektiv och portabel kod för högpresterande datorservrar, stationära datorsystem och handhållna enheter med hjälp av en varierad blandning av multicore CPUs, GPUs, cell-typ arkitekturer, och andra parallella processorer såsom digitala signalprocessorer (DSPs). Här presenterar vi en metod baserad på modelldriven teknik (MDE) 2 för att specificera, designa och generera OpenCL-applikationer. Detta tillvägagångssätt bygger på följande aspekter: • Vi föreslår tre nya metamodeller som tillgodoser väsentliga problem med en hel programplaneringspolitik, varierande definitioner och själva OpenCL-programmeringsmodellen.  • Vi föreslår en omvandlingskedja som innehåller så många modellomvandlingar som vi behöver för att generera en effektiv kod (med andra ord konkateterar vi enstaka, specifika modellomvandlingar för att lägga till eller ändra element som är utformade i en inmatningsmodell för att generera mellanliggande modeller mot målkoden). • Eftersom abstrakta modeller inte har all nödvändig information för att förbättra prestandan baserat på målhårdvaran, inkluderar vi vissa optimeringsnivåer för att (när det är möjligt) automatiskt genererad kod som är lika effektiv som manuellt skriven kod. För att få en teoretisk bas för några av de begrepp vi ska diskutera, se "Bakgrund granskning" sidofältet. Därefter diskuterar vi vår automatiska kodgenereringsmetod. Vår strategi syftar till att generera effektiv kod för OpenCL som en ny gren av vår Gaspard2-utvecklingsmiljö. 3 Under applikationsdesign använder Gaspard2 en Unid Modeling Language (UML) profil för modellering och analys av realtid och inbyggda (MARK) system för att definiera semantik till applikationen. Sedan, med hjälp av transformationskedjor, låter det oss automatiskt generera kod för en vald målplattform. En av de största fördelarna med MARTE är att den tydligt skiljer hårdvarukomponenterna från programvarukomponenterna. Detta görs genom stereotyper som delvis tillhandahålls av det detaljerade resursmodelleringsprogrammet (DRM), särskilt HwResource och dess härledda stereotyper. När det gäller hybriden (CPU och beräkna enheten) befruktning, är denna separation av största betydelse. Faktum är att i en codesign-miljö, vanligtvis olika team samtidigt skapa dessa två delar av systemet. Till exempel gör detta det möjligt att testa programvaran på olika typer av maskinvaruarkitektur, eller återanvända en arkitektur (med få eller inga ändringar) för olika program. Appliceringsmodellkonceptet är en grundläggande modelleringsprocess. Utvecklarna kommer i själva verket att definiera tre huvudaspekter av sin tillämpning: uppgifterna och deras sammankoppling, antalet upprepningar av en uppgift och dess hierarki, samt om den kommer att direktieras som tids- eller rumsliga lägen, och hur dataflödet ska uttryckas. Så småningom, för att optimera modellen, kan en smart procedur utföra modell refaktoring, en förändring som gjorts till den interna strukturen av en modell för att göra det lättare att förstå och billigare att ändra utan att ändra dess observerbara beteende. 4 Detta hjälper oss att hitta bra kompromisser i användningen av lagrings- och beräkningsresurser, liksom i den potentiella parallellism av uppgifter och data. För att tydligt skilja en värd från en beräkningsenhet, båda definierade i en OpenCL-plattformsmodell, tilldelas en taggad värdebeskrivning i HwResource-stereotypen antingen med Host eller med Enhet. Detta är en värdefull definition vid designtidpunkten, eftersom när vi väl har en fördelningsmodell kan transformationer snabbt identifiera kärnan från tilldelade uppgifter. Tilldelningsfasen definieras i fördelningsmodellering (Alloc) från MARTE-profilen. Fördelningen av funktionella tillämpningsdelar på tillgängliga resurser är den viktigaste frågan om systemdesign för specifika plattformar. Detta omfattar både rumslig fördelning och tidsschema, för att kartlägga vissa verksamheter på tillgängliga data- och kommunikationsresurser och kommunikationstjänster. Även om MARTE lämpar sig för modelleringsändamål kan det inte gå från modelleringsspecifikationer på hög nivå till utförandeplattformar. Gaspard2 fyller denna lucka och inför ytterligare begrepp och semantik för att uppfylla detta krav på systemsamkonstruktion. Gaspard2 definierar en installationsspecifikationsnivå för att generera kompilerbar kod från en applikationsmodell. Denna nivå avser specifikationen av en elementär komponent (EG): ett basblock med atomfunktioner. Utbyggnadsmodellen låter oss beskriva hur de intellektuella egenskaperna (IPs)-mycket optimerade och normalt parameteriserade funktioner som är beroende av måltekniken-måste kopplas till ECs. I MDE är en modellomvandling en sammanställningsprocess som omvandlar en källmodell till en målmodell. Käll- och målmodellerna överensstämmer med käll- respektive målmetamodellerna. En modellomvandling bygger på en uppsättning regler. Varje regel identifierar tydligt begrepp i källan och målmetamodellerna. En sådan nedbrytning underlättar utvidgningen och upprätthållandet av en sammanställningsprocess: nya regler utvidgar sammanställningsprocessen och varje regel kan ändras oberoende av andra. Reglerna specificeras i programmeringsspråk, vilket kan vara antingen absolut nödvändigt (beskriva hur en regel utförs) eller förklarande (beskriva vad som skapas av reglerna). Deklarativa språk används ofta i MDE eftersom reglernas mål kan specificeras oberoende av genomförandet.
Rodrigues m.fl. REF ger en metod för att generera OpenCL-kod från modeller med MARTE-profil.
An MDE Approach for Automatic Code Generation from UML/MARTE to OpenCL
{'venue': 'Computing in Science & Engineering', 'journal': 'Computing in Science & Engineering', 'mag_field_of_study': ['Computer Science']}