Document Type

Honors Project - Open Access


I offer my sincerest gratitude to my advisor, Prof. Elizabeth Shoop for her tireless editing and advising throughout this project. Without her exemplary guidance, monitoring, and constant encouragement, this thesis would not have been possible. I would also like to thank Prof. Dick Brown from St.Olaf College for his advice on ways to frame this thesis in a broader context. My grateful thanks are also extended to Prof. Susan Fox for her advice on technical details and assistance in keeping my progress on schedule.

I also take this opportunity to thank Ken (Zixiao) Wang for his assistant during the development of the Eight Puzzle Solver program.

Finally, I want to thank the CSInParallel program ( for offering me the chance to participate in research on parallel computing during two summers at Macalester College, which laid a firm foundation for this thesis.


With the rapid advancement of parallel and distributed computing (PDC), three types of hardware and their corresponding software (hardware-software pairs) are becoming more and more popular: Distributed Memory Systems with the Message Passing Interface (MPI) library, Shared Memory Systems with the OpenMP library and Co-processor Systems with a general purpose parallel computing library. Alongside the development of both hardware and software aspects of PDC, the process of designing parallel programs has also improved significantly over the years. A consequence of this is that researchers have been able to describe many parallel design patterns, which are recurring solutions to well-known problems within a well-defined context. This study connects the parallel design patterns with program performance on hardware-software pairs together by investigating how the former affects the latter. In particular, given a program written for a particular hardware-software pair and that contain certain design patterns, can we decide which patterns are likely to have positive effects on the performance of the program? This paper concludes by offering insight into how parallel design patterns could be used to improve parallel software development environments.



© Copyright is owned by author of this document