Join Now

SAS Forum 2015: Sæt alle kerner i gang – kommentarstyret parallelprogrammering i SAS

by SAS Employee GeorgMorsing on ‎10-07-2015 11:41 AM (291 Views)

 

Præsentation nummer 39 af Jingyu She, Danica Pension
8. oktober 2015

 

Beskrivelse:

I grad med den teknologiske udvikling kommer de fleste processorer nu med flere kerner. Normalt afvikles SAS-programmer serielt, men i mange SAS-programmer findes der statements, der kan køres uafhængigt af hinanden. Eksempler på dette kan være multiple proc sorts af uafhængige datasæt, eller proc sql statements, der henter data fra forskellige databaser. I sådanne tilfælde er det ikke nødvendigt at vente på, at en procedure afslutter, før den anden starter, og det giver god mening at booste performance ved at uddelegere disse til hver sin SAS-proces og køre procedurerne side om side. Der er før set værktøjer, som muliggør parallelisering i SAS, som SAS grid, MP-connect og X-kommandoen. Fælles for disse er en stejl indlæringskurve, og implementeringen kræver betydelige indgreb i programmets opbygning. Dog er det ofte først, når et program er nogenlunde færdigskrevet, at en bruger tager stilling til, om det kan betale sig at parallelisere. SAS grid kræver adgang til dyr hardware, og i de andre er det desuden svært at gennemskue ressourcefordelingen. Vi har også undersøgt SAS-optionerne ’threads’ og ’cpucount’, men dette optimerer kun inden for den enkelte procedure, og kan ikke benyttes til at køre flere statements parallelt. Vi vil præsentere en integreret brugergrænseflade i Base SAS®, hvor det er muligt for brugeren at vælge, hvilke SAS-statements der skal køres parallelt, ved at tilføje nogle simple SAS-kommentarer i koden. På denne måde kan vi gøre parallelisering til et naturligt optimeringstrin sidst i kodningsprocessen, uden at hele programmet på forhånd skal opbygges omkring tanken. Paralleliseringssyntaksen er ligetil og giver fuld brugerkontrol over, hvornår og hvilke kodeblokke der uddelegeres til en af de flere parallelt kørende SAS-processer. Da paralleliseringen foregår ved C# parser kommentarerne, kan programmet uredigeret afvikles serielt i SAS. I denne fremgangsmåde har vi for testdata observeret markant større performanceboost end for eksempel MP-connect. I indlægget vil vi vise/demonstrere paralleliseringen af to-tre testprogrammer ved hjælp af kommentarstyring samt måle den væsentlige performancegevinst, der er at hente ved metoden. For de interesserede sluttes der af med en uddybende forklaring af de tekniske mekanismer, der ligger bag.