CONTENTS Title Page Copyright Page Preface 1 Overview of Parallel Processing 1.1 Advantages of Parallel Processing 1.2 Definition of Terms 1.3 Characteristics of a Parallel Processing Application 1.4 Software Models for Parallel Processing 1.4.1 Master/Slave 1.4.1.1 True Master/Slave Model 1.4.1.2 Self-Scheduling Master/Slave Model 1.4.1.3 Synchronization Method 1.4.2 Pipelining 1.4.3 Work Queue Processing 1.4.3.1 Synchronization Method 1.5 System Requirements 1.5.1 Privileges 1.5.2 Quotas 1.5.2.1 Subprocess Quota 1.5.2.2 AST Limit 1.5.2.3 Enqueue Quota 1.5.2.4 Global Section Quota 2 Process Management and Naming Operations 2.1 Accessing the PPL$ Facility 2.1.1 Initializing PPL$ 2.1.2 Deleting an Application 2.1.3 Terminating Access to the PPL$ Facility 2.2 Participant Management 2.2.1 Creating a Subordinate 2.2.2 Deleting a Subordinate 2.2.3 Retrieving Participant Information 2.3 Application-Wide Naming 3 Shared Memory Operations 3.1 Shared Memory Routines 3.1.1 Creating Shared Memory 3.1.2 Flushing Shared Memory to Disk 3.1.3 Deleting Shared Memory 3.2 Creating a Virtual Memory Zone 3.3 Deleting a Virtual Memory Zone 4 Synchronization Operations 4.1 Retrieving an Object Identifier 4.2 Barrier Synchronization 4.2.1 Creating a Barrier 4.2.2 Deleting a Barrier 4.2.3 Reading a Barrier 4.2.4 Waiting at a Barrier 4.2.5 Setting a Barrier Quorum 4.2.6 Adjusting a Barrier Quorum 4.3 Event Synchronization 4.3.1 Creating an Event 4.3.2 Deleting an Event 4.3.3 Enabling an Event AST 4.3.4 Enabling an Event Signal 4.3.5 Disabling an Event 4.3.6 Awaiting an Event 4.3.7 Triggering an Event 4.3.8 Reading an Event 4.3.9 Resetting an Event 4.3.10 Predefined Events 4.4 Semaphore Synchronization 4.4.1 Creating a Semaphore 4.4.2 Deleting a Semaphore 4.4.3 Decrementing a Semaphore 4.4.4 Incrementing a Semaphore 4.4.5 Reading a Semaphore Value 4.4.6 Adjusting a Semaphore Maximum 4.4.7 Setting a Semaphore Maximum 4.5 Spin Lock Synchronization 4.5.1 Creating a Spin Lock 4.5.2 Deleting a Spin Lock 4.5.3 Seizing a Spin Lock 4.5.4 Releasing a Spin Lock 4.5.5 Reading a Spin Lock 4.6 Work Queue Synchronization 4.6.1 Creating a Work Queue 4.6.2 Deleting a Work Queue 4.6.3 Reading a Work Queue 4.6.4 Inserting a Work Item 4.6.5 Removing a Work Item 4.6.6 Deleting a Work Item 5 Developing Parallel Processing Applications 5.1 Programming Considerations 5.1.1 Granularity and Decomposition 5.1.2 Data Dependence 5.1.3 Deadlock 5.1.4 Naming Components 5.1.5 Using SYS$HIBER 5.1.6 Disabling ASTs 5.1.7 VAX Ada and VAX FORTRAN Considerations 5.2 Comparing the Use of Synchronization Elements 5.2.1 Barriers 5.2.2 Events 5.2.2.1 Asynchronous Signal 5.2.3 Semaphores 5.2.4 Spin Locks 5.2.5 Work Queues 5.2.6 Sharing an Element Identifier 5.3 Performance Measurements 5.3.1 Geometric Model of Performance 6 Examples of Calling PPL$ Routines 6.1 BLISS-32 Example 6.2 VAX FORTRAN Example 6.3 VAX C Example PPL$ Reference Section PPL$ADJUST_QUORUM PPL$ADJUST_SEMAPHORE_MAXIMUM PPL$AWAIT_EVENT PPL$CREATE_APPLICATION PPL$CREATE_BARRIER PPL$CREATE_EVENT PPL$CREATE_SEMAPHORE PPL$CREATE_SHARED_MEMORY PPL$CREATE_SPIN_LOCK PPL$CREATE_VM_ZONE PPL$CREATE_WORK_QUEUE PPL$DECREMENT_SEMAPHORE PPL$DELETE_APPLICATION PPL$DELETE_BARRIER PPL$DELETE_EVENT PPL$DELETE_SEMAPHORE PPL$DELETE_SHARED_MEMORY PPL$DELETE_SPIN_LOCK PPL$DELETE_VM_ZONE PPL$DELETE_WORK_ITEM PPL$DELETE_WORK_QUEUE PPL$DISABLE_EVENT PPL$ENABLE_EVENT_AST PPL$ENABLE_EVENT_SIGNAL PPL$FIND_OBJECT_ID PPL$FLUSH_SHARED_MEMORY PPL$GET_INDEX PPL$INCREMENT_SEMAPHORE PPL$INDEX_TO_PID PPL$INSERT_WORK_ITEM PPL$PID_TO_INDEX PPL$READ_BARRIER PPL$READ_EVENT PPL$READ_SEMAPHORE PPL$READ_SPIN_LOCK PPL$READ_WORK_QUEUE PPL$RELEASE_SPIN_LOCK PPL$REMOVE_WORK_ITEM PPL$RESET_EVENT PPL$SEIZE_SPIN_LOCK PPL$SET_QUORUM PPL$SET_SEMAPHORE_MAXIMUM PPL$SPAWN PPL$STOP PPL$TERMINATE PPL$TRIGGER_EVENT PPL$UNIQUE_NAME PPL$WAIT_AT_BARRIER EXAMPLES 6-1 Using PPL$ Routines in BLISS-32 6-2 Using PPL$ Routines in VAX FORTRAN 6-3 Using PPL$ Routines in VAX C FIGURES 5-1 Time-Processor Product for a System with No Parallelism 5-2 Time-Processor Product for a System with Unlimited Parallelism 5-3 Time-Processor Product for a System with Limited Parallelism PPL-1 Signal Vector for a User-Defined Event PPL-2 Signal Vector for a PPL$-Defined Event