Lab 3 OMP Tasks: Merge Sort
Study the OMP tasks lecture. see the steps in the nfib code discussed in that lecture.
Download and untar the provided tasks.tar file. This is the
starting point for your experiments.
Time sequential code
Start by running the sequential version on a quiet veggie machine. Run it
a few times, and get a median run time for this. You can test your code
by running it with a small input size, e.g., Merge_sort_debug 100. For all timing
experiments run your codes with the default (no explicit size on the command
line) size of 100,000,000.
Make it parallel
Now, copy the sequential Merge_sort.c code into Merge_sort_parallel.c to
make this code parallel, using OMP task parallelism. Spawn two new
tasks, one for each recursive mergesort call. Adjust your Makefile.
Keep in mind: the pragma parallel should only be executed once.
Also, don't merge the left and right halves of the array until they are
sorted, i.e. you need a taskwait.
First parallel version: no pruning
Do not prune the task tree yet. Call this code Merge_sortNP (for not pruned).
Run the parallel code for 1, 2, 3, 4, 5, 6, 7, 8 threads. See how the
run times compare to the sequential version. Why do you think you are getting
the results you are? Think about how many tasks are spawned. Bring this to the
discussion on this topic (later).
Second parallel version: pruning
Now prune your code by only spawning sufficiently large tasks. Call this code
Merge_sortP. Run the parallel code for 1, 2, 3, 4, 5, 6, 7, 8
threads. Experiment with tasks sizes and create a speedup curve for your
preferred task size. See how the run times compare to the sequential and
unpruned versions. Think about how many tasks are spawned now. Bring your
observations to the discussion on this topic.
Third parallel version: spawning only one task
Now change your code to spawn only one task for one of the recirsive calls,
and let the other recursive call be done by the parent task. Call this code
Merge_sortS. Experiment with it. What are your observations?
Summarize your observations to take to the discussion on OMP Tasks.