PerformanceProfilingforParallel% Cilk%Applica;ons%jjthomas/superurop-poster.pdf ·...
Transcript of PerformanceProfilingforParallel% Cilk%Applica;ons%jjthomas/superurop-poster.pdf ·...
![Page 1: PerformanceProfilingforParallel% Cilk%Applica;ons%jjthomas/superurop-poster.pdf · Cilk%Background% JamesThomas,T.B. Schardl,Charles Leiserson Keel%Founda;on%Undergraduate%Research%and%Innova;on%Scholar%](https://reader036.fdocuments.us/reader036/viewer/2022062414/5f0482217e708231d40e5163/html5/thumbnails/1.jpg)
Cilk Background
James Thomas, T.B. Schardl, Charles Leiserson Keel Founda;on Undergraduate Research and Innova;on Scholar
Performance Profiling for Parallel Cilk Applica;ons
DAG Modeling of Cilk Programs
Callback API Span and Work Collec;on
Addi;onal Sta;s;cs User Interface
main() {! compute();! cilk_spawn compute();! compute();! cilk_sync;! compute();!}!• Extensions to C/C++ to support fork
(spawn)-‐join (sync) parallelism • Programmer simply needs to specify
code paths that can execute in parallel • RunAme handles thread creaAon and
assignment of work to threads
• Each blue node represents a call to compute()!
• The programmer has specified that the second and third calls can execute in parallel, and the fourth call must execute only aFer the second and third have completed
• The criAcal path length (span) is 3 calls and the total work is 4 calls
Compiler inserts calls to callback funcAons in important points in Cilk program’s execuAon, and profiling tools can implement these callbacks to get data on program execuAon main() {! cilk_enter_spawning_fn();! cilk_spawn compute();! compute();! cilk_sync;! cilk_sync_end();! cilk_leave_spawning_fn();!}!
A sampling of inserted callbacks (smaller program
than above)
• Profiling informaAon on parallel loops: cilk_for (int i = 0; i < n; i++)! compute();!!• Work and span informaAon for all possible
program roots while maintaining algorithmic efficiency of profiler:
main() {! cilk_spawn compute();! compute();! cilk_sync;!}!!• BePer data for recursive code
cilk_enter_spawn():!• start stopwatch cilk_leave_spawn():!
• stop stopwatch • add Ame spent in spawned
funcAon to total work • check if spawned funcAon falls
on span of parent (the spawning funcAon)
!
cilk_enter_spawning_fn():!• start stopwatch
cilk_sync_end()/cilk_leave_spawning_fn():!• stop stopwatch and add
conAnuaAon aFer spawn to total work
• check if conAnuaAon falls on span
ImplementaAons of some of the callbacks for a tool that measures program work and span:
Data on each funcAon’s contribuAon to work and span is also maintained in tables by the tool
What are work and span assuming these calls are program roots?
• Report staAsAcs in spreadsheet form (numbers are in units of Ame)
• May add UI where these staAsAcs are displayed on a funcAon call graph
1: int fib(int n) {!2: if (n <= 1) return n;!3: int a = cilk_spawn fib(n – 1);!4: int b = fib(n – 2);!5: cilk_sync;!6: return a + b;!7: }!
fib.c