Search
Sites and Affiliations
Leadership
Research and Applications
Major Accomplishments
Frequently Asked Questions
Knowledge and Technology Transfer
Calendar
Education and Outreach
Media Resources
Technical Reports and Publications
Parallel Computing Research - Our Quarterly Newsletter
Contact Information
CRPC Home Page

UniGuide Featured Site

Structured Multithreaded Programming for Shared-Memory Multiprocessors

John Thornley

Presented at the 1997 CRPC Annual Meeting Poster Session

Shared-memory multiprocessors have recently emerged as the predominant architecture for high-performance computing at all levels, from quad-processor PCs through to supercomputers. Multithreaded programming of these powerful machines is supported by lightweight thread libraries provided with modern operating systems (such as Windows NT, OS/2, Solaris, and UNIX/Pthreads) and by multithreaded languages (such as Java and Ada 95). Practical opportunities now abound for high-performance multithreaded applications to make a significant impact in commodity software areas such as business and personal computing, as well as in science and engineering.

In this project, we are developing a structured multithreaded programming model for high-performance programming of shared-memory multiprocessors. With this model, multithreaded programs are developed using traditional sequential languages, methods, and tools, yet the programmer has explicit control of multithreading and performance. Most multithreaded programs are written as sequential programs annotated with pragmas that indicate where ordinary blocks and for loops can be executed in a multithreaded manner without changing the sequential meaning of the program. Innovative synchronization constructs, based on ordinary sequential operations on boolean flags and integer counters, allow sophisticated synchronization within multithreaded blocks and for loops. In addition, explicitly multithreaded blocks and for loops and traditional synchronization constructs such as locks provide for nondeterministic multithreading.